当前位置:
文档之家› JAVA关于坦克大战的课程设计报告
JAVA关于坦克大战的课程设计报告
五.设计体会与小结………………………………………………………… 六.附录………………………………………………………………………
1
一.程设计的目的与要求 1.1 课程设计目的
《JAVA 面性对象程序设计》是电子商务专业的必修专业基础课程,其实践 性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设 计专题实际是计算机相关专业学生学习完《JAVA 面性对象程序设计》课程后, 进行的一次全面的综合训练,JAVA 程序设计的设计目的是加深对理论教学内容 的理解和掌握,使学生综合运用所学知识,利用软件工程为基础进行软件开发、 并在实践应用方面打下一定基础。
子弹打到其他坦克上时用 hitTank(Tank t) 方法,子弹打到墙上时 hitWall(CommonWall w)方法,打到金属墙上 hitWall(MetalWall w),打到家 hitHome(),当然在这些方法里,都要作相应的操作来表示接受到子弹的后果,: 还有,当子弹射击到对方(用户方对敌方)时,当敌方射击到用户方,用户方 要减少生命值,没接受一枪,就执行
主函数,启动整个程序
用户类主要是综合调用各个类来协作完成游戏的设计。
2.3 游戏主窗口
游戏主窗口是人机交互的窗口,对玩家而言,他们只和游戏主窗口打交道, 并不关心游戏内部是如何实现的,所以游戏主窗口部分最重要的便是游戏数据 的输入、输出。
坦克的方向和子弹发射以及游戏的重新开始都是由键盘来控制的,所以在 Tank 类里面必须要实现这些功能。
Tank 类的 keyPressed()方法用于接受键盘的按键监听,接收到相应的键盘信 息后,如接收到 F,则表示发射子弹,所以此时要调用 Tank 类里的 fire()方法, fire()方法不带传递参数,因为子弹的方向总是从属于坦克的方向和位置。
2
二.系统分析 2.1 可行性分析
2.1.1 技术可行性 软件使用 swing、GUI、Socket、面向对象设计等技术实现,这些技术
均已是非常成熟的技术,之前已有相当多使用这些技术的成功案例,故现 使用这些技术是可行的。 2.1.2 经济可行性
本软件为免费软件,将免费提供软件的下载、运行和维护服务,软件 暂无收入,待公布之后随着使用者越来越多,将添加相应的广告、服务, 从而增加收入,若使用者寥寥无几,将再次分析是否重新策划软件或者放 弃开发,以减少损失。
指导教师签字:
日期:
课程设计所需软件、硬件等 硬件要求能运行 Windows 9.X 操作系统的微机系统。JAVA 程序设计语言及相应的集
成开发环境,J2SDK 和 ECLIPSE 开发工具。
起至日期 2012.11
2012.12
课程设计进度计划
工作内容 程序设计构思,查阅资料
备注
程序设计实现,课程任务书
3
2.3 工作流程图
4
三.课程设计内容 3.1 程序具体设计
图形用户界面需要用到抽象窗口工具即 AWT 和 Swing 来设计实现,由于 游戏需要有功能按键来控制游戏的重新开始,退出,暂停,帮助等,所以在实 现过程中,设计菜单项。
5
坦克都是调用各自类里面的 draw 函数来画出来,最后 new 一个图形面板 出来,把所有的元素都 add 进面板就可以了。界面的构造在程序中由 MyPanel 类的构造方法来完成,即没构造一个用户类都会产生这样一个包含各种游戏元 素在内的界面。由于画面是静止的,而我们游戏的画面要求是动态的,游戏中 的坦克和子弹都是在不断的动,可穿透的普通墙体也在“动”,所以对于画面, 必须要不断的更新,重画才能产生动态的效果。
界面中的元素都是在构造界面的时候用界面实例对象的 add 方法加入进去 的,且“动”的元素要不断更新。
坦克主要由 Tank 类来实现。坦克的属性:速度(有 X 轴和 Y 轴的速度之 分),坦克大小,坦克所在新的位置(X 坐标和 Y 坐标),坦克是否还活着,行 动方向等。所有的这些属性都有一个初始化值,从而在游戏一开始就可以运行。
参考文献、资料索引
序号
文献、资料名称
编著者
出版单位
(1)Java 语言实用教程(第 2 版)
丁振凡
北京邮电大学出 版社.
(2)Java 语言实用教程实验指导(第 2 版) 丁振凡 北京邮电出版社
2
目录
一.课程设计的目的与要求 1.1 课程设计目的………………………………………………………………. 1.2 课程设计的实验环境……………………………………………………… 1.3 课程设计的预备知识……………………………………………………… 1.4 课程设计主要内容…………………………………………………………
本课程设计主要目的有: 掌握 Java 编程、面向对象的基础知识,编写坦克大战游戏。 较熟练地编写 Java 应用程序 Application。 做好充分的准备之后,按照面向对象的设计思想,根据坦克大战游戏的实 际需求设计相关的类与接口,实现多态、重载等开发工作。
指导教师签字:
、
指导教师评语
日期:
成绩:
四.系统的功能测试与调整 4.1 菜单项测试…………………………………………………………………. 4.2 游戏运行测试……………………………………………………………… 4.3 坦克爆炸测试……………………………………………………………… 4.4 保存游戏信息测试………………………………………………………… 4.5 帮助功能测试……………………………………………………………….
菜单功能包括游戏的重新开始,暂停,退出等。这些功能的用户界面放在了 MyPanel 的构造方法里,用到的是面板类和相应的监听功能,实现出来很简单。
3.2 主要方法和变量
属性 int Fram_width
int Fram_length
游戏用户界面的全局静态变量 宽度,初始化为600 游戏用户界面的全局静态变量
7
长度,初始化为500
void update(Graphics g)
图形用户界面的更新方法
void framPaint(Graphics g)
画图形用户界面的方法,需要重
画的界面元素都在这个方法里
面
void actionPerformed(ActionEvent e)
监听菜单项的方法
static void main(String[] args)
二.系统分析 2.1 可行性分析…………………………………………………………………. 2.2 需求分析…………………………………………………………………….. 2.3 工作流程图………………………………………………………………….
三.课程设计内容 3.1 程序具体设计………………………………………………………………. 3.2 主要方法和变量…………………………………………………………… 3.3 游戏主窗口………………………………………………………………….
由于坦克在碰到墙,界面边界和“家”等阻碍物时要改变方向,所以在 Tank 里面必须对于每一种阻碍物要设计一个方法来作为应对策略,当然解决方法是 把下一步的位置调整到上一步的位置。
子弹的属性:子弹前进的 X 轴和 Y 轴的速度——初始速度都为 10,子弹 的长度和宽度——初始的长宽都为 10,子弹的位置,子弹的方向,子弹是否 live 等。由于不同方向的子弹其实是图片,所以这里要考虑不同图片的选择用对应 的方向来指定,所以要建立 Map 键值对,用 String 属性的方向来指定不同的图 片。如:imgs.put(“L”, bulletImages[0]);
1.2 课程设计的实验环境
硬件要求能运行 Windows 9.X 操作系统的微机系统。JAVA 程序设计语言及 相应的集成开发环境,J2SDK 和 ECLIPSE 开发工具。
1.3 课程设计的预备知识
熟悉 JAVA 语言以及 ECLIPSE 开发工具。
1.4 课程设计主要内容
坦克大战游戏是在 Eclipse 环境下编程的游戏,其中包括对主战坦克的编 写、坦克的初始位置的编写、坦克的移动方向的编写、坦克的速度的编写、 坦克的子弹速度的编写、敌军的子弹速度的编写、设置游戏难度的编写、 子弹的编写、敌军坦克的编写、构造函数的编写等等。游戏主要实现的功 能有: (1).坦克可以上下左右移动 (2).坦克可以发子弹(可以连发) (3).我的坦克击中敌人坦克时,敌人就消失(显示爆炸效果) (4).我被击中后显示爆炸效果 (5).防止敌人坦克重叠运动 (6).玩游戏时可以暂停和继续 (7).记录玩家的成绩
在设计过程中,坦克出现的位置由坐标而定。用户之后的位置由键盘监听 方向,按指定方向以恒定的速度前进——此速度为全局静态变量,当没有接受 到键盘的控制时,则保持静止。敌方的坦克则是根据随机数来控制随机的方向 和路径的,当敌方坦克撞到阻碍物时,会转回到前一步的位置,从而解决了坦 克撞到阻碍物不回头的问题,这个功能由 Tank 类里的 changToOldDir()方法 实现。
具体代码: public boolean hitTanks(List<Tank> tanks) { //当子弹打到坦克时 for (int i = 0; i < tanks.size(); i++) { if (hitTank(tanks.get(i))) { //对每一个坦克,调用 hitTank return true; } } return false; }
t.setLife(t.getLife() - 50); // 受一粒子弹寿命减少 50 接受 4 枪就死,总生命值 200,当然方法里面还要做其他很多的判断,如生 命值是否小于 0,如果是的话就执行 t.setLive(false);从而结束游戏。 坦克的爆炸效果独立出来用一个类来描述,爆炸的属性:位置和存活状态, 另外,画爆炸效果的时候要取得用户界面控制,所以要定义 private static Toolkit tk = Toolkit.getDefaultToolkit();其他的方法只能的大同小异。