废话不多说,直接奉上代:
フレーム.java
パッケージのヘビ。 import java.awt.Graphics;import java.awt.Menu;import java.awt.MenuBar;import java.awt.MenuItem;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt .event.KeyEvent;インポート java.awt.event.KeyListener; javax.swing.JFrameをインポートします。 public class Frame extends JFrameimplements KeyListener { /** * */ Boolean isAlive;ブール値は一時停止です。パネルパネル;文字の方向。プライベート静的最終ロングシリアルバージョンUID = 1L; public Frame(){ // TODO 自動生成されたコンストラクター スタブ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300,300); addKeyListener(this);パネル = 新しいパネル();追加(パネル); setVisible(true); isAlive = true; isPause = false;方向 = 新しい文字('d');メニューバー menuBar = new MenuBar();メニュー menu = new Menu("メニュー"); MenuItem リセット = new MenuItem("newgame"); MenuItem 一時停止 = new MenuItem("一時停止"); stop.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // TODO 自動生成メソッド スタブ if(!isPause) isPause= true; else isPause= false; } }); reset.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // TODO 自動生成メソッド スタブ restart(); } }); menu.add(リセット); menu.add(一時停止); menuBar.add(メニュー); setMenuBar(メニューバー);パブリックボイドリセット(){パネル.リセット(); isAlive = true; } @Override public void keyTyped(KeyEvent e) { // TODO 自動生成メソッドスタブ } @Override public void keyPressed(KeyEvent e) { // TODO 自動生成メソッドスタブ if(e.getKeyCode()==KeyEvent.VK_UP ) 方向 = 'w'; if(e.getKeyCode()==KeyEvent.VK_DOWN) 方向 = 's'; if(e.getKeyCode()==KeyEvent.VK_LEFT) 方向 = 'a'; if(e.getKeyCode()==KeyEvent.VK_RIGHT) 方向 = 'd'; } @Override public void keyReleased(KeyEvent e) { // TODO 自動生成されたメソッド スタブ } public voidPaint(Graphics g){panel.repaint(); } }
Launch.java
パッケージのヘビ。インポート java.util.Timer;インポート java.util.TimerTask; public class Launch extends TimerTask { Frame Frame = new Frame(); public Launch() { // TODO 自動生成されたコンストラクタ スタブ } boolean crashWall(){ SnakeBody sb = Frame.panel.snake.getFirst(); if((sb.x<0)||(sb.y<0)||(sb.x>=Panel.LINE)||(sb.y>=Panel.LINE)) true を返します。それ以外の場合は false を返します。 voidInitial(){frame.panel.snake.add(newBody());フレーム.パネル.フード = newBody(); } @Override public void run() { // TODO 自動生成メソッドスタブ if(frame.panel.snake.isEmpty())initial(); if(frame.isAlive) if(!frame.isPause){ if(goStraight()) Frame.isAlive = false;フレーム.リペイント(); if(crashWall()) フレーム.isAlive = false; SnakeBody newBody(){ SnakeBody sb = new SnakeBody();ブール値のオーバーラップ = true; while(overlap){ オーバーラップ =false; sb.x = (int) (Math.random()*(Panel.LINE-2)+1); sb.y = (int) (Math.random()*(Panel.LINE-2)+1); if(!frame.panel.snake.isEmpty()) for(SnakeBody s :frame.panel.snake) if(sb.equals(s)) オーバーラップ =true; sb を返します。 void Eat(SnakeBody sb){frame.panel.snake.addFirst(sb); boolean goStraight(){ boolean 結果 = false; SnakeBody sb =new SnakeBody(frame.panel.snake.getFirst()); Frame.panel.snake.removeLast(); if(frame.direction=='w') sb.turnUp(); if(frame.direction=='s') sb.turnDown(); if(frame.direction=='a') sb.turnLeft(); if(frame.direction=='d') sb.turnRight(); for(SnakeBody s :frame.panel.snake){ if(sb.equals(s)) result = true; Frame.panel.snake.addFirst(sb); if(sb.equals(frame.panel.food)){ if(frame.direction=='w') Frame.panel.food.turnUp(); if(frame.direction==')frame.panel.food.turnDown(); if(frame.direction=='a') フレーム.パネル.フード.turnLeft(); if(frame.direction=='d') フレーム.パネル.フード.turnRight();食べる(フレーム.パネル.フード);フレーム.パネル.フード = newBody();結果を返します。 } public static void main(String[] args){ // TODO 自動生成メソッド スタブ Launch timertask = new Launch();タイマー timer = new Timer(); timer.schedule(タイマータスク,0,500); } }
パネル.java
パッケージのヘビ。インポート java.awt.Color;インポート java.awt.Graphics;インポート java.util.LinkedList; javax.swing.JPanelをインポートします。 public classPanel extends JPanel { /** * */ private staticfinallongserialVersionUID = 1L; public LinkedList<SnakeBody> ヘビ = new LinkedList<SnakeBody>();静的最終整数 LINE = 10; SnakeBody フード = new SnakeBody(-99,-99); public Panel() { // TODO 自動生成されたコンストラクタ スタブ } public void restart(){ tongue.clear(); public voidPaint(Graphics g){ g.setColor(Color.white); g.fillRect(0, 0, getWidth(), getHeight()); for(SnakeBody sb : ヘビ){ g.setColor(Color.black); g.drawRect(sb.x*getWidth()/LINE,sb.y*getHeight()/LINE,getWidth()/LINE,getHeight()/LINE); g.setColor(Color.orange); g.fillRect(sb.x*getWidth()/LINE,sb.y*getHeight()/LINE,getWidth()/LINE,getHeight()/LINE); g.setColor(Color.red); g.fillRect(food.x*getWidth()/LINE,food.y*getHeight()/LINE,getWidth()/LINE,getHeight()/LINE); }}
スネークボディ.java
パッケージのヘビ。クラス SnakeBody { int x; int y; public SnakeBody() { // TODO 自動生成されたコンストラクター スタブ x = 0; y = 0; public SnakeBody(int a,int b){ x = a; y = b; public SnakeBody(SnakeBody sb){ this(sb.x,sb.y); } public voidturnUp(){ y--; public void TurnDown(){ y++; public voidturnLeft(){x--;パブリックボイドturnRight(){x++;ブール値等しい(SnakeBody s){ if((x==sx)&&(y==sy)) true を返します。それ以外の場合は false を返します。 } }
上記は、本明細書で広く共有されているプラグインの全コードであり、Java の熟知に役立つことが期待されます。