基于Java实现的(GUI)飞机大战小游戏

embedded/2024/11/22 22:09:46/

摘要

本课程设计通过代码实现将理论知识和具体实践相结合,巩固提高了对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

成员变量

成员变量描述变量类型名称
图片加载类ImageLoaderimgLoader
开始界面类GameLoadingPanelgameLoadingPanel
游戏加载类GamePlayingPanelgamePlayingPanel
主界面菜单PopupMenuPanelpopupMenuPanel
历史成绩界面Top10ScorePanelpopupScorePanel
帮助界面HelpDialoghelpDialog
音乐加载类SoundPlayerachievementSoundPlayer
成绩保存表ListscoreList

方法

名称功能备注
MainFrame()创建游戏主程序构造方法
Void loadImage()加载所有图像
void initComponents()创建程序主窗口
void loadGame()加载游戏开始画面
void startGame()加载游戏运行程序
void addScore增加和保存游戏成绩
void run()运行游戏
void exitGameAction()退出游戏
void helpAction()帮助界面

3.6.2 开始界面GameLoadingPanel类

成员变量

描述变量类型名称
获取图像平台ImagegameLoadingTextImg
显示图像JLabelgameLoadingPlaneLabel
显示文本JLabelgameLoadingTextLabel
加载小飞机ImageIcon[]gameLoadingPlaneImgList

方法

名称功能备注
GameLoadingPanel()加载控件构造方法
createLoadingPanel()对画面布局管理
loadingGame()游戏准备进程创建

3.6.3 游戏运行GamePlayingPanel类

成员变量

描述变量类型名称
子弹类列表Listbullets
定位取图片ListenemyPlanes
成绩intscore
己方飞机加载MyPlanemyPlane
运动的子弹CatchableWeaponpopBomb
运动的双子弹CatchableWeaponpopDoubleLaser
游戏进程ThreadpaintThread
敌机出现的时间间隔intremainTimeToPopSmallPlane
子弹出现的时间间隔intremainTimeToPopBomb
激光出现的时间间隔intremainTimeToPopDoubleLaser
敌机坠毁声音SoundPlayersmallPlaneKilledSoundPlayer
游戏背景音乐SoundPlayergameMusicSoundPlayer
受到攻击声音SoundPlayergetBombSoundPlayer
游戏结束声音SoundPlayergameOverSoundPlayer

方法

名称功能备注
GamePlayingPanel()加载游戏画面及声音构造方法
initComponents()加载子弹及己方飞机
initSoundPlayer()加载各类声音
onBulletLocationChanged确定子弹位移
onEnemyPlaneLocationChanged加载敌方飞机位移
onCatchableWeaponLocationChanged可捕获的武器位移
drawScore绘制成绩数字
drawBomb绘制子弹
void run()绘制流动的战斗画面
paintComponent()画面组合
startGame()开始游戏
stopGame()停止游戏

3.6.4 游戏主菜单PopuMenupanel类

成员变量

描述变量类型名称
创建窗口JLabellogoLabel
新游戏按钮GameButtonstartGameButton
退出游戏按钮GameButtonexitGameButton
历史成绩按钮GameButtontop10ScoresButton
帮助按钮GameButtonhelpButton

方法

名称功能备注
PopupMenuPanel创建窗体构造参数
initComponents创建游戏菜单

3.6.5 游戏历史成绩Top10ScorePanel类

成员变量

描述变量类型名称
创建窗口JLabeltop10ScoreLabel
按钮GameButtonGameButton
成绩按钮GameButton[ ]scoreButtons
成绩个数intSCORE_COUNT

方法

名称功能备注
Top10ScorePanel创建界面构造方法
initComponents初始化组件
loadScore加载成绩

3.6.6 帮助HelpDialog类

成员变量

描述变量类型名称
创建窗体JTextPanehelpContentTextPane
新建视图JScrollPanescrollPane

方法

名称功能备注
HelpDialog构造窗体构造方法
initComponent创建窗体视图

4.各种功能截图

游戏开始界面

正在游戏界面

游戏失败界面

游戏主菜单

成绩榜前十

5.课程设计总结

从本次课程设计的完成中,首先我们发现了我们有很多不足的地方,最突出的是我们所学的东西太少了,根本满足不了平时编写程序的需要。此外,我们了解了课程设计的要求与方法,学会了程序设计基本步骤也进一步提高了团队合作的意识。同时,使我们感觉到,一个优秀的程序,不仅仅是可以运行的,更应该具较高的效率,合理的结构,良好的可读性和一定的容错性。除此之外,我们认为一个程序的成功完成需要严谨的务实态度。由于知识的限制,我们没有做到随时暂停游戏,也没有给游戏增加多个难度和其他玩法,但是在以后的学习中,我们将会虚心学习并写出更有意义,更有趣味,更好玩的游戏。


http://www.ppmy.cn/embedded/139723.html

相关文章

Spark RDD 中的 repartition 和 coalesce 是两种常用的分区调整算子的异同点

Spark RDD 中的 repartition 和 coalesce 是两种常用的分区调整算子,它们的功能是改变 RDD 的分区数量。以下从源码、原理和使用角度分析它们的异同点。 一、repartition 和 coalesce 的功能与区别 特性repartitioncoalesce主要功能调整 RDD 分区数量,可…

如何配置 Flink CDC 连接 OceanBase 实现数据实时同步

在大数据处理方面,Flink CDC(Change Data Capture)是一款功能强大的工具,它能实时获取数据库中的变更数据,并将这些数据传送给其他系统进行后续处理。 Flink CDC 结合 OceanBase 分布式数据库高性能、HTAP等特性&#…

nvm和nrm的安装与使用

NVM相关请跳转: Node版本管理器nvm的安装与使用 nrm 的安装与使用 nrm(NPM Registry Manager)是一个用于管理和切换 NPM 源的工具。它允许你在多个 NPM 源之间快速切换,以提高包管理的速度和效率。以下是 nrm 的安装和使用方法&…

经验笔记:Git 基础操作指南

推荐一下Gitee最好的Git操作教程:Learn Git Branching 经验笔记:Git 基础操作指南 1. 安装 Git 首先确保您的计算机上已安装 Git。如果还没有安装,可以从 Git官网 下载并安装。 2. 配置 Git 安装完成后,打开命令行工具&#…

微软的重大突破:bitnet.cpp 开启 AI 本地CPU运行新时代

目录 引言一、卓越的性能表现二、保障隐私安全三、广泛的应用前景与未来规划四、本地使用指南1、安装准备2、从源代码构建3、推理使用 结语 引言 在人工智能飞速发展的今天,微软的一项创举如同一颗璀璨的新星,照亮了 AI 领域的新征程。10 月 18 日&…

小蓝了解篇

声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…

JDK、MAVEN与IDEA的安装与配置

1.认识JDK、MAVEN与IDEA JDK 提供了编译和运行Java程序的基本环境。Maven 帮助管理项目的构建和依赖。IDEA 提供了一个强大的开发环境,使得编写、调试和运行Java程序更加高效。 2. 安装与环境配置 2.1 官网地址 选择你需要的版本下载: MAVEN下载传送…

上海市计算机学会竞赛平台2024年11月月赛丙组考勤系统

题目描述 在 Carol 的办公楼的入口处有一套刷卡系统,每个员工都有一张唯一的身份卡,他们每次进出大楼都要刷卡,而系统会依次记录每次刷卡的员工编号,员工和他的编号一一对应,且在一天内一共有 nn 次刷卡记录。 一个员…