أفضل ما في الأمر هو ما يلي:
Frame.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;استيراد java.awt .event.KeyEvent;import java.awt.event.KeyListener; import javax.swing.JFrame; public class Frame Extends JFramelets KeyListener { /** * */ Boolean isAlive; Boolean isPause; لوحة لوحة اتجاه الشخصية؛ serialVersionUID النهائي الطويل الخاص الثابت = 1L؛ public Frame(){ // TODO كعب المنشئ الذي تم إنشاؤه تلقائيًا setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300,300); addKeyListener(this); لوحة = لوحة جديدة ()؛ إضافة (لوحة)؛ setVisible(true); isAlive = true; isPause = false; الاتجاه = حرف جديد('د'); MenuBar MenuBar = new MenuBar(); قائمة القائمة = القائمة الجديدة("القائمة"); إعادة تعيين MenuItem = new MenuItem("newgame"); MenuItem Pause= new MenuItem("pause"); use.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated Method stub if(!isPause) isPause= true; else isPause= false; } }); set.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated way stubset(); } }); list.add(reset); list.add(pause); MenuBar.add(menu); setMenuBar(menuBar); } إعادة تعيين الفراغ العام () {لوحة. إعادة تعيين ()؛ isAlive = true; } @Override public void keyTyped(KeyEvent e) { // TODO Auto-generated style stub } @Override public void keyPressed(KeyEvent e) { // TODO Auto-generated style stub if(e.getKeyCode()==KeyEvent.VK_UP ) الاتجاه = 'ث'؛ if(e.getKeyCode()==KeyEvent.VK_DOWN) Directions = 's'; if(e.getKeyCode()==KeyEvent.VK_LEFT) Directions = 'a'; if(e.getKeyCode()==KeyEvent.VK_RIGHT) Direction = 'd'; } @Override public void keyReleased(KeyEvent e) { // TODO Auto-generated way stub } public void Paint(Graphics g){panel.repaint(); } }
Launch.java
ثعبان الحزمة import java.util.Timer;import java.util.TimerTask; إطلاق الطبقة العامة يمتد TimerTask { إطار الإطار = إطار جديد ()؛ 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)) return true; وإلا يعود كاذبا؛ } باطلة الأولي () {frame.panel.snake.add (newBody ())؛ frame.panel.food = newBody(); } @Override public void run() { // TODO كعب الروتين الذي تم إنشاؤه تلقائيًا if(frame.panel.snake.isEmpty()) الأولي(); if(frame.isAlive) if(!frame.isPause){ if(goStraight())frame.isAlive = false; Frame.repaint(); } if(crashWall())frame.isAlive = false; } SnakeBody newBody(){ SnakeBody sb = new SnakeBody(); التداخل المنطقي = صحيح؛ بينما (تداخل) {تداخل = خطأ؛ 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; } إرجاع بينالي الشارقة؛ } باطلة أكل(SnakeBody sb){frame.panel.snake.addFirst(sb); } boolean goStraight(){ نتيجة منطقية = خطأ؛ 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=='s')frame.panel.food.turnDown(); if(frame.direction=='a')frame.panel.food.turnLeft(); if(frame.direction=='d')frame.panel.food.turnRight(); أكل(frame.panel.food); frame.panel.food = newBody(); } إرجاع النتيجة؛ } public static void main(String[] args){ // TODO Auto-generated way stub Launch timertask = new Launch(); مؤقت مؤقت = مؤقت جديد () ؛ timer.schedule(timertask,0,500); } }
Panel.java
ثعبان الحزمة import java.awt.Color;import java.awt.Graphics;import java.util.LinkedList; import javax.swing.JPanel; public class Panel Extends JPanel { /** * */ Private static Final long serialVersionUID = 1L; LinkedList العام<SnakeBody> ثعبان = جديد LinkedList<SnakeBody>(); الخط النهائي الثابت = 10؛ طعام SnakeBody = SnakeBody الجديد (-99، -99)؛ public Panel() { // TODO كعب المنشئ الذي تم إنشاؤه تلقائيًا } public voidset(){ snake.clear(); } طلاء الفراغ العام(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); }}
SnakeBody.java
ثعبان الحزمة فئة SnakeBody {int x; كثافة العمليات ذ؛ public SnakeBody() { // TODO كعب المنشئ الذي تم إنشاؤه تلقائيًا x = 0; ص = 0; } public SnakeBody(int a,int b){ x = a; ص = ب; } public SnakeBody(SnakeBody sb){ this(sb.x,sb.y); } public void TurnUp(){ y--; } public void TurnDown(){ y++; } public void TurnLeft(){ x--; } public void TurnRight(){ x++; } boolean يساوي(SnakeBody s){ if((x==sx)&&(y==sy)) return true; وإلا يعود كاذبا؛ } }
يمكن أن يكون هناك العديد من الأشياء التي يجب عليك القيام بها الآن، لا يزال بإمكانك استخدام لغة جافا.