废话不多说,直接奉上代码:
marco.java
serpiente de paquete; importar java.awt.Graphics;importar java.awt.Menu;importar java.awt.MenuBar;importar java.awt.MenuItem;importar java.awt.event.ActionEvent;importar java.awt.event.ActionListener;importar java.awt .event.KeyEvent;importar java.awt.event.KeyListener; importar javax.swing.JFrame; public class Frame extiende JFrame implementa KeyListener { /** * */ Boolean isAlive; Booleano esPausa; Paneles de paneles; Dirección del personaje; serialVersionUID largo final estático privado = 1L; public Frame(){ // TODO Código auxiliar de constructor generado automáticamente setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); establecerTamaño(300,300); addKeyListener(esto); panel = nuevo Panel(); agregar(panel); setVisible(verdadero); está vivo = verdadero; esPausa = falso; dirección = nuevo personaje('d'); Barra de menús barra de menús = nueva barra de menús(); Menú menú = nuevo Menú("menú"); Restablecer elemento de menú = nuevo elemento de menú ("nuevo juego"); MenuItem pausa= nuevo MenuItem("pausa"); pausa.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // TODO Código auxiliar de método generado automáticamente if(!isPause) isPause= true; else isPause= false; } }); reset.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // TODO Método generado automáticamente stub reset(); } }); menú.add(restablecer); menú.add(pausa); barra de menú.add(menú); setMenuBar(barra de menús); } reinicio público vacío(){ panel.reset(); está vivo = verdadero; } @Override public void keyTyped(KeyEvent e) { // TODO Código auxiliar de método generado automáticamente } @Override public void keyPressed(KeyEvent e) { // TODO Código auxiliar de método generado automáticamente if(e.getKeyCode()==KeyEvent.VK_UP ) dirección = 'w'; if(e.getKeyCode()==KeyEvent.VK_DOWN) dirección = 's'; if(e.getKeyCode()==KeyEvent.VK_LEFT) dirección = 'a'; if(e.getKeyCode()==KeyEvent.VK_RIGHT) dirección = 'd'; } @Override public void keyReleased(KeyEvent e) { // TODO Código auxiliar de método generado automáticamente } public void paint(Graphics g){ panel.repaint(); } }
Lanzamiento.java
serpiente de paquete; importar java.util.Timer; importar java.util.TimerTask; Lanzamiento de clase pública extiende TimerTask { Marco marco = nuevo Marco (); public Launch() { // TODO Código auxiliar de constructor generado automáticamente } boolean crashWall(){ SnakeBody sb = frame.panel.snake.getFirst(); if((sb.x<0)||(sb.y<0)||(sb.x>=Panel.LINE)||(sb.y>=Panel.LINE)) devuelve verdadero; de lo contrario devolverá falso; } void inicial(){ frame.panel.snake.add(newBody()); marco.panel.comida = nuevoCuerpo(); } @Override public void run() { // TODO Código auxiliar de método generado automáticamente if(frame.panel.snake.isEmpty()) inicial(); if(frame.isAlive) if(!frame.isPause){ if(goStraight()) frame.isAlive = false; marco.repintar(); } if(crashWall()) frame.isAlive = false; } SnakeBody newBody(){ SnakeBody sb = nuevo SnakeBody(); superposición booleana = verdadero; while(superposición){ superposición =falso; 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)) superposición =true; } devolver alguien; } void eat(SnakeBody sb){ frame.panel.snake.addFirst(sb); } booleano goStraight(){ resultado booleano = falso; SnakeBody sb =nuevo 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)) resultado = verdadero; } marco.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(); comer(marco.panel.comida); marco.panel.comida = nuevoCuerpo(); } devolver resultado; } public static void main(String[] args){ // TODO Código auxiliar del método generado automáticamente Launch timertask = new Launch(); Temporizador temporizador = nuevo temporizador(); temporizador.programación(timertask,0,500); } }
Panel.java
serpiente de paquete; importar java.awt.Color; importar java.awt.Graphics; importar java.util.LinkedList; importar javax.swing.JPanel; public class Panel extiende JPanel { /** * */ privado estático final largo serialVersionUID = 1L; public LinkedList<SnakeBody> serpiente = nueva LinkedList<SnakeBody>(); estática final int LÍNEA = 10; Comida SnakeBody = nuevo SnakeBody(-99,-99); public Panel() { // TODO Código auxiliar de constructor generado automáticamente } public void reset(){ Snake.clear(); } pintura vacía pública (Gráficos g){ g.setColor(Color.white); g.fillRect(0, 0, getWidth(), getHeight()); for(SnakeBody sb: serpiente){ g.setColor(Color.negro); g.drawRect(sb.x*getWidth()/LINE,sb.y*getHeight()/LINE,getWidth()/LINE,getHeight()/LINE); g.setColor(Color.naranja); g.fillRect(sb.x*getWidth()/LINE,sb.y*getHeight()/LINE,getWidth()/LINE,getHeight()/LINE); } g.setColor(Color.rojo); g.fillRect(food.x*getWidth()/LINE,food.y*getHeight()/LINE,getWidth()/LINE,getHeight()/LINE); }}
Cuerpo de serpiente.java
serpiente de paquete; clase Cuerpo de Serpiente { int x; int y; public SnakeBody() { // TODO Código auxiliar de constructor generado automáticamente x = 0; y = 0; } public SnakeBody(int a,int b){ x = a; y = b; } public SnakeBody(SnakeBody sb){ this(sb.x,sb.y); } public void turnUp(){ y--; } público vacío turnDown(){ y++; } public void turnLeft(){ x--; } public void turnRight(){ x++; } booleano es igual (SnakeBody s){ if((x==sx)&&(y==sy)) devuelve verdadero; de lo contrario devolverá falso; } }
以上所述就是本文给大家分享的贪吃蛇的全部代码了,希望能够对大家熟练掌握java有所帮助。