. 目录
1.选题目的与系统概述 ..................................... 2
1.1 选题目的 .......................................... 2
1.2 系统概述 .......................................... 2
2.系统可行性分析与相关技术背景分析 ....................... 2
2.1.相关背景分析 ...................................... 2
2.2 可行性分析 ........................................ 3
3.系统设计与关键技术 ..................................... 3
3.1 游戏流程图 ........................................ 3
3.2 总体模块划分 ...................................... 4
4.系统测试与操作实施方法 ................................. 5
5.系统设计总结与回顾 ..................................... 7
6.附录源代码 ............................................. 7
1.选题目的与系统概述
1.1 选题目的
贪吃蛇是家喻户晓的益智类小游戏,选择这题目一是为了将自己所学的知识
加以运用,二是一直以来贪吃蛇这个游戏深深的吸引着我,它的制作方法对
于提前的我而言都是神秘的。我希望通过自己所学知识把它剖析开来,真真
正正的了解它的本质和精髓。虽然我的编程能力不是很强,但是我有信心,
在这次学习中我将从实践的项目中提高自己的编程能力,因此我选定了这个
项目。
1.2 系统概述
这个系统包括两个模块,一个就是控制贪吃蛇模块,在这个模块中设置控制
键用于控制贪吃蛇的行进的开始,暂停,方向还有速度问题,还有食物的位
置问题。二是面板模块,用于设置贪吃蛇活动的范围。
2.系统可行性分析与相关技术背景分析
2.1.相关背景分析
随着科技和经济的快速发展,知识经济的快速增长,娱乐逐渐变成人与智能
的交流,智能化的娱乐游戏在网络里愈来愈好,众多的游戏不胜枚举,比如
益智类的小游戏,腾讯游戏,网页游戏,模拟游戏等,尤其是最近网上特别
流行的 Java 制作的小游戏越来越受关注,现在就探究用 Java 制作的贪吃蛇游
戏。
2.2 可行性分析
贪吃蛇游戏是一种简单的大众游戏,自从计算机实现以来,深受广大电脑玩
家的喜爱,做一个简单的贪吃蛇的小游戏,也比较符合现代人用来打发闲暇
时光的方式。
贪吃蛇的核心算法是如何实现移动和吃掉食物,在没有碰到食物的时候把当
前运动方向上的下个节点入队,并以社节点的颜色绘制这个节点,然后把头
指针所指的节点出队,并以游戏框架内部背景重绘出队节点的颜色,这样就
可以达到移动的效果,而吃到食物的时候只需要把食物入队即可。实现贪吃
蛇身移动,吃到食物身体增长,和碰到墙壁或自身死亡,能够暂停和开始。
本次设计主要运用 Java 语言来完成,Java 是一种跨平台,适合于分布式计算
环境的面对对象编程语言,用 Java 写的应用程序不用修改就可以了在不同的
软硬件平台上运行。
由于 Java 主要用于网络应用程序开发,因此对安全性有较高的要求,如果没
有安全保证,用户从网络上下载程序执行就非常危险,Java 通过自己的安全
买几只防止了病毒程序的产生和下载程序对本地系统的威胁破坏。
3.系统设计与关键技术
3.1 游戏流程图
进游戏界面
点击开始按钮,游戏开始
操作:p:开始,暂停
上移:↑
下移:↓
左移:←
右移:→
游戏结束,单
击确定,游戏
重新开始
3.2 总体模块划分
根据游戏需求中游戏所要实现的功能,整个游戏分为二个模块进行具体的设计,
如下图所示
贪吃蛇游戏
游戏主界面模块
游戏控制模块
游戏总模块
游戏控制界面
控制模块
绘制模块
重新开始模块
运动模块
游戏控制模块
在控制模块中使用 keylistener 接口的 keyevet 事件设置四个键,用于控制贪吃蛇
的行进方向和暂停
在绘制模块中绘制了贪吃蛇的活动范围以及贪吃蛇的蛇身长度及长度
在重新开始模块当蛇的行进范围小于 3 或大于 305 及撞到自己身体的时候显示重
新开始
在运动模块中设置了蛇的初始位置,食物的初始位置是通过随机产生的位置,蛇
的运动速度以 0.8 倍递减,直到减为 100.
4.系统测试与操作实施方法
本程序运行后,能够正常的相应按键事件。在蛇的前行过程中,可以任意向其前
后左右改变方向,点击 p 键游戏就可以暂停,再点击 p 键游戏就可以重新开始,
运行结果如下图:
5.系统设计总结与回顾
通过这次课程设计,我对这学期所学的 Java 语言程序设计有一个跟深刻的了解,
将所学的知识应用于实践,由于所学知识有限,为了使游戏能够实现自己预先的
构想,我通过上网和去图书管找程序,比较好的流程图及模块功能,不断阅读修
改代码使程序达到预期所要实现的目标,完成课程设计后,可以感觉到自己对
Java 程序又有了新的认识,总之,通过本次的课程设计,使我平时学到的理论只
是得到了很好的升华,理论和实践得到了一次很好的结合,为我今后参加工作打
下了坚实的基础,使我受益匪浅。
6.附录源代码
控制模块代码:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.Timer;
@SuppressWarnings("serial")
public class ControlSnake extends JPanel implements ActionListener {
Random rand;
ArrayList
list, listBody;
String str, str1;
static boolean key;
int x, y, dx, dy, fx, fy, flag;
int snakeBody;
int speed;
public ControlSnake() {
snakeBody = 1;
str = "上下左右方向键控制 P键暂停...";
str1 = "现在的长度为:" + snakeBody;
key = true;
flag = 1;
speed = 100;
rand = new Random();
list = new ArrayList
();
listBody = new ArrayList();
x = 5;
y = 5;
list.add(new Point(x, y));
listBody.add(list.get(0));
dx = 10;
dy = 0;
fx = rand.nextInt(30) * 10 + 5;// 2
fy = rand.nextInt(30) * 10 + 5;// 2
setBackground(Color.WHITE);
setSize(new Dimension(318, 380));
final Timer time = new Timer(speed, this);
time.start();
addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == 37) {
dx = -10;
dy = 0;
} else if (e.getKeyCode() == 38) {
dx = 0;