JAVA程序设计课程设计(论文)坦克大战游戏_第1页
JAVA程序设计课程设计(论文)坦克大战游戏_第2页
JAVA程序设计课程设计(论文)坦克大战游戏_第3页
JAVA程序设计课程设计(论文)坦克大战游戏_第4页
JAVA程序设计课程设计(论文)坦克大战游戏_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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.

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

4、打下一定基础。1.2 课程设计的实验环境硬件要求能运行windows 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

7、hstank2(坦克大战(版本1.0) ;h.setvisible(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类当中增加对空格键的处理,使每按下空格键的时候,坦克打出一发炮弹。为了解决坦克停下来也能开火的问题给坦克加

9、一炮筒,根据炮筒方向和位置设定子弹的方向和位置并new出来,然后返回。每次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坦克的速度tankbu

10、llet坦克的子弹速度shengming生命nandu设置游戏难度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(3

11、00 , 100) ; this.setbackground(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 , runnab

12、le int x = 280, y = 280 ;/坦克的初始位置 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

13、= 295 ; int dx3 = 295 , dy3 = 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 int

14、num ; int dxf3 = new intnum ; 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 = 2

15、95 ; dyf1i = -10 ; dxf2i = 600 ; 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

16、 ; if(e.getkeycode() = keyevent.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.getkeyco

17、de() = keyevent.vk_space) if(op = 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 + tankbu

18、llet ; dy3 = dy3 + tankbullet ; 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

19、+2 & dyf3i-10& dxf3i-xx+8 &dxf4i-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

20、.out.println (4击中) ; fenshu = 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

21、 , 10 , shengming * 5 , 10) ; 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) ;

22、break; case 3: g.setcolor(color.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 -

23、5 , y + 35 , 10 , 10) ; g.filloval(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

24、 % 20) case 0: g.setcolor(color.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

25、: g.setcolor(color.white) ; break; 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.setc

26、olor(color.black) ; break; case 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 +

27、30 , 10 , 10) ; if(op = 2) g.setcolor(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) ; b

28、reak; 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 + 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

29、 , 10 , 10) ; g.filloval(x + 15 , 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

30、 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) ; break; case 8: g.setcolor(color.white) ; break; case 9: g.setcolo

31、r(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; case 15: g.setcolor(color.black) ; break; case 16: g.setcolor(colo

32、r.black) ; break; case 17: g.setcolor(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

33、 + 5 , 10 , 10) ; g.filloval(x , 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 ,

34、 10 , 10) ; g.filloval(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) ; 2.4测试分析2.4.1程序运行情况编译完相关的

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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论