java贪吃蛇课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1设计目的
1.1背景
近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点,得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编程领域的首选编程语言。JBuilder是Borland公司用于快速开发Java应用的一款优秀的集成开发环境,它以其友好的开发界面、强大的组件支持等优点,得到广大程序员的接受和认可。
“贪吃蛇”游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。本文基于Java技术和JBuilder开发环境,开发了一个操作简单、界面美观、功能较齐全的“贪吃蛇”游戏。整个游戏程序分为二个功能模块,六个类模块,实现了游戏的开始、暂停、结束。通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。
本文在介绍Java相关技术和国外发展现状的基础上,对“贪吃蛇”游戏的整个生命周期的各个开发阶段进行了详细地介绍。首先,分析了开发本游戏软件的可行性,重点分析本设计所采用的技术的可行性。其次,从游戏主界面等几方面,分析了本游戏的功能需求;从可使用性和安全性方面分析了属性需求。然后,进行了游戏的概要设计和详细设计,这也是本文的重点。概要设计给出二个功能模块的主框架以及六个类模块的函数调用关系;详细设计介绍了Java2标准运行环境的配置,重点给出各个类模块的程序流程图以及UML图,列表介绍了各个类包含的变量、使用的方法,展示了游戏的界面。为了保证程序代码的正确性和功能实现的可靠性,本文还介绍了游戏软件的程序调试过程和功能测试结果。
1.2目标
本软件是针对贪吃蛇小游戏的JAVA程序,利用方向键来改变蛇的运行方向,空格键暂停或继续游戏,并在随机的地方产生食物,吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。
2 总体设计
2.1 设计思路
本系统主要是完成贪吃蛇游戏的基本操作。用户可以自己练习和娱乐。本系统需要满足以下几点要求:
(1) 利用方向键来改变蛇的运行方向。
(2) 空格键暂停或继续游戏,并在随机的地方产生食物。
(3) 吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。
2.2设计说明
本系统共包括1个java源文件和7个类文件。
1.类之间的关系如图
2.1所示。
图2.1类之间的关系2.java源文件及其功能如表所示。
表2.2java源文件及其功能
3关键技术
3.1 关键技术及实现
程序关键在于表示蛇的图形及蛇的移动。用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现与消失也是画矩形块和覆盖矩形块。
3.2 设计原理
1.主类SnakeGame
主类为此程序的入口,定义了SnakeFrame的对象frame,开始运行此程序。
2.类SnakeFrame
(1)成员变量见表3.1
表3.1主要成员变量
(2)方法见表3.2
表3.2主要方法
3.类Snake
(1)成员变量见表3.3
(2)方法见表3.4
4.类Node
(1)成员变量见表3.5
5.类SnakePanel
此类为画蛇的面板类,是实现红蓝间隔画蛇身算法的类。
6.类StatusRunnable
此类为线程的子类,实现记录状态的功能。
7.类SnakeRunnable
此类为线程的子类,实现蛇运动以及记录分数的功能。
4 程序流程
4.1系统结构图
如图4.1所示
图4.1系统结构图
5主要源代码
1.记录状态的代码
classStatusRunnable implements Runnable {
publicStatusRunnable(Snake snake, JLabelstatusLabel, JLabelscoreLabel) { this.statusLabel = statusLabel;
this.scoreLabel = scoreLabel;
this.snake = snake;
}
public void run() {
String sta = "";
String spe = "";
while (true) {
switch (snake.status) {
caseSnake.RUNNING:
sta = "Running";
break;
caseSnake.PAUSED:
sta = "Paused";
break;
caseSnake.GAMEOVER:
sta = "GameOver";
break;
}
statusLabel.setText(sta);
scoreLabel.setText("" + snake.score);
try {
Thread.sleep(100);
} catch (Exception e) {
}
}
}
privateJLabelscoreLabel;
privateJLabelstatusLabel;
private Snake snake;
2.蛇运动以及记录分数的代码
classSnakeRunnable implements Runnable { publicSnakeRunnable(Snake snake, Component component) { this.snake = snake;
ponent = component;
}
public void run() {
while (true) {
try {
snake.move();
component.repaint();
Thread.sleep(snake.speed);
} catch (Exception e) {