废话不多说,直接奉上代码:
Cadre.java
serpent de paquet; importer java.awt.Graphics; importer java.awt.Menu; importer java.awt.MenuBar; importer java.awt.MenuItem; importer java.awt.event.ActionEvent; importer java.awt.event.ActionListener; importer java.awt .event.KeyEvent; importer java.awt.event.KeyListener; importer javax.swing.JFrame ; classe publique Frame étend JFrame implémente KeyListener { /** * */ Boolean isAlive ; Booléen estPause ; Panneau de panneau ; Direction du personnage ; privé statique final long serialVersionUID = 1L ; public Frame(){ // TODO Stub de constructeur généré automatiquement setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300 300); addKeyListener(this); panneau = nouveau panneau (); ajouter (panneau); setVisible(vrai); est vivant = vrai ; estPause = faux ; direction = nouveau caractère('d'); MenuBar menuBar = new MenuBar(); Menu menu = nouveau Menu("menu"); MenuItem reset = new MenuItem("newgame"); MenuItem pause= new MenuItem("pause"); pause.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // TODO Stub de méthode généré automatiquement if(!isPause) isPause= true; else isPause= false; } }); reset.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // TODO Stub de méthode généré automatiquement reset(); } }); menu.add(reset); menu.add(pause); menuBar.add(menu); setMenuBar(menuBar); } public void reset(){ panel.reset(); est vivant = vrai ; } @Override public void keyTyped(KeyEvent e) { // TODO Stub de méthode généré automatiquement } @Override public void keyPressed(KeyEvent e) { // TODO Stub de méthode généré automatiquement if(e.getKeyCode()==KeyEvent.VK_UP ) direction = 'w'; if(e.getKeyCode()==KeyEvent.VK_DOWN) direction = 's'; if(e.getKeyCode()==KeyEvent.VK_LEFT) direction = 'a'; if(e.getKeyCode()==KeyEvent.VK_RIGHT) direction = 'd'; } @Override public void keyReleased(KeyEvent e) { // TODO Stub de méthode généré automatiquement } public void paint(Graphics g){ panel.repaint(); } }
Lancer.java
serpent de paquet; importer java.util.Timer; importer java.util.TimerTask; public class Launch extends TimerTask { Frame frame = new Frame(); public Launch() { // TODO Stub de constructeur généré automatiquement } boolean crashWall(){ SnakeBody sb = frame.panel.snake.getFirst(); if((sb.x<0)||(sb.y<0)||(sb.x>=Panel.LINE)||(sb.y>=Panel.LINE)) renvoie vrai; sinon, retourne faux ; } void initial(){ frame.panel.snake.add(newBody()); frame.panel.food = newBody(); } @Override public void run() { // TODO Stub de méthode généré automatiquement if(frame.panel.snake.isEmpty()) initial(); if(frame.isAlive) if(!frame.isPause){ if(goStraight()) frame.isAlive = false; frame.repaint(); } if(crashWall()) frame.isAlive = false; } SnakeBody newBody(){ SnakeBody sb = new SnakeBody(); chevauchement booléen = vrai ; while(chevauchement){ chevauchement =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)) chevauchement =true; } retourner qn; } void eat(SnakeBody sb){ frame.panel.snake.addFirst(sb); } booléen goStraight(){ résultat booléen = faux ; 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(); manger(frame.panel.food); frame.panel.food = newBody(); } renvoie le résultat ; } public static void main(String[] args){ // TODO Stub de méthode généré automatiquement Launch timertask = new Launch(); Minuterie timer = new Timer(); timer.schedule(timertask,0,500); } }
Panneau.java
serpent de paquet; importer java.awt.Color; importer java.awt.Graphics; importer java.util.LinkedList; importer javax.swing.JPanel ; public class Panel extends JPanel { /** * */ private static final long serialVersionUID = 1L; public LinkedList<SnakeBody> serpent = new LinkedList<SnakeBody>(); statique final int LINE = 10 ; Nourriture SnakeBody = nouveau SnakeBody(-99,-99); public Panel() { // TODO Stub de constructeur généré automatiquement } public void reset(){ Snake.clear(); } public void paint(Graphiques g){ g.setColor(Color.white); g.fillRect(0, 0, getWidth(), getHeight()); for(SnakeBody sb : serpent){ g.setColor(Color.black); g.drawRect(sb.x*getWidth()/LINE,sb.y*getHeight()/LINE,getWidth()/LINE,getHeight()/LINE); g.setColor(Couleur.orange); g.fillRect(sb.x*getWidth()/LINE,sb.y*getHeight()/LINE,getWidth()/LINE,getHeight()/LINE); } g.setColor(Couleur.rouge); g.fillRect(food.x*getWidth()/LINE,food.y*getHeight()/LINE,getWidth()/LINE,getHeight()/LINE); }}
SerpentBody.java
serpent de paquet; classe SnakeBody {int x; int y; public SnakeBody() { // TODO Stub de constructeur généré automatiquement x = 0; y = 0 ; } public SnakeBody(int a,int b){ x = a; y = b; } public SnakeBody(SnakeBody sb){ this(sb.x,sby.y); } public void turnUp(){ y--; } public void turnDown(){ y++; } public void turnLeft(){x--; } public void turnRight(){x++; } boolean equals(SnakeBody s){ if((x==sx)&&(y==sy)) return true; sinon, retourne faux ; } }
以上所述就是本文给大家分享的贪吃蛇的全部代码了,希望能够对大家熟练掌握java有所帮助。