贪吃蛇java_java编写贪吃蛇小游戏

本文提供了一段完整的Java代码,用于实现经典的贪吃蛇游戏。代码包括了`Frame`、`Launch`和`Panel`三个主要类,涵盖了游戏窗口、逻辑控制和游戏面板的绘制。游戏支持键盘控制、暂停和重置功能,同时包含随机生成的食物和碰撞检测机制。通过这段代码,读者可以深入理解Java图形界面编程及游戏逻辑的实现。
摘要由CSDN通过智能技术生成

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

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 snake = new LinkedList();

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值