摘要
本课程设计通过代码实现将理论知识和具体实践相结合,巩固提高了对JAVA的相关方法与概念的理解,进一步加强了学生的发散思维及动手能力,加强了学生对计算机及软件工程的进一步了解。
在这个课程设计中,使用类、抽象类和接口,采用Java的编程思想和建造者设计模式做成了一个基于JFrame窗体和鼠标运动的小游戏,打开游戏后玩家可通过移动鼠标来控制己方飞机移动,不仅可以击毁敌机也可以躲避敌机,一旦被敌机击中,则游戏结束,总界面中,有开始新游戏,查看历史前十记录,帮助,退出,等选项,本游戏还增加了合适的背景音乐和游戏音效,很大程度上提高了游戏体验。
本游戏是一个趣味性很强,设计合理,流畅的休闲小游戏。
关键字:小游戏;飞机对抗
1.引言
Java是一种纯面向对象的、网络编程首选的语言。Java技术作为软件开发的一种革命性技术,已被列为当今世界信息技术的主流之一。为了适应时代潮流,应该加强对Java的学习,更好的掌握这门课程。为此Java课程设计决定以“袭击”小游戏为课题,借此巩固加深对Java的了解。
本次课程设计的实例虽然比较简单,程序设计也不是很复杂,但此程序的设计过程也是一个学习过程,更是对复杂程序的一个学习过程,还能培养我们的数学抽象能力。因此,觉得这次课程设计是非常有意义的,能为我们今后学习面向过程的程序设计作一些铺垫。
2.设计目的与任务
本课程设计所要求达到的目的和任务:通过Java程序设计的一些重要理论基础来实现动态窗口图片,鼠标跟踪事件等功能。并通过此次课程设计的训练,使学生巩固和加深对Java这门课程的理解,通过利用所学到的计算科学的理论知识,提高解决实际问题的能力,增强运算、编程和使用技术资料的技能,通过实际问题的分析设计、编程和调试,掌握应用软件的分析方法和工程设计方法,能正确阐述设计和实验结果。通过这次课程设计,培养实事求是、认真、严谨的科学态度和刻苦钻研不断创新的精神,逐步建立正确的全局观念。
3.设计方案
3.1 总体设计
3.1.1 问题定义
创建动态图片窗口,实现对鼠标事件的记录和跟踪这主要功能,并能播放相应的音乐,增加游戏乐趣。
3.1.2 问题分析
通过对“袭机”小游戏这一题材的分析,我需要八个类来实现相关功能。通过主类MainFrame创建各个功能所需要的实例对象,该类将其他几个类组合,包含了程序的主要功能和方法调用。再用余下、GameLoadingPanel、GamePlayingPanel、PopupMenuPanel类来实现游戏中的飞机对战功能。Top10ScorePanel类实现查看历史前十记录的功能。HelpDialog类显示帮助界面。SoundPlayer类来给游戏导入音乐。而ImageLoader类用来导入图片。
3.1.3 研究意义
通过本次课程设计,我们掌握了Java语言的基本运用,提高了理论结合实际的能力。
3.2 设计要求
- 游戏总体上使用Java语言开发设计。程序的基本功能包括飞机对战、查看记录和帮助三个部分
- 飞机对战部分由鼠标移动事件侦听器确定鼠标状态,由特殊构造的类来导入图片显示界面
- 背景音乐和音效应该更符合游戏,要恰当符合游戏
- 游戏主界面要更人性化,有趣,简介,不单调,适当的加一些反馈音效
- 游戏要简单而不失乐趣,规则不能太复杂,操作难度适中
- 系统界面外观和布局,可个性化设计,总体原则是“界面简洁,操作便捷”
3.3 游戏的主要特色
- 打开游戏后玩家可通过移动鼠标来控制己方飞机移动,不仅可以击毁敌机也可以躲避敌机
- 总界面中,有开始新游戏,查看历史前十记录,帮助,退出,等选项
- 可以查看历史前十记录和显示帮助
3.4 开发环境
- Windows 10专业版
- jdk9.0.4
- eclipse编辑器
3.5 游戏的功能模块划分与游戏流程图
3.5.1 游戏的功能模块划分
本游戏共有七个包文件,33个java源文件。大部分都是图片及音乐导入的配置文件,以及枚举类。下面将主要功能实现的源文件讲解一下:
- MainFrame.java:该java文件生成的类负责组合本游戏所用的各个类。该类含有多个功能调用方法,程序从该类开始执行。
- GameLoadingPanel.java:该文件负责加载开始时的界面,包括窗口的建立,用图片仿造动态效果。
- GamePlayingPanel.java:该文件负责加载游戏界面以及游戏运行,包括敌方和我方飞机的加载,鼠标事件的跟踪和音乐导导入等。
- PopupMenuPanel.java:该文件负责加载出游戏主界面的菜单。
- Top10ScorePanel.java:该文件负责加载出历史前十记录界面。
- ImageLoader.java:该文件负责提前将图片的导入格式构造好。
- SoundPlayer.java:该文件负责提前将音乐的导入格式构造好。
- Config.java:该文件负责提前将图片和音乐的导入地址保存。
- BulletFactory.java:该文件负责飞机的子弹加载到界面。
- Score.java:该文件负责本游戏的历史成绩保存与读取。
类模块图如图3-1所示。
3.5.2 游戏运行流程图
游戏流程图如图 3-2 所示。
3.6 各个类说明
3.6.1 主类MainFrame
成员变量
成员变量描述 | 变量类型 | 名称 |
---|---|---|
图片加载类 | ImageLoader | imgLoader |
开始界面类 | GameLoadingPanel | gameLoadingPanel |
游戏加载类 | GamePlayingPanel | gamePlayingPanel |
主界面菜单 | PopupMenuPanel | popupMenuPanel |
历史成绩界面 | Top10ScorePanel | popupScorePanel |
帮助界面 | HelpDialog | helpDialog |
音乐加载类 | SoundPlayer | achievementSoundPlayer |
成绩保存表 | List | scoreList |
方法
名称 | 功能 | 备注 |
---|---|---|
MainFrame() | 创建游戏主程序 | 构造方法 |
Void loadImage() | 加载所有图像 | |
void initComponents() | 创建程序主窗口 | |
void loadGame() | 加载游戏开始画面 | |
void startGame() | 加载游戏运行程序 | |
void addScore | 增加和保存游戏成绩 | |
void run() | 运行游戏 | |
void exitGameAction() | 退出游戏 | |
void helpAction() | 帮助界面 |
3.6.2 开始界面GameLoadingPanel类
成员变量
描述 | 变量类型 | 名称 |
---|---|---|
获取图像平台 | Image | gameLoadingTextImg |
显示图像 | JLabel | gameLoadingPlaneLabel |
显示文本 | JLabel | gameLoadingTextLabel |
加载小飞机 | ImageIcon[] | gameLoadingPlaneImgList |
方法
名称 | 功能 | 备注 |
---|---|---|
GameLoadingPanel() | 加载控件 | 构造方法 |
createLoadingPanel() | 对画面布局管理 | |
loadingGame() | 游戏准备进程创建 |
3.6.3 游戏运行GamePlayingPanel类
成员变量
描述 | 变量类型 | 名称 |
---|---|---|
子弹类列表 | List | bullets |
定位取图片 | List | enemyPlanes |
成绩 | int | score |
己方飞机加载 | MyPlane | myPlane |
运动的子弹 | CatchableWeapon | popBomb |
运动的双子弹 | CatchableWeapon | popDoubleLaser |
游戏进程 | Thread | paintThread |
敌机出现的时间间隔 | int | remainTimeToPopSmallPlane |
子弹出现的时间间隔 | int | remainTimeToPopBomb |
激光出现的时间间隔 | int | remainTimeToPopDoubleLaser |
敌机坠毁声音 | SoundPlayer | smallPlaneKilledSoundPlayer |
游戏背景音乐 | SoundPlayer | gameMusicSoundPlayer |
受到攻击声音 | SoundPlayer | getBombSoundPlayer |
游戏结束声音 | SoundPlayer | gameOverSoundPlayer |
方法
名称 | 功能 | 备注 |
---|---|---|
GamePlayingPanel() | 加载游戏画面及声音 | 构造方法 |
initComponents() | 加载子弹及己方飞机 | |
initSoundPlayer() | 加载各类声音 | |
onBulletLocationChanged | 确定子弹位移 | |
onEnemyPlaneLocationChanged | 加载敌方飞机位移 | |
onCatchableWeaponLocationChanged | 可捕获的武器位移 | |
drawScore | 绘制成绩数字 | |
drawBomb | 绘制子弹 | |
void run() | 绘制流动的战斗画面 | |
paintComponent() | 画面组合 | |
startGame() | 开始游戏 | |
stopGame() | 停止游戏 |
3.6.4 游戏主菜单PopuMenupanel类
成员变量
描述 | 变量类型 | 名称 |
---|---|---|
创建窗口 | JLabel | logoLabel |
新游戏按钮 | GameButton | startGameButton |
退出游戏按钮 | GameButton | exitGameButton |
历史成绩按钮 | GameButton | top10ScoresButton |
帮助按钮 | GameButton | helpButton |
方法
名称 | 功能 | 备注 |
---|---|---|
PopupMenuPanel | 创建窗体 | 构造参数 |
initComponents | 创建游戏菜单 |
3.6.5 游戏历史成绩Top10ScorePanel类
成员变量
描述 | 变量类型 | 名称 |
---|---|---|
创建窗口 | JLabel | top10ScoreLabel |
按钮 | GameButton | GameButton |
成绩按钮 | GameButton[ ] | scoreButtons |
成绩个数 | int | SCORE_COUNT |
方法
名称 | 功能 | 备注 |
---|---|---|
Top10ScorePanel | 创建界面 | 构造方法 |
initComponents | 初始化组件 | |
loadScore | 加载成绩 |
3.6.6 帮助HelpDialog类
成员变量
描述 | 变量类型 | 名称 |
---|---|---|
创建窗体 | JTextPane | helpContentTextPane |
新建视图 | JScrollPane | scrollPane |
方法
名称 | 功能 | 备注 |
---|---|---|
HelpDialog | 构造窗体 | 构造方法 |
initComponent | 创建窗体视图 |
4.各种功能截图
游戏开始界面
正在游戏界面
游戏失败界面
游戏主菜单
成绩榜前十
5.课程设计总结
从本次课程设计的完成中,首先我们发现了我们有很多不足的地方,最突出的是我们所学的东西太少了,根本满足不了平时编写程序的需要。此外,我们了解了课程设计的要求与方法,学会了程序设计基本步骤也进一步提高了团队合作的意识。同时,使我们感觉到,一个优秀的程序,不仅仅是可以运行的,更应该具较高的效率,合理的结构,良好的可读性和一定的容错性。除此之外,我们认为一个程序的成功完成需要严谨的务实态度。由于知识的限制,我们没有做到随时暂停游戏,也没有给游戏增加多个难度和其他玩法,但是在以后的学习中,我们将会虚心学习并写出更有意义,更有趣味,更好玩的游戏。