软件编程
位置:首页>> 软件编程>> java编程>> java编写贪吃蛇小游戏

java编写贪吃蛇小游戏

作者:hebedich  发布时间:2023-06-19 01:49:54 

标签:java,小游戏,贪吃蛇

废话不多说,直接奉上代码:

Frame.java


package snake;

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;
import java.awt.event.KeyListener;

import javax.swing.JFrame;

public class Frame extends JFrame implements KeyListener {

/**
  *
  */

Boolean isAlive;
 Boolean isPause;
 Panel panel;
 Character direction;
 private static final long serialVersionUID = 1L;

public Frame(){
   // TODO Auto-generated constructor stub
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   setSize(300,300);
   addKeyListener(this);
   panel = new Panel();
   add(panel);
   setVisible(true);
   isAlive = true;
   isPause = false;
   direction = new Character('d');
   MenuBar menuBar = new MenuBar();
   Menu menu = new Menu("menu");
   MenuItem reset = new MenuItem("newgame");
   MenuItem pause= new MenuItem("pause");

pause.addActionListener(new ActionListener(){

@Override
     public void actionPerformed(ActionEvent e) {
       // TODO Auto-generated method stub
       if(!isPause) isPause= true;
       else     isPause= false;
     }

});

reset.addActionListener(new ActionListener(){

@Override
     public void actionPerformed(ActionEvent e) {
       // TODO Auto-generated method stub
       reset();
     }

});

menu.add(reset);
   menu.add(pause);
   menuBar.add(menu);
   setMenuBar(menuBar);

}

public void reset(){
   panel.reset();
   isAlive = true;
 }

@Override
 public void keyTyped(KeyEvent e) {
   // TODO Auto-generated method stub

}

@Override
 public void keyPressed(KeyEvent e) {
   // TODO Auto-generated method stub
   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 Auto-generated method stub

}

public void paint(Graphics g){
   panel.repaint();
 }

}

Launch.java


package snake;

import java.util.Timer;
import java.util.TimerTask;

public class Launch extends TimerTask {

Frame frame = new Frame();
 public Launch() {
   // TODO Auto-generated constructor stub

}

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;
   else
     return false;
 }
 void initial(){
   frame.panel.snake.add(newBody());
   frame.panel.food = newBody();
 }
 @Override
 public void run() {
   // TODO Auto-generated method stub
   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();

boolean overlap = true;
   while(overlap){
     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))
         overlap =true;
   }

return sb;
 }

void eat(SnakeBody sb){
   frame.panel.snake.addFirst(sb);
 }
 boolean goStraight(){

boolean result = 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=='s')
       frame.panel.food.turnDown();
     if(frame.direction=='a')
       frame.panel.food.turnLeft();
     if(frame.direction=='d')
       frame.panel.food.turnRight();
     eat(frame.panel.food);
     frame.panel.food = newBody();
   }

return result;
 }

public static void main(String[] args){
   // TODO Auto-generated method stub
    Launch timertask = new Launch();
    Timer timer = new Timer();

timer.schedule(timertask,0,500);
 }

}

Panel.java


package snake;

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;
 public LinkedList<SnakeBody> snake = new LinkedList<SnakeBody>();
 static final int LINE = 10;
 SnakeBody food = new SnakeBody(-99,-99);

public Panel() {
   // TODO Auto-generated constructor stub
 }

public void reset(){
   snake.clear();  
 }

public void paint(Graphics g){
   g.setColor(Color.white);
   g.fillRect(0, 0, getWidth(), getHeight());

for(SnakeBody sb : snake){
     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


package snake;

class SnakeBody {

int x;
 int y;

public SnakeBody() {
   // TODO Auto-generated constructor stub
   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--;
 }
 public void turnDown(){
   y++;
 }
 public void turnLeft(){
   x--;
 }
 public void turnRight(){
   x++;
 }

boolean equals(SnakeBody s){
   if((x==s.x)&&(y==s.y)) return true;
   else          return false;
 }

}

以上所述就是本文给大家分享的贪吃蛇的全部代码了,希望能够对大家熟练掌握java有所帮助。

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com