JAVA程序设计课程设计(论文)坦克大战游戏.doc

上传人:文库蛋蛋多 文档编号:2386950 上传时间:2023-02-17 格式:DOC 页数:20 大小:286.50KB
返回 下载 相关 举报
JAVA程序设计课程设计(论文)坦克大战游戏.doc_第1页
第1页 / 共20页
JAVA程序设计课程设计(论文)坦克大战游戏.doc_第2页
第2页 / 共20页
JAVA程序设计课程设计(论文)坦克大战游戏.doc_第3页
第3页 / 共20页
JAVA程序设计课程设计(论文)坦克大战游戏.doc_第4页
第4页 / 共20页
JAVA程序设计课程设计(论文)坦克大战游戏.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《JAVA程序设计课程设计(论文)坦克大战游戏.doc》由会员分享,可在线阅读,更多相关《JAVA程序设计课程设计(论文)坦克大战游戏.doc(20页珍藏版)》请在三一办公上搜索。

1、辽 宁 工 业 大 学JAVA程序设计 课程设计(论文)题目: 坦克大战游戏 院(系): 专业班级: 学 号: 学生姓名: 指导教师: 教师职称: 起止时间: 程序设计专题(报告)任务及评语院(系):软件学院 教研室:软件教研室学 号学生姓名专业班级程序设计(报告)题目坦克大战游戏程序设计(报告)任务程序设计专题的任务与要求:(1)掌握Java编程、面向对象的基础知识。(2)较熟练地编写Java应用程序Application。(3)了解Java的常用标准类库、编程技巧、异常处理。(5)联系已学过的内容,巩固所学的理论,增强独立工作能力。(6)通过设计主要使学生有一个独立编写程序的过程,对理论学

2、习及动手能力都有一个很大的提高。(7)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。指导教师评语及成绩成绩: 指导教师签字: 2009 年 12 月 20 日目 录第1章 课程设计的目的与要求11.1 课程设计目的11.2 课程设计的实验环境11.3 课程设计的预备知识11.4 课程设计要求1第2章 课程设计内容22.1课程设计主要内容22.2概要设计22.2.1自定义类说明22.3详细设计42.4测试分析142.4.1

3、程序运行情况142.4.2程序异常处理15第3章 课程设计总结16参考资料17第1章 课程设计的目的与要求1.1 课程设计目的JAVA程序设计是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计专题实际是计算机相关专业学生学习完JAVA程序设计课程后,进行的一次全面的综合训练,JAVA程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。1.2 课程设计的实验环境硬件要求能运行Win

4、dows 9.X操作系统的微机系统。JAVA程序设计语言及相应的集成开发环境,J2SDK和ECLIPSE开发工具。1.3 课程设计的预备知识熟悉JAVA语言及ECLIPSE开发工具。1.4 课程设计要求按课程设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握JAVA程序设计的基本技能和面向对象的概念和方法;了解多线程、安全和网络等编程技术。同时培养学生进行分析问题、解决问题

5、的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。第2章 课程设计内容2.1课程设计主要内容坦克大战游戏是在Eclipse环境下编程的游戏,其中包括对主战坦克的编写、坦克的初始位置的编写、坦克的移动方向的编写、坦克的速度的编写、坦克的子弹速度的编写、敌军的子弹速度的编写、设置游戏难度的编写、子弹的编写、敌军坦克的编写、构造函数的编写,初始化敌军坦克的位置和状态的编写、键盘控制坦克的移动的编写、发弹的编写、判断是否被击中的编写、判断是否击中敌军的编写等。通过上下左右键进行对坦克的移动,通过空格发射子弹,其它坦克可以随机移动。构造主窗口中所需要的类,并将

6、坦克加到窗口中,实现坦克的四个方向的移动并创建炮弹类,并让屏幕中的坦克能发射炮弹,让坦克可以朝对方开火,并将对方击毙。2.2概要设计2.2.1自定义类说明(1)HsTank2 类是一个自定义的异常类,其继承的父类为JFrame,没有具备实现类的接口。用此类定义了坦克大战的版本为坦克大战(版本1.0)。其具体定义如下:public class HsTank2 extends JFrame HsTank2(String title) public static void main(String args) HsTank2 h = new HsTank2(坦克大战(版本1.0) ;h.setVisi

7、ble(true) ;(2)MyTank类是用来定义主战坦克的类,其继承父类为JPanel,然后定义坦克的初始位置以及坦克的移动方向,让坦克朝四个方向运动起来,在类MyTank中启用多线程机制,让系统不断的进行重画。其中定义成员变量具体如下:int tankspeed定义成员变量来表示坦克的速度int tankbullet定义成员变量来表示子弹速度int tankfbullet定义成员变量来表示敌军的子弹速度int shengming定义成员变量来显示坦克的生命int nandu定义成员变量来设置游戏难度int num定义成员变量来表示敌军坦克数量 接下来是构造函数,初始化敌军坦克的位置和状态

8、,其具体情况如下:MyTank() for (int i = 0; inum; i+) xfi = (int) (Math.random() * 560) ;yfi = (int) (Math.random() * 560) ;(3)在MyTank类当中添加按键的方法,键盘控制坦克的移动和发弹中,用public公共类创建keyPressed方法,当中添加x,y,dy,dx等属性以及常量和构造方法,让主战坦克打出炮弹。在MyTank类当中增加对空格键的处理,使每按下空格键的时候,坦克打出一发炮弹。为了解决坦克停下来也能开火的问题给坦克加一炮筒,根据炮筒方向和位置设定子弹的方向和位置并new出来,

9、然后返回。每次move之后根据MyTank的新方向确定炮筒的方向。为了能够打出多发炮弹,使用容器填装多发炮弹,每当抬起空格键的时候就往容器中加入新的炮弹。其中创建keyPressed方法如下:public void keyPressed(KeyEvent e) color + ;if(e.getKeyCode() = KeyEvent.VK_UP) op = 1 ;y = y - tankspeed ;dy = dy - tankspeed ;(4)成员变量表如下:表1成员变量表名称成员变量描述tankspeed坦克的速度tankbullet坦克的子弹速度shengming生命nandu设置游

10、戏难度num敌军坦克数量keyPressed键盘控制2.3详细设计编写坦克大战的代码如下:import java.awt.* ; import javax.swing.* ; import java.awt.event.*; import java.util.EventListener; public class HsTank2 extends JFrame HsTank2(String title) this.setTitle(title) ; this.setSize(608 , 630) ; this.setLocation(300 , 100) ; this.setBackground

11、(Color.WHITE) ; MyTank mp = new MyTank() ; this.add(mp) ; this.addKeyListener(mp) ; new Thread(mp).start() ; public static void main(String args) HsTank2 h = new HsTank2(坦克大战(版本1.0) ; h.setVisible(true) ; /主战坦克 class MyTank extends JPanel implements KeyListener , Runnable int x = 280, y = 280 ;/坦克的初

12、始位置 int op = 1 ;/坦克的移动方向 int color = 0 ; int tankspeed = 8 ;/坦克的速度 int tankbullet = 8 ;/坦克的子弹速度 int tankfbullet = 4 ;/敌军的子弹速度 int shengming = 100 ;/生命 int fenshu = 0 ; int nandu = 5 ; /设置游戏难度 /子弹 int dx = 295 , dy = 295 ; int dx1 = 295 , dy1 = -10 ; int dx2 = 600 , dy2 = 295 ; int dx3 = 295 , dy3 =

13、600 ; int dx4 = -10 , dy4 = 295 ; /敌军坦克 int num = 10 ;/敌军坦克数量,不能修改 int xf = new intnum ; int yf = new intnum ; int opf = new intnum ; int dxf = new intnum ; int dyf = new intnum ; int dxf1 = new intnum ; int dyf1 = new intnum ; int dxf2 = new intnum ; int dyf2 = new intnum ; int dxf3 = new intnum ;

14、int dyf3 = new intnum ; int dxf4 = new intnum ; int dyf4 = new intnum ; /构造函数,初始化敌军坦克的位置和状态 MyTank() for (int i = 0; inum; i+) xfi = (int) (Math.random() * 560) ; yfi = (int) (Math.random() * 560) ; dxfi = xfi + 15 ; dyfi = yfi + 15 ; for (int i = 0; inum; i+) dxf1i = 295 ; dyf1i = -10 ; dxf2i = 600

15、 ; dyf2i = 295 ; dxf3i = 295 ; dyf3i = 600 ; dxf4i = -10 ; dyf4i = 295 ; /键盘控制坦克的移动,发弹 public void keyPressed(KeyEvent e) color + ; if(e.getKeyCode() = KeyEvent.VK_UP) op = 1 ; y = y - tankspeed ; dy = dy - tankspeed ; if(y = 560) x = x - tankspeed ; dx = dx - tankspeed ; if(e.getKeyCode() = KeyEven

16、t.VK_DOWN) op = 3 ; y = y + tankspeed ; dy = dy + tankspeed ; if(y = 560) y = y - tankspeed ; dy = dy - tankspeed ; if(e.getKeyCode() = KeyEvent.VK_LEFT) op = 4 ; x = x - tankspeed ; dx = dx - tankspeed ; if(x = 0) x = x + tankspeed ; dx = dx + tankspeed ; if(e.getKeyCode() = KeyEvent.VK_SPACE) if(o

17、p = 1) dx1 = dx ; dy1 = dy ; if(op = 2) dx2 = dx ; dy2 = dy ; if(op = 3) dx3 = dx ; dy3 = dy ; if(op = 4) dx4 = dx ; dy4 = dy ; this.repaint() ; public void keyReleased(KeyEvent e) public void run() for (int a = 0; a60000; a+) dy1 = dy1 - tankbullet ; dx2 = dx2 + tankbullet ; dy3 = dy3 + tankbullet

18、; dx4 = dx4 - tankbullet ; for (int i = 0; inum; i+) dyf1i = dyf1i - tankfbullet ; dxf2i = dxf2i + tankfbullet ; dyf3i = dyf3i + tankfbullet ; dxf4i = dxf4i - tankfbullet ; /判断是否被击中 for (int i = 0; inum; i+) if(dyf1iy +8 & dxf1i-x-10 & dxf1i-xx+2 &dxf2i-10 & dyf2i - y y+2 & dyf3i-10& dxf3i-xx+8 &dxf

19、4i-10 & dyf4i - y 40 ) System.out.println (被4击中) ; dxf4i = dxfi ; dyf4i = dyfi ; shengming = shengming - nandu ; /判断是否击中敌军 for (int i = 0; inum; i+) if(dy1yfi +8 & dx1-xfi-10 & dx1-xfixfi+2 &dx2-10 & dy2 - yfi yfi+2 & dy3-10& dx3-xfixfi+8 &dx4-10 & dy4 - yfi 40 ) System.out.println (4击中) ; fenshu =

20、fenshu + 100 ; xfi = (int)(Math.random() * 560 ); yfi = (int)(Math.random() * 560 ); dxfi = xfi + 15 ; dyfi = yfi + 15 ; public void paint(Graphics g) super.paint(g) ; this.setBackground(Color.WHITE) ; g.setColor(Color.red) ; g.drawString(生命: , 10 , 20 ) ; g.fillRect(50 , 10 , shengming * 5 , 10) ;

21、g.drawRect(50 , 10 , 500 , 10) ; g.drawString(得分: + fenshu , 10 , 40) ; if(op = 1) g.setColor(Color.red) ; g.fillRect(x , y , 40 , 40) ; switch (color % 6) case 0: g.setColor(Color.blue) ; break; case 1: g.setColor(Color.yellow) ; break; case 2: g.setColor(Color.red) ; break; case 3: g.setColor(Colo

22、r.orange) ; break; case 4: g.setColor(Color.green) ; break; case 5: g.setColor(Color.black) ; break; g.fillOval(x - 5 , y - 5 , 10 , 10) ; g.fillOval(x - 5 , y + 5 , 10 , 10) ; g.fillOval(x - 5 , y + 15 , 10 , 10) ; g.fillOval(x - 5 , y + 25 , 10 , 10) ; g.fillOval(x - 5 , y + 35 , 10 , 10) ; g.fill

23、Oval(x + 35 , y - 5 , 10 , 10) ; g.fillOval(x + 35 , y + 5 , 10 , 10) ; g.fillOval(x + 35 , y + 15 , 10 , 10) ; g.fillOval(x + 35 , y + 25 , 10 , 10) ; g.fillOval(x + 35 , y + 35 , 10 , 10) ;g.setColor(Color.black) ; g.fillRect(x + 15 , y - 20 , 10 , 40) ; switch (color % 20) case 0: g.setColor(Colo

24、r.white) ; break; case 1: g.setColor(Color.white) ; break; case 2: g.setColor(Color.white) ; break; case 3: g.setColor(Color.white) ; break; case 4: g.setColor(Color.white) ; break; case 5: g.setColor(Color.white) ; break; case 6: g.setColor(Color.white) ; break; case 7: g.setColor(Color.white) ; br

25、eak; case 8: g.setColor(Color.white) ; break; case 9: g.setColor(Color.white) ; break; case 10: g.setColor(Color.black) ; break; case 11: g.setColor(Color.black) ; break; case 12: g.setColor(Color.black) ; break; case 13: g.setColor(Color.black) ; break; case 14: g.setColor(Color.black) ; break; cas

26、e 15: g.setColor(Color.black) ; break; case 16: g.setColor(Color.black) ; break; case 17: g.setColor(Color.black) ; break; case 18: g.setColor(Color.black) ; break; case 19: g.setColor(Color.black) ; break; g.fillOval(x + 5 , y + 30 , 10 , 10) ; g.fillOval(x + 25 , y + 30 , 10 , 10) ; if(op = 2) g.s

27、etColor(Color.green) ; g.fillRect(x , y , 40 , 40) ; switch (color % 6) case 0: g.setColor(Color.blue) ; break; case 1: g.setColor(Color.yellow) ; break; case 2: g.setColor(Color.red) ; break; case 3: g.setColor(Color.orange) ; break; case 4: g.setColor(Color.green) ; break; case 5: g.setColor(Color

28、.black) ; break; g.fillOval(x - 5 , y - 5 , 10 , 10) ; g.fillOval(x + 5 , y - 5 , 10 , 10) ; g.fillOval(x + 15 , y - 5 , 10 , 10) ; g.fillOval(x + 25 , y - 5 , 10 , 10) ; g.fillOval(x + 35 , y - 5 , 10 , 10) ; g.fillOval(x - 5 , y+35 , 10 , 10) ; g.fillOval(x + 5 , y+35 , 10 , 10) ; g.fillOval(x + 1

29、5 , y+35 , 10 , 10) ; g.fillOval(x + 25 , y+35 , 10 , 10) ; g.fillOval(x + 35 , y+35 , 10 , 10) ; g.setColor(Color.black) ; g.fillRect(x + 20 , y + 15 , 40 , 10) ; switch (color % 20) case 0: g.setColor(Color.white) ; break; case 1: g.setColor(Color.white) ; break; case 2: g.setColor(Color.white) ;

30、break; case 3: g.setColor(Color.white) ; break; case 4: g.setColor(Color.white) ; break; case 5: g.setColor(Color.white) ; break; case 6: g.setColor(Color.white) ; break; case 7: g.setColor(Color.white) ; break; case 8: g.setColor(Color.white) ; break; case 9: g.setColor(Color.white) ; break; case 1

31、0: g.setColor(Color.black) ; break; case 11: g.setColor(Color.black) ; break; case 12: g.setColor(Color.black) ; break; case 13: g.setColor(Color.black) ; break; case 14: g.setColor(Color.black) ; break; case 15: g.setColor(Color.black) ; break; case 16: g.setColor(Color.black) ; break; case 17: g.s

32、etColor(Color.black) ; break; case 18: g.setColor(Color.black) ; break; case 19: g.setColor(Color.black) ; break; switch (color % 6) case 0: g.setColor(Color.blue) ; break; case 1: g.setColor(Color.yellow) ; break; case 2: g.setColor(Color.red) ; break; g.fillOval(x , y + 5 , 10 , 10) ; g.fillOval(x

33、 , y + 25 , 10 , 10) ; if(op = 3) g.setColor(Color.blue) ; g.fillRect(x , y , 40 , 40) ; g.fillOval(x - 5 , y - 5 , 10 , 10) ; g.fillOval(x - 5 , y + 5 , 10 , 10) ; g.fillOval(x - 5 , y + 15 , 10 , 10) ; g.fillOval(x - 5 , y + 25 , 10 , 10) ; g.fillOval(x - 5 , y + 35 , 10 , 10) ; g.fillOval(x + 35

34、, y - 5 , 10 , 10) ; g.fillOval(x + 35 , y + 5 , 10 , 10) ; g.fillOval(x + 35 , y + 15 , 10 , 10) ; g.fillOval(x + 35 , y + 25 , 10 , 10) ; g.fillOval(x + 35 , y + 35 , 10 , 10) ; g.setColor(Color.black) ; g.fillRect(x + 15 , y + 20 , 10 , 40) ; 2.4测试分析2.4.1程序运行情况编译完相关的代码后,在eclipse中运行,会显示出如下效果图,通过上下

35、左右键来移动坦克并躲避子弹,通过按空格来发射子弹,其中还可以显示所剩的生命值,具体效果如下图显示:图2.1坦克大战运行时效果图如下是此游戏结束时的效果图:图2.2坦克大战结束时效果图2.5.2程序异常处理此程序不涉及异常处理。第3章 课程设计总结 在Internet流行的今天,对传统的计算模型提出了新的挑战。由于Java语言具有能独立于平台而运行、面向对象、可对动态画面进行设计与操作、坚固性等特点,又具有多线程、内置校验器用来防止病毒入侵等功能,所以用来在Internet上研制与开发软件时,特别受到用户的欢迎。现在,许许多多的原C+程序员已经转向了Java编程,同时Java程序的应用也由简单的

36、Applet(一种小应用程序)逐步向大型化应用转变,为了迎接将来Internet和信息化世界的挑战,我认为学习Java高级语言是很有必要的。Java是一种简单、面向对象、分布式、解释、健壮、安全、结构中立、可移植、高效能、多线程、动态的语言,Java语言提供一种强有力的工具支援程序设计员,同时由于Java属于面向对象语言,Java程序设计很容易学习,同时Java还提供了自动的内存垃圾收集功能。再者,由于Java码具备结构中立性,因此其应用程序成为非同质性运算环境 (例如Internet)的理想方案。Eclipse是一种通用的工具平台,普通适用的开放式扩展IDE。它提供了功能丰富的开发环境,可以

37、让开发者高效地创建一些能够无缝集成到Eclipse平台中的工具。坦克大战是一个传统的游戏,这个游戏是考验玩家反应的灵敏度,这个游戏规则很简单,玩家使用上下左右键控制坦克的移动,空格键来发射子弹,下面介绍编写的游戏过程。首先创建一个HsTank2类,然后定义坦克大战的版本为:坦克大战(版本1.0),构造主窗口中所需要的MyTank类,并将坦克加到窗口中,实现坦克的四个方向的移动,创建炮弹类,并让屏幕中的坦克能发射炮弹,接下来构造方法,让坦克可以朝对方开火,并将对方击毙。接着编写主战坦克、子弹、敌军坦克、构造函数,初始化敌军坦克的位置和状态、键盘控制坦克的移动,发弹、判断是否被击中、判断是否击中敌

38、军、坦克的随机移动。然后把代码在eclipse中运行,运行中有些错误经过调试,才可以在Eclipse中运行出来并将运行时的效果图截取下来。在本次试验中,给我印象最为深刻的是程序的编译。最后我们的课程设计结束了,但是它留给我的印象是不可磨灭的。以前上课时有许多的问题并没有真正的认识到,但通过这次试验的制作,使我掌握了许多更重要的知识点。参考资料1钟允中 Java入门 辽宁科学技术出版社 1997年10月2. 美Bruce Eckel 京京工作室译 Java编程思想 机械工业出版社 1999年4月3. 耿祥义 张跃平 Java2实用教程 清华大学出版社 2004年4. 刘晓华 精通Java核心技术 电子工业出版社 2004年5. 美C.Thomas Wu 候国峰等译 面向对象程序设计导论 电子工业出版社 2002.066. 美Chuck Cavaness Java完全探索(第2版) 中国青年出版社 2001.097. 姜利群 Java网络编程实例教程 .清华,北交大出版社.2005.1.8. 李尊朝 Java语言程序设计. 中国铁道出版社. 2004.9.9. 袁海燕 Java.应用程序设计100例 人民邮电出版社. 2005.5.10. 薛为民 Java 应用教程 清华北交大出版社. 2005.9.11. 耿祥义 Java课程设计 清华大学出版社 2004.02

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号