Java课程设计打字游戏
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中南大学
Java课程设计报告题目打字游戏
学生姓名窦立阳
指导教师陈丽萍
学院信息科学与工程学院
专业班级计科1204
完成时间 2015年1月15日
目录
第二章总体设计
界面设计 (4)
运行流程 (4)
逻辑设计 (4)
积分设计 (4)
第三章详细设计
主面板 (5)
两个按键 (5)
相关全局变量 (5)
全局变量说明 (5)
相关全局函数 (7)
字符下落模块 (7)
WordLabel (7)
WordFallControl (8)
WordFallLabel (8)
速度控制模块 (8)
按键模块设计 (8)
键盘监听事件 (9)
积分模块设计 (9)
事件模块设计 (10)
第四章调试分析
第一次调试 (11)
第二次调试 (11)
第三次调试 (12)
第五章运行结果 (13)
第六章课程设计总结 (17)
第七章参考文献 (19)
第八章附录:带注释的源代码
Wordfall (20)
WordFallControl类 (20)
WordLabel类 (22)
WordFallLabel类 (23)
ScoreLabel类 (24)
StartButton类 (25)
TimeLabel类 (26)
AAAAA类:程序的主函数入口 (28)
Maintain类 (30)
第一章实验要求
【问题描述】设计实现一个打字游戏,界面参见图2-2,具备如下功能:
●点击“开始”按钮,产生随机字符从屏幕上方下落;
●点击键盘上按钮,如果正确,当前的字符消失,产生新的按钮从上方继续落下。
●提供速度调整和积分功能。
图2-2 打字游戏界面
第二章总体设计
界面设计
根据实验要求中的图2-2,在主面板中,
有一个模块控制各个字符的生成并且控制他们的自动下落,并在正确触发时,字符不可见;
“开始”和“结束”,用于字符下落的开始和结束;
运行流程
程序启动,程序等待按键“开始”的事件的触发;
当“开始”键触发后,负责字符下落的模块,将持续产生字符,并使其下落;
键盘开始被监听,从键盘的按键触发,向程序返回值;
积分模块开始工作,将字符下落模块的字符和键盘事件返回的值进行比较,得出积分,并且将积分值显示在面板上;
如果点击“停止”按键,所有模块停止工作,等待程序关闭,或者等待“开始”
逻辑设计
字符不断产生并且下降,需要一个线程控制产生字符,然后还应该有一个线程对面一个字符,控制其下落。
键盘被按下后,立刻会有值返回到程序中,积分模块会每隔一段时间将,键盘事件返回的值,和当前需要按下的值进行比较。
积分说明
当开始产生字符后,会有很多字符都是可输入的,但是当前可输入的字符只有一
个,所以可以考虑设计一个链表,没当产生一个字符,便将该字符存入链表中,并且有一个指针永远指向当前需要输入的值。
由于界面大小有限,当字符持续下落超过界面大小时,不能够通过玩家来猜测,已经不见的当前需要输入字符,所以当界面上字符超过十个时,便认为该玩家反应时间过长,判定其为错误,并且将当前需要输入的字符设置为下一个。并且从游戏角度考虑,当这种情况出现3次后,便可以判定本轮游戏结束。
第三章详细设计
主面板
public class GameFrame extends JFrame
主面板中主要涉及的是两个按键,各个组件在面板上的布置,以及其他的全局变量的设置。
= new JButton()
= new JButton()
ScoreLabel scoreLabel
KeyEventPanel keyEventPanel
WordFallLabel wordFallLabel
JSlider slider
相关的全局变量
boolean START_FLAG = false;
ArrayList
ArrayList
ArrayList
ArrayList
int CHAR_VALUE = 0;
int KEY_VALUE = 0;
int POINTER = 0;
int MAXFALSE = 3;
int SUCCESSTIME = 0;
int TRYTIME = 3;
int SPEED = 1400;
public static void init(){
();
();
CHAR_VALUE = 0;
KEY_VALUE = 0;
POINTER = 0;
MAXFALSE = 3;
SUCCESSTIME = 0;
TRYTIME = 3;
}
START_FLAG:
由于在程序启动时,各个组件就已经开始工作,用START_FLAG使他们通过if语句,不做任何动作,当START_FLAG == true时,便可以开始进行游戏,避免了反复启动线程可能会造成意外情况的麻烦。
CODE_LIST:
在游戏线程启动后,会产生很多的字符,这些字符若存放在局部空间内,很有可能会出现其他组件需要调用该值并且需要通过一系列传值过程才能实现,将这些值放在一个公共空间内的列表中,虽然会出现安全上面的问题,但是无疑为程序的实现减少了很多的工作,宽且这也只是一个游戏,在安全上的问题可以忽略。
wordLabels:
这个全局变量的设置,主要是为了实现下落字符的消失。产生的字符会放在label 中,通过控制label的行为来控制字符的行为。将每一个WordLabel实例放在该列表中,可以通过在其他空间的控制来实现自己的想法。
CHAR_VALUE:
里面存放的是产生的字符的值,每一个字符都可以通过ASCII码转变为一个整数类型的值,通过比较整数值来确定是否匹配。
KEY_VALUE:
存放了最近一次从键盘内获得的值,由于可能出现连续出现相同字符的情况,KEY_VALUE里的值必须定时清空,考虑之后,与每次在每次比较完之后进行清空操作比较合适。
POINTER:
在CODE_LIST中会有很多数,但是当前正确的值,只有一个,那就是POINTER 指向的位置,通过判断KEY_VALUE和CHAR_VALUE的值,对POINTER进行操作,具体操作会在ScoreLabel中说明。