java贪吃蛇游戏说明

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1 功能说明

此程序是基于JFrame,结合JPanel和Component的监听器来实现的贪吃蛇小游戏。主要实现功能如下:

1) 利用方向键来改变蛇的运行方向。

2) 在随机的地方产生食物,吃到食物就变成新的蛇体,碰到壁或自

身则游戏结束,否则正常运行。

3) 空格键暂停或继续游戏。

4) 通过菜单选项可选择三种刷新速度。

2 类说明

1. 类之间的关系如图1所示。

SnakeGame

SnakeFrame

SnakeRunnable

StatusRunnable

SnakePanel

Node

Snake

图1类之间的关系

序号文件名主要功能

1SnakeGame该文件为程序入口,含有main方法。

2SnakeFrame 实现菜单控制运行等总体要求,实现方向键控制蛇的方向,空格键控制游戏暂停或继续,还有分数等。

3Snake 该文件实现蛇的结构和具体运动,如判断食物是否和怎样被吃掉及判断后的动作。

4Node该文件实现组成蛇身的单位-食物。

5SnakePanel 该文件实现画板功能,用两色间隔画蛇身。

6StatusRunnable该文件为记录状态的线程。

7SnakeRunnable该文件为蛇运动以及记录分数的线程。

2. java源文件及其功能如表所示。

3 主要算法(附代码)

1. 吃食物的判断——isEaten()

private boolean isEaten() {

Node head = body.get(0);//取得蛇头部的坐标

if (derection == Snake.RIGHT && (head.x + Node.W) == food.x

&& head.y == food.y)

return true;

if (derection == Snake.LEFT && (head.x - Node.W) == food.x

&& head.y == food.y)

return true;

if (derection == Snake.UP && head.x == food.x && (head.y - Node.H) == food.y)

return true;

if (derection == Snake.DOWN && head.x == food.x && (head.y + Node.H) == food.y)

return true;

else

return false;

}

2. 碰撞判断——isCollsion()

private boolean isCollsion() {

Node node = body.get(0);// 获取下标为0的元素,即蛇头// 碰壁。横:300-20=280;纵:400-20=380

if (derection == Snake.RIGHT && node.x == 280)

return true;

if (derection == Snake.UP && node.y == 0)

return true;

if (derection == Snake.LEFT && node.x == 0)

return true;

if (derection == Snake.DOWN && node.y == 380)

return true;

// 蛇头碰到蛇身

Node temp = null;

int i = 0;

for (i = 3; i < body.size(); i++) {

temp = body.get(i);

if (temp.x == node.x && temp.y == node.y)

break; }

if (i < body.size())

return true;

else

return false;

}

3. 产生食物——createFood()

public void createFood() {

Node node = new Node(0, 0);

boolean isInBody = true;

int x = 0, y = 0;

int X = 0, Y = 0;

int i = 0;

while (isInBody) {

x = (int) (Math.random() * 15);

y = (int) (Math.random() * 20);

X = x * Node.W;

Y = y * Node.H;

for (i = 0; i < body.size(); i++) {

if (X == body.get(i).x && Y ==

body.get(i).y)

break; }

if (i < body.size())

isInBody = true;

else

isInBody = false;

}

food = new Node(X, Y);

}

4. 改变行进方向——changeDirection(int newDer)

public void changeDirection(int newDer) {

if (derection % 2 != newDer % 2)// 如果与原来方向相同或相反,则无法改变

derection = newDer;

}

5. 蛇运动——move()

public void move() {

if (isEaten()) {// 如果食物被吃掉

相关文档
最新文档