程序设计实训坦克大战实验报告材料
C++课程设计报告
《面向对象编程技术》课程设计实验报告——————坦克二班级:软124姓名:张景东学号:129074282指导教师:胡增涛设计完成时间:2013/12/24目录一、程序名称二、设计目的三、程序设计的意义四、功能介绍五、开发平台六、课程设计总体规划1、处理流程图2、结构模块分析七、主要代码八、运行效果抓图九、创新和难点十、课程设计中目前存在的问题十一、心得体会一、程序名称以《坦克大战》游戏为题材,自己动手,从零开始,写出简单坦克小游戏-----坦克二。
二、设计目的1、进一步掌握C++进行类的定义和操作方法;2、学习和掌握C++程序设计方法以及上机调试技巧,为以后学校其他专业课程打好基础;3、能够培养我们独立分析问题、解决问题、查阅资料以及自学的能力,以适应计算机只是日新月异发展的形式;4、程序设计的目的不单单是课堂上的学习,我觉得最重要的是让我们学生掌握程序设计的思想与方法。
在课程设计的过程中,我们充分运用我们课堂上学习到的知识,并且复习C语言中的函数等知识点。
在这个过程中,我们能够不断提高对C++面向对象程序设计的理解,最终能够独立自主解决一些问题。
三、程序设计的意义大学最重要无疑是动手能力与自学能力的培养,课程设计明显给了我们这样的一个机会。
遇到瓶颈的时候,我们需要去图书馆查阅书籍,代码错误的时候我们需要反复的调试,在这个过程中,我们的动手能力以及自学能力都在不知不觉中得到了很大的提升。
回顾起此次课程设计,我还是感慨颇多,从理论到实践,在这几乎一个学期的时间里(课程设计是C++第一次上课的时候提出来的),我学到了很多很多的东西,不仅巩固了以前所学过的C语言方面的知识,而且自己也去图书馆查阅资料学到了很多。
通过这次的课程设计使我懂得了理论与实际结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践结合起来,从理论中得出结论,才是自己真正掌握了的,属于自己的知识,才能提高自己的实际动手能力和独立思考的能力。
坦克大战 实验报告
本科实验报告课程名称:Java语言程序设计实验项目:TankWar实验地点:致远楼B403专业班级:软件工程1219 学号:2012005496 学生姓名:柴丁方指导教师:任少斌2014年 1 月7 日import java.awt.*;import java.awt.event.*;public class TankWarClient extends Frame {//构造游戏开始的界面public void KaiShiJieMian() {this.setLocation(400,200); //游戏窗口的左上点在屏幕的位置this.setSize(800, 600);//游戏窗口的尺寸//使按窗口的“X”时,可以关闭程序较上一次实验添加的代码段为:public void paint (Graphics g) {Color c = g.getColor();//color类是 java。
awt 中的,因此可以直接 color cg.setColor(Color.green);// 类 java.awt.Graphics 中的方法,将此图形上下文的当前颜色设置为指定颜色。
g.fillOval(50, 50, 30, 30);//int x, int y,int width,int height,分别为坐标与椭圆的长宽g.setColor(c);}变更2:较上一次实验添加的代码段为:1.更改如下代码段中的“常量值”为“x”“y”,使所填充的椭圆位置可以随值改变,为静态的图形动起来打下了基础。
static int x=50,y=50;实验四:从版本0.4到版本0.41变更1:变更2:较上一次实验添加的代码段为:1.public class TankWarClient extends Frame {Image offScreenImage = null;}//先把内存的offScreenImage清空较上一次实验添加的代码段为:1.TankWarClient类中:2.3.较上一次实验修改的代码段为:public class Tank {public static final int XSPEED = 5;public static final int YSPEED = 5;private int x, y;private boolean bL=false, bU=false, bR=false, bD = false;enum Direction {L, LU, U, RU, R, RD, D, LD, STOP};private Direction dir = Direction.STOP;//此处为构造函数。
坦克大战报告
JAVA程序开发课程设计课程大作业专业:软件工程班级:14软工2学号: ***********名:***项目名称:坦克大战一、需求分析:1.基本功能:(1)我方坦克能上下移动(2)敌方坦克能自由移动(3)我方坦克能开火(4)敌方坦克能自由开火(5)子弹打中我方,会减血,我方打中敌方,敌死。
敌打敌不会受伤(6)有血条,主界面2.扩展功能(1)用图形来表示坦克和炮弹(2)用图形来表示中子弹后的爆炸效果(3)地图上存在金属墙,我方坦克和子弹不能穿过(4)地图上存在曹村,我方和敌方坦克能够自由穿过,子弹也一样(5)地图上会随机出现加血包(6)我方坦克遇到加血包,会增加生命(7)游戏开始时,会启动背景音乐(8)我方坦克死亡时,提示游戏结束二、系统设计:1. BgMusic(1)主要功能:添加背景音乐TankMap类通过调用该类,并读取BgMusic包下面的背景音乐文件(2)成员属性:1)filename,用于记录读取到的文件名,并处理2)nBytesRead,这是缓存,用于读取音乐文件,缓存下来(3)成员方法:1)run,播放背景音乐2)构造方法BgMusic,将读取到的文件名,存储到成员属性filename中2. Blood(1)主要功能:地图中添加血包(2)成员属性:1)x,y,width,height,血包的位置以及宽高2)rpos_x,rpos_y,用于记录血包移动后的位置3)tm,调用TankMap类,并在地图中放血包4)live,血包的存活,被坦克吃了就消失5) blood,用于记录血包的存活6)step,血包的步长7)stepMove,血包走过总的步长(3)成员方法:1)Blood,构造方法,将血包放到地图中2)draw,画血包3)move,血包的移动4)getRect,获取血包的位置3. Tank(1)主要功能:地图中添加我方坦克(2)成员属性:1)WIDTH,HEIGHT,xspeed,yspeed,坦克的宽高和x,y上的移动速度2)x,y,direction,我方坦克出现的初始位置和初始状态3)tm,调用TankMap类,并在地图中放坦克4)isLive,我方坦克是否存活5) isgood,坦克属于哪一方6)life,我方坦克的初始生命值7)step,使用Blood类,血包随机出现8)upimage,rightimage,downimage,leftimage,oldimage,存放坦克图片(3)成员方法:1)draw,绘制坦克2)move,根据移动方向,移动坦克,不允许坦克移除地图3)checkDirection,确定用户单击的方向键,修正坦克即将移动方向4)fire,发射子弹5)getRec,返回坦克当前位置,便于判断是否与敌方坦克或子弹重叠6)stay,坦克撞墙的处理7)eat,我方坦克吃血包4.EnemyTank(1)主要功能:地图中添加敌方坦克(2)成员属性:1)WIDTH,HEIGHT,xspeed,yspeed,坦克的宽高和x,y上的移动速度2)x,y,direction,我方坦克出现的初始位置和初始状态3)tm,调用TankMap类,并在地图中放坦克4)islive,我方坦克是否存活5)enemytank,存放坦克图片(3)成员方法:1)draw,绘制坦克2)move,根据移动方向,移动坦克,不允许坦克移除地图3)fire,发射子弹4.Explor(1)主要功能:子弹打中坦克,发生爆炸效果(2)成员属性:1)x,y,坦克出现的位置2)tm,调用TankMap类,并在地图中放爆炸3)islive,我方坦克是否存活(3)成员方法:1)draw,绘制爆炸2)Explor,爆炸的构造方法5.Help(1)主要功能:给用户游戏帮助(2)成员属性:1)help,将帮助的文字存放在字符串中(3)成员方法:1)getHelpDialog,调用帮助6.Shell(1)主要功能:设计子弹(2)成员属性:1)WIDTH,HEIGHT,xspeed,yspeed,子弹的宽高和x,y上的移动速度2)x,y,direction,子弹出现的位置和方向3)tm,调用TankMap类,并在地图中放子弹4)isLive,子弹是否打中坦克5)isgood,是否是我方6)Image,加载子弹图片(3)成员方法:1)draw,绘制子弹2)move,根据移动方向,移动坦克,得到子弹的移动3)getRec,获取坦克的位置4)hitTanks,子弹打坦克5)hitWalls,子弹打墙7.Wall(1)主要功能:给地图添加墙(2)成员属性:1)x,y,w,h,墙的位置和宽度高度2)tc,地图(3)成员方法:1)draw,画墙2)getRect,获取墙的位置8.TankMap(1)主要功能:地图(2)成员属性:1)MAPWIDTH,MAPHEIGHT,地图的宽高2)t,我方坦克3)bufferImage,缓冲,用于解决闪屏4)forestimage,草丛5)shells,EnemyTank,Blood,Explors泛型6)enemyCount,敌方坦克数量7)w1,w2,不可穿过的墙(3)成员方法:1)init,初始化地图2)paint,画血包,地图,坦克等3)addBloods,加血4)update,解决闪屏三、功能实现:1.功能1:我方,敌方坦克上下移动并开火(1)操作说明游戏启动时,按上下左右键可以是我方坦克移动,按F键可以开火(2)关键代码//绘制坦克public void draw(Graphics g){//根据不同方向加载不同图片,读取的时候需要处理异常try{switch(direction){case STOP:case UP:upimage=ImageIO.read(new File("src/images/up.gif"));oldimage=upimage;g.drawImage(upimage, x, y, null);break;case RIGHT:rightimage=ImageIO.read(new File("src/images/right.gif"));oldimage=rightimage;g.drawImage(rightimage, x, y, null);break;case DOWN:downimage=ImageIO.read(new File("src/images/down.gif"));oldimage=downimage;g.drawImage(downimage, x, y, null);break;case LEFT:leftimage=ImageIO.read(new File("src/images/left.gif"));oldimage=leftimage;g.drawImage(leftimage, x, y, null);break;}}catch (IOException e) {};g.drawImage(oldimage, x, y, null);move(direction);}//根据移动方向,移动坦克,不允许坦克移出地图public void move(Direction d){/*** 记录坦克原来的位置,撞墙可以回到原位置*/oldX=x;//记录坦克原来的位置,撞墙可以回到原位置oldY=y;if(d == Direction.STOP){}else if(d == Direction.UP){y-=yspeed;if(y<=HEIGHT)y=HEIGHT;}else if(d==Direction.RIGHT){x+=xspeed;if(x>=800-WIDTH)x=800-WIDTH;}else if(d==Direction.DOWN){y+=yspeed;if(y>=600-HEIGHT)y=600-HEIGHT;}else if(d==Direction.LEFT){x-=xspeed;}2.功能2:我方开火,敌方会爆炸,然后死亡。
新世纪坦克大战课程设计报告
计算机学院计算机科学与技术专业《程序设计综合课程设计》报告(2010/2011学年第一学期)学生姓名:学生班级:学生学号:指导教师:2011年 1 月9 日新世纪坦克大战目录《程序设计基础》课程设计 (1)——《新世纪坦克大战》 (1)一.课程设计目的和要求 (1)二.课程设计任务内容 (1)三.详细设计说明 (1)(1)需求分析 (1)(2)算法设计 (2)(3)数据结构设计 (2)(5)功能函数设计 (4)(6)函数调用流程 (4)(7)编码和实现 (4)(8)调试和运行 (5)四.软件使用说明 (9)五.课程设计心得与体会 (9)附录1:参考文献 (10)附录2:程序清单 (11)《程序设计基础》课程设计——《新世纪坦克大战》一.课程设计目的和要求1.熟悉c++的各种编译技巧和注意事项。
2.能就实际问题提出问题并给予分析。
3.学会分析程序所具备的功能,并把各个功能分类处理。
4.提高使用c++处理实际问题的能力。
5.提高c++编程的实践能力。
二.课程设计任务内容在DOS界面上实现一个简单的《新世纪坦克大战》小游戏。
要求能够自主调整射程,随机给出爆炸效果,判断胜负,画面颜色丰富,基本实现动画效果。
三.详细设计说明(1)需求分析1.游戏规则、特色以及作者版权的介绍。
2.游戏主要背景的输出。
3.背景以及前景的颜色设置。
4.玩家坦克射程的判断。
5.敌对坦克的射程的随机给出以及判断。
6.爆炸效果画面的选取调用以及输出。
7.胜负的判断以及相关函数的调用以及输出。
8.实现游戏回合制的循环。
(2)算法设计将游戏画面底部作为一条数轴,划分为22个部分。
玩家输入射击仰角n,根据仰角n的不同,出现不同的爆炸效果(包括击中对方获胜)。
程序给出一个随机数m,作为敌对坦克的射击仰角,根据仰角m,出现不同的爆炸效果(包括击中玩家致使玩家失败)。
(3)数据结构设计坦克输出画面函数:void picture00(){cout<<" ### ***"<<'\n';cout<<" ####### *******"<<'\n';cout<<" ##### *****"<<'\n';cout<<"#######*******"<<'\n';cout<<"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"<<'\n';}随机数生成函数:srand(time(0));m=rand()%20-1;(5)功能函数设计1.不同的效果画面,包括背景颜色的输出。
拓展项目——坦克大战(共5则)
拓展项目——坦克大战(共5则)第一篇:拓展项目——坦克大战坦克大战明阳天下拓展项目简介团队的所有成员在规定的时间和规则的约束下,进行角色分配后,蒙上双眼依次进入模拟战场,在躲避地雷的同时用炮弹尽可能的击中对手,最终战场剩余人数最多的小组获胜。
项目规则1、每队队员同时蒙眼进入雷区,听由场外队员指挥捡炮弹,中途如有触碰地雷,该队员视为中弹身亡,由下一名队员顶替;2、场内队员蒙眼听从场外队员的指挥,捡起炮弹,击中对方队员身体任意部位,即可淘汰对方队员继续存活;3、场外队员只能在限定的区域内活动,不可触发到其他组的区域;4、最后场外留有人数最多组获胜。
项目目标有效沟通,战略与决策,在特殊的情况下如何和其他学员进行有效沟通;团队的力量如何发挥才能体现最大的力量;怎样才能是更合理的指挥方式;默契程度和信任度的考验。
北京明阳天下拓展培训机构是国内体验培训领域的“黄埔军校”。
在体验式培训、户外教育理论、专项主题研究、软件实操开发等软件设施方面已走在行业前列;而硬件拓展设备、拓展器材、拓展设施设计建造和大型独资实操基地等硬件设施方面同样领先全国。
强大的课程研发队伍,与国际接轨的先进培训理念,完善的硬件设备,优越的服务意识,明阳天下拓展始终秉承“专业致胜,效果为王”的理念,为成千上万的客户打造专业化、高标准的拓展培训方案。
第二篇:坦克大战大报告大作业题目:坦克大战程序一、需求分析功能需求坦克大战其中包括对主战坦克的编写、坦克的初始位置的编写、坦克的移动方向的编写、坦克的速度的编写、坦克的子弹速度的编写、敌军的子弹速度的编写、设置游戏难度的编写、子弹的编写、敌军坦克的编写、构造函数的编写,初始化敌军坦克的位置和状态的编写、键盘控制坦克的移动的编写、发弹的编写、判断是否被击中的编写、判断是否击中敌军的编写等。
通过上下左右键进行对坦克的移动,通过F键发射子弹,其它坦克可以随机移动。
构造主窗口中所需要的类,并将坦克加到窗口中,实现坦克的四个方向的移动并创建炮弹类,并让屏幕中的坦克能发射炮弹,让坦克可以朝对方信息统计功能,在游戏界面左上角,显示当前屏幕子弹数。
坦克大战设计报告
手机版疯狂坦克游戏设计与开发摘要Java良好的跨平台特性在移动平台的开发中显示出了巨大的威力。
Java语言面向对象的优势也使得开发游戏变得非常容易。
随着手机的日益普及、Java功能在移动设备上的实现,Java应用程序产生的手机增值服务逐渐体现出其影响力,对丰富人们的生活内容、提供快捷的资讯起着不可忽视的作用。
本论文着眼于J2ME技术的应用,开发一款可商用的手机游戏程序——坦克大战。
本程序的界面和运作方式继承于日本任天堂公司在20世纪80年代开发的Battle City游戏,将老少皆宜的经典作品移植到手机上来,为更流行的硬件平台提供应用软件。
本论文介绍了任天堂红白机的软硬件特性、J2ME的相关技术及本程序的结构分析和具体功能的实现。
关键词:J2ME,手机游戏,Java,坦克大战目录1 绪论 (3)1.1开发背景 (3)1.2 开发工具 (3)1.3 开发意义 (3)2 需求分析 (6)2.1功能需求分析 (6)2.2界面需求分析 (6)3 总体设计 (7)3.1主要功能 (7)3.2 程序流程 (8)4 详细设计和具体实现 (9)4.1游戏进入前的选择 (9)4.2主游戏逻辑及其涉及到的若干类 (10)4.3坦克的共同行为 (13)4.4玩家坦克的功能属性 (14)4.5敌人坦克的功能属性 (15)4.6子弹的运行和控制 (19)4.7记分系统 (21)5.测试与实现 (22)6 程序的总结和展望 (23)1 绪论1.1开发背景在信息社会中,手机及其他无线设备越来越多的走进普通百姓的工作和生活,随着信息网络化的不断进展,手机及其他无线设备上网络势在必行。
但是传统手机存在以下弊端:1. 传统手机出厂时均由硬件厂商固化程序,程序不能增加、删除,有了错误也不能更新、修改,若要增加新功能必须另换一部手机。
2. 传统手机访问互联网是通过WAP(Wireless Application Protocal),所有网络资源必须接通网络才能在线访问,非常耗时、费用亦很高。
坦克大战实验报告
坦克大战实验报告班级:1205 姓名:许广龙学号:121010182一、系统简介使用JAVA编写一个人机游戏,有开始启动面板(Stage 1),并有闪烁效果。
在开始面板中有游戏(G)和帮助(H)两个菜单。
其中游戏(G)菜单中有开始游戏(N)、退出游戏(E)、保存游戏(S)、继续游戏(C)选项;帮助(H)菜单中有关于坦克如何操作的提示信息。
玩家有1辆坦克(有3条命),电脑有6辆坦克,我的坦克可以通过键盘控制进行移动和发射子弹,敌人坦克可自由运动并自动发射子弹。
敌人坦克相互之间不能重叠,敌人坦克与我的坦克不能重叠,我的坦克与敌人坦克不能重叠。
当子弹击中坦克时坦克死亡,并显示爆炸效果。
当我的坦克生命为0时游戏结束(显示GAMEOVER),当敌方的所有坦克死亡时游戏结束(显示VICTORY)。
二、需求分析设计一个图形用户界面,将所有游戏的元素都能在此用于界面上表现出来,界面能够接受用户的操作,具有人机交互功能。
用户可以选择开始游戏(N),退出游戏(E),保存游戏(S),继续游戏(C),游戏帮助(H)。
界面中包含我的坦克和敌人坦克以及坦克发出的子弹和爆炸后的效果。
坦克:坦克分为两种,敌人坦克和我的坦克。
我的坦克和敌人坦克均可以发射子弹,可以改变路径行走,且在行走过程中碰到边界或碰到其它坦克会自动换方向,坦克之间不能相互穿越。
子弹:子弹可以由敌方坦克和我的坦克发射,且发射出去的子弹可以直线移动,直到碰到其它坦克或超越边界就消失。
坦克受到一颗子弹攻击便死亡,死亡后坦克消失。
爆炸:当子弹射击到坦克身上时,要产生爆炸效果。
方向:坦克和子弹都有方向,可以选择上下左右四个方向,且子弹的方向从属于坦克的方向。
具体功能:1、坦克可以上下左右移动2、坦克可以发子弹(可以连发,最多5发子弹)3、当坦克中弹时,坦克消失,并显示爆炸效果。
4、我的坦克被击中后显示爆炸效果5、防止敌人坦克重叠运动、我的坦克与敌人坦克重叠运动、敌人坦克与我的坦克重叠运动6、玩游戏时可以保存游戏和继续游戏7、记录玩家的成绩三、系统设计程序流程图:总体框架:项目名:TankGame1主类文件:MyFrame.java坦克父类文件:Tank.java坦克子类(我的坦克):MyTank.java坦克子类(敌人坦克):EnemyTank.java我的面板:MyPanel.java子弹类:Shot.java开始面板:MyStartPanel.java记录类:Recorder.java爆炸类:Bomb.java四、详细设计(一) 、画坦克1、Tank类class Tank{int x,y;//坦克的位置int direct;//坦克的方向int color;//坦克的颜色,值为0时为的我的坦克,为1时为敌人的坦克int speed;public Tank(int x, int y) {this.x = x;this.y = y;}setter与getter方法(代码略)public void moveUp(){//向上移动,y坐标值减,方向值为0y-=speed;this.setDirect(0);}public void moveDown(){//向下移动,y坐标值增,方向值为2y+=speed;this.setDirect(0);}public void moveRight(){//向右移动,x坐标值增,方向值为1x+=speed;this.setDirect(0);}public void moveLeft(){//向左移动,x坐标值减,方向值为3x-=speed;this.setDirect(0);}}2、我的坦克类MyTankclass MyTank extends Tank{public MyTank(int x, int y) {super(x, y);}}3、主类MyFramepublic class MyFrame extends JFrame{MyPanel mp=null;public static void main(String[] args) {MyFrame tankGame1=new MyFrame();MyFrame.setVisible(true);}public MyFrame() {mp=new MyPanel();this.add(mp);this.setBounds(200,200,600,500);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}4、在MyFrame.java中创建MyPanel类class MyPanel extends JPanel{MyTank mytank=null;public MyPanel(){mytank=new MyTank(200,200);//创建我的坦克并设置其初始位置}//重载MyPanel类的paint函数以实现画坦克public void paint(Graphics g)//窗口大小改变或重绘窗口时,执行repaint()时会自动调用{super.paint(g);g.fillRect(0,0,600,500);this.drawTank(mytank.getX(),mytank.getY(),mytank.getDirect(),mytank.getColor(), 5, g); }//在MyPanel画坦克的函数,参数包括坦克的位置、方向、类型(用于设置颜色)、画笔:public void drawTank(int x, int y, int direct, int color, int size,Graphics g) {switch (color) {case 0://我的坦克的颜色g.setColor(Color.cyan);break;case 1:g.setColor(Color.yellow);break;case 2://敌人坦克的颜色g.setColor(Color.green);break;}switch (direct) {case 0:g.fill3DRect(x, y, size, 6 * size, false);g.fill3DRect(x + 3 * size, y, size, 6 * size, false);g.fill3DRect(x + size, y + size, 2 * size, 4 * size, false);g.fillOval(x + size, y + 2 * size, 2 * size, 2 * size);g.drawLine(x + 2 * size, y, x + 2 * size, y + 3 * size);break;case 3:g.fill3DRect(x, y, 6 * size, size, false);g.fill3DRect(x, y + 3 * size, 6 * size, size, false);g.fill3DRect(x + size, y + size, 4 * size, 2 * size, false);g.fillOval(x + 2 * size, y + size, 2 * size, 2 * size);g.drawLine(x, y + 2 * size, x + 3 * size, y + 2 * size);break;case 1:g.fill3DRect(x, y, 6 * size, size, false);g.fill3DRect(x, y + 3 * size, 6 * size, size, false);g.fill3DRect(x + size, y + size, 4 * size, 2 * size, false);g.fillOval(x + 2 * size, y + size, 2 * size, 2 * size);g.drawLine(x + 6 * size, y + 2 * size, x + 3 * size, y + 2 * size);break;case 2:g.fill3DRect(x, y, size, 6 * size, false);g.fill3DRect(x + 3 * size, y, size, 6 * size, false);g.fill3DRect(x + size, y + size, 2 * size, 4 * size, false);g.fillOval(x + size, y + 2 * size, 2 * size, 2 * size);g.drawLine(x + 2 * size, y + 6 * size, x + 2 * size, y + 3 * size);break;}}(二)、移动坦克(事件监听)在主类注册键盘事件监听,在MyPanel类中实现事件监听。
JAVA关于坦克大战的课程设计报告
课程设计任务书
题目:
学 号: 姓 名: 专 业: 课 程: 指导教师:
职称:
完成时间: 20 年 月----20 年 月
枣庄学院信息科学与工程学院制
课程设计任务书及成绩评定
课程设计的任务和具体要求 本课程的程序设计专题实际是计算机相关专业学生学习完《JAVA 语言程
序设计》课程后,进行的一次全面的综合训练,JAVA 程序设计的设计目的是 加深对理论教学内容的理解和掌握,使学生综合运用所学知识,利用软件工程 为基础进行软件开发、并在实践应用方面打下一定基础。
2
二.系统分析 2.1 可行性分析
2.1.1 技术可行性 软件使用 swing、GUI、Socket、面向对象设计等技术实现,这些技术
均已是非常成熟的技术,之前已有相当多使用这些技术的成功案例,故现 使用这些技术是可行的。 2.1.2 经济可行性
本软件为免费软件,将免费提供软件的下载、运行和维护服务,软件 暂无收入,待公布之后随着使用者越来越多,将添加相应的广告、服务, 从而增加收入,若使用者寥寥无几,将再次分析是否重新策划软件或者放 弃开发,以减少损失。
2.2 需求分析
设计一个图形用户界面,将所有游戏的元素都能在此用于界面上表现出来, 界面能够接受用户的操作,具有人机交互功能。用户可以选择重新开始游戏, 退出游戏,暂停游戏游戏帮助。
界面中包含我方坦克,和敌人坦克以及坦克发出的子弹和爆炸后的效果。 坦克:坦克分为两种,敌方坦克和用户控制的坦克。用户方和敌方坦克均 可以发射子弹,可以改变路径的行走,且在行走过程中遇到墙等阻碍物和游戏 边界时要改变方向,而不能一直顶着障碍物不放。坦克之间不能穿越,碰撞到 后自动调换方向。 墙:游戏中的边界王家的坦克和敌人的坦克都不能越过,坦克的子弹也不 能穿过。 子弹:子弹可以由敌方和用户方发射,且发射出去的子弹可以直线移动, 直到碰到障碍物就消失,子弹可以穿越树林和河流。敌方坦克受到一颗子弹攻 击会爆炸从而导致死亡,死亡后坦克消失。用户方受到子弹攻击后会减少寿命, 且受到四次攻击则死亡,此时如还有敌方坦克存在,则用户方输掉本次游戏。 爆炸:当子弹射击到坦克身上时,要产生爆炸效果。 方向:坦克和子弹都有方向,可以选择上下左右四个方向,且子弹的方向 从属于坦克的方向。
坦克大战系统《Java程序开发实训》综合实训报告
《Java程序开发实训》综合实训报告题目:坦克大战系统**:**学号:**********班级:10软件(2)班一、系统实现的主要功能及运行结果截图选择的语言的原因游戏本身是一种娱乐方式,带给人无尽的乐趣,而且游戏行业的发展也将是带动周边行业的发展。
同样对做出游戏的人的要求也会越来越高一满足游戏爱好者的要求。
本次期末设计就是设计一种娱乐性较强的小游戏坦克大战,说到大战其实是不敢当的。
但游戏基本拥有可玩性。
java语言是一种跨平台,适合与分布计算环境的面向对象编程语言,java主要用在web开发,手机游戏及一些平台游戏的开发,他有很好的跨平台性。
所以本次的设计坦克游戏选择的是java。
系统软件的软件环境1.网络服务器操作系统:Window是 XP以上2.开发工具:Eclipse3运行环境:J2sdk4.编程语言:java语言。
人机对战模式功能1.能够发射子弹打击敌人2.敌人能够移动3.能够模拟爆炸4.能够产生障碍5能够增长生命6.能够使用超级子弹坦克可以发射子弹玩家坦克被击中血量减少。
被击中的坦克发生爆炸并且吃血块可以加血量。
玩家坦克可以从把方向发射超级子弹自己的TankHealth为<=0时,。
说明玩家坦克已死亡。
游戏结束本系统的坦克大战是基于java语言设计的开发,具有较高的人工智能和相对的图形处理。
游戏可一人作战每次电脑方有10辆坦克,此一举消灭全部的敌方坦克为目的。
在这过程中坦克有机会得到血块来添加自己的生命值。
从而变得强大。
也利用wall来形成阻击敌人。
游戏拥有开挂的功能。
可以穿过墙体来攻击敌方坦克。
还给玩家坦克置了超级炮弹。
从八个方向同时射出炮弹来摧毁敌方坦克。
主要功能简单罗列如下:1.屏幕左上方显示游戏的状态,当玩家方坦克全数为0是游戏结束2.敌方坦克只在空地上行走,不可通过Wall3.游戏打坏敌方坦克后,可随机位置随机出现血块奖励。
坦克经过该位置可获得相应的生命值加成。
4.玩家坦克的游戏资格和电脑坦克不同。
项目-坦克大战-设计报告
《JA V A程序开发课程设计》项目设计项目名称:TankWar 软件专业:软件工程班级:13软工1班姓名:毛晨光学号:一、需求分析:基本功能:1.玩家控制的坦克能够四处移动并且打击敌方坦克;2.敌方坦克能够随机四处移动并且打击玩家控制的坦克;3.玩家控制的坦克拥有血量,而敌方坦克没有;4.坦克受到攻击时血条会缩短;5.敌方坦克被消灭完之后,提示游戏胜利;6.用户方坦克被消灭后提示游戏结束;特色功能:1.坦克具有图片,不单单只是个圈圈。
2.增加了血包功能,地图上会随机出现一个血包,我方坦克开过会增加血量。
二、系统设计:1.TankMap类:实现游戏界面地图的初始化。
2.PainTread类:绘制和重绘功能。
3.DirectionHandler:监听用户的键盘输入。
4.Tank类:实现坦克的初始化,绘制,移动,发射等功能。
5.EnemyTank:实现敌方坦克的初始化,绘制,移动,发射等功能。
6.Shell类:实现炮弹的初始化,绘制,移动,攻击功能。
7.Explor类:实现爆炸的初始化。
绘制功能,爆炸效果由绘制半径从小到大再到小的圆实现。
8.Direction类:包含枚举。
9.Blood类:用于实现血包的功能。
三、功能实现。
一.绘制地图功能:public class TankMap extends Frame{//定义地图的尺寸。
public static final int MAPWIDTH=800;public static final int MAPHEIGHT=600;//我方坦克Tank t=null;//定义随机出现的血包Random r=new Random();Image bufferImage=null;//地方坦克集合->enemys=new ArrayList<EnemyTank>();//爆炸集合public.static.jav//敌方坦克数量默认10个public int enemyCount=5;//主方法public static void main(String[] args) {TankMap tv=new TankMap();tv.init();}public void drawImage(){}//地图初始化方法public void init(){//初始化地图this.setSize(MAPWIDTH,MAPHEIGHT);this.setTitle("TankWar");this.setVisible(true);//添加键盘监听器this.addKeyListener(new DirectionHandler()); //添加穿口关闭监听器this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent arg0){ System.exit(0);}});//初始化我方坦克t=new Tank(this);//初始化敌方坦克for(int i=0;i<enemyCount;i++){enemys.add(new EnemyTank(40+30*i,80,Color.YELLOW)); }//启动绘制线程new Thread(new PaintThread()).start();}//@Overridepublic void paint(Graphics g){//画地图Color c=g.getColor();g.setColor(Color.GREEN);g.fillRect(0,0,MAPWIDTH,MAPHEIGHT);g.setColor(Color.RED);g.drawString("当前炮弹数目:"+shells.size(),20,40);g.drawString("生命值:",20,60);g.fillRect(65,55,t.getLife(),5);g.setColor(c);//画坦克t.draw(g);if(r.nextInt(10)==9 && bloods.size()==0)bloods.add(new Blood());if(r.nextInt(60)==7 && bloods.size()==1)bloods.remove(0);for(int i=0;i<enemys.size();i++){EnemyTank et=enemys.get(i);et.draw(g);}//画爆炸for(int i=0;i<explors.size();i++){Explor e=explors.get(i);e.draw(g);}//绘制血包for(int i=0;i<bloods.size();i++){Blood b=bloods.get(i);b.bloodb(t);b.draw(g);}//画炮弹for(int i=0;i<shells.size();i++){Shell s=shells.get(i);if(s.islive&&s.isgood){s.hitTanks(enemys);}else if(s.islive&&!s.isgood){s.hitTank(t);}s.draw(g);}}//双缓冲,防止游戏地图“频闪”public void update(Graphics g){paint(g);if(bufferImage==null){bufferImage=this.createImage(MAPWIDTH,MAPHEIGHT);}Graphics gbuffer=bufferImage.getGraphics();Color c=gbuffer.getColor();gbuffer.setColor(Color.GREEN);gbuffer.fillRect(0, 0, MAPWIDTH, MAPHEIGHT);gbuffer.setColor(Color.RED);gbuffer.drawString("当前炮弹数目:"+shells.size(),20,40);gbuffer.drawString("生命值:", 20, 60);gbuffer.fillRect(65,55,t.getLife(),5);gbuffer.setColor(c);paint(gbuffer);g.drawImage(bufferImage, 0, 0, null);}//内部类,主要通过调用repaint方法,实现绘图功能class PaintThread implements Runnable{@Overridepublic void run(){while(true){repaint();try{Thread.sleep(260);}catch(InterruptedException e){e.printStackTrace();}}}}//内部类,键盘监听器class DirectionHandler extends KeyAdapter{@Overridepublic void keyPressed(KeyEvent arg0){t.checkDirection(arg0);}}二.绘制坦克功能:public class Tank {//坦克的尺寸和移动速度public static final int WIDTH=50,HEIGHT=50,xspeed=5,yspeed=5;//坦克的初始位置public int x=400,y=300;//坦克的初始化方向,STOP即停止,Direction是自定义的枚举常量,见枚举源代码public Direction direction=Direction.STOP;//地图TankMap tm;//坦克是否存活boolean isLive=true;//坦克属于哪一方,true为用户方,false为敌方boolean isgood=true;//坦克初始化生命值int life=100;//定义坦克的初始化方向,以便插图坦克的图片public int zhuanxiang=1;//获取和设置存活状况public boolean isLive(){return isLive;}public void setLive(boolean isLive){this.isLive=isLive;}//获取和设置生命值public int getLife(){return life;}public void setLife(int life){this.life=life;}//构造方法public Tank(){};public Tank(TankMap t){tm=t;}//绘制坦克//根据坦克的移动方向,插入不同的坦克的图片public void draw(Graphics g){if(zhuanxiang==1){ImageIcon icon=new ImageIcon("Etank_shang.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}else if(zhuanxiang==-2){ImageIcon icon=new ImageIcon("Etank_you.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}else if(zhuanxiang==2){ImageIcon icon=new ImageIcon("Etank_zuo.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}else{ImageIcon icon=new ImageIcon("Etank_xia.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}/*Color c=g.getColor();g.setColor(Color.RED);g.fillOval(x,y,WIDTH,HEIGHT);g.setColor(c);*/move(direction);}//根据方向,移动坦克,不允许坦克移出地图尺寸public void move(Direction d){if(d==Direction.STOP){}else if(d==Direction.UP){zhuanxiang=1;y -= yspeed;if(y<=20)y=20;}else if(d==Direction.RIGHT){zhuanxiang=-2;x+=xspeed;if(x>=800-WIDTH)x=800-WIDTH;}else if(d==Direction.DOWN){zhuanxiang=-1;y+=yspeed;if(y>=600-HEIGHT)y=600-HEIGHT;}else if(d==Direction.LEFT){zhuanxiang=2;x-=xspeed;if(x<=0)x=0;}}//确定用户单机的方向键,修正坦克即将移动的方向public void checkDirection(KeyEvent k){if(k.getKeyCode()==KeyEvent.VK_UP){direction=Direction.UP;}else if(k.getKeyCode()==KeyEvent.VK_RIGHT){ direction=Direction.RIGHT;}else if(k.getKeyCode()==KeyEvent.VK_DOWN){ direction=Direction.DOWN;}else if(k.getKeyCode()==KeyEvent.VK_LEFT){ direction=Direction.LEFT;}if(k.getKeyCode()==KeyEvent.VK_F){fire();}}//发射炮弹的方法public void fire(){}//返回坦克当前位置矩形,便于判断是否与敌方坦克或炮弹重叠public Rectangle getRec(){return new Rectangle(this.x,this.y,this.WIDTH,this.HEIGHT); }}三.敌方坦克的绘制方法public class EnemyTank extends Tank{//初始化敌方坦克的属性public static final int WIDTH=50,HEIGHT=50,xspeed=5,yspeed=5; public int x=400,y=300;public Direction direction=Direction.DOWN;public boolean islive=true;Color color=Color.YELLOW;TankMap tm;//随机数产生器,供敌方坦克随机产生前进方向使用Random r=new Random();public int zhuanxiang;//方向更改限制,避免敌方坦克每移动一次就更改方向int randomCount=r.nextInt(10)+5;//构造方法public EnemyTank(){}public EnemyTank(int wx,int wy,Color c){x=wx;y=wy;color=c;}@Overridepublic void draw(Graphics g){//根据敌方坦克的移动方向插入不同的坦克图片if(zhuanxiang==1){ImageIcon icon=new ImageIcon("Etank_shang.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}else if(zhuanxiang==-2){ImageIcon icon=new ImageIcon("Etank_you.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}else if(zhuanxiang==2){ImageIcon icon=new ImageIcon("Etank_zuo.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}else{ImageIcon icon=new ImageIcon("Etank_xia.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}move();}public void move(){//当方向更改限制为0时,产生一个随机方向if(randomCount==0){Direction dirs[]=Direction.values();direction = dirs[r.nextInt(dirs.length-1)];randomCount = r.nextInt(10)+5;}//方向更改限制减1randomCount--;//随机发射炮弹,当产生的随机数大于35时,发射炮弹if(r.nextInt(40)>36){fire();}//确定敌方的坦克的移动if(direction==Direction.UP){y-=yspeed;zhuanxiang=1;if(y<=HEIGHT)y=HEIGHT;}else if(direction==Direction.RIGHT){x+=xspeed;zhuanxiang=-2;if(x>=800-WIDTH)x=800-WIDTH;}else if(direction==Direction.DOWN){y+=yspeed;zhuanxiang=-1;if(y>=600-HEIGHT)y=600-HEIGHT;}else if(direction==Direction.LEFT){x-=xspeed;zhuanxiang=2;if(x<=0)x=0;}}@Overridepublic void fire(){Shell(this.x+WIDTH/2,this.y+HEIGHT/2,this.direction,tm,Color.BLUE,false));}public Rectangle getRec(){return new Rectangle(this.x,this.y,this.WIDTH,this.HEIGHT);}}四.炮弹绘制方法public class Shell {//初始化炮弹的基本属性public final int WIDTH=5,HEIGHT=5,xspeed=14,yspeed=14;public int x,y;Direction dir=Direction.STOP;public boolean islive=true;TankMap tm=null;Color color=Color.RED;boolean isgood=true;boolean isLive=true;//构造方法public Shell(){}public Shell(int xd,int yd,Direction d,TankMap t){ x=xd;y=yd;dir=d;tm=t;}public Shell(int xd,int yd,Direction d,TankMap t,Color c,boolean g){x=xd;y=yd;dir=d;tm=t;color=c;isgood=g;}//绘制炮弹public void draw(Graphics g){if(islive){Color c=g.getColor();g.setColor(color);g.fillOval(x,y,WIDTH,HEIGHT);g.setColor(c);move(dir);}else{}}//炮弹的移动,如果炮弹移动出了地图尺寸,则设定炮弹死亡public void move(Direction d){if(d==Direction.UP){y-=yspeed;if(y<=0)islive=false;}else if(d==Direction.RIGHT){x+=xspeed;if(x>=800)islive=false;}else if(d==Direction.DOWN){y+=yspeed;if(y>=600)islive=false;}else if(d==Direction.LEFT){x-=xspeed;if(x<=0)islive=false;}}public Rectangle getRec(){return new Rectangle(this.x,this.y,this.WIDTH,this.HEIGHT); }//打击坦克方法public boolean hitTank(Tank t){if(this.isLive&&t.isLive&&this.getRec().intersects(t.getRec()) ){//用户坦克生命值减20t.setLife(t.getLife()-20);//如果用户坦克生命值《=0,游戏结束if(t.getLife()<=0){t.setLive(false);t.direction=Direction.STOP;JOptionPane.showMessageDialog(tm,"Game Over!");System.exit(0);}//炮弹死亡this.isLive=false;//产生爆炸Explor e=new Explor(x-3,y-3,this.tm);return true;}return false;}//用户坦克打击敌方坦克的方法public boolean hitTanks(List<EnemyTank>enemyTanks){EnemyTank e;for(int i=0;i<enemyTanks.size();i++){e=enemyTanks.get(i);if(this.getRec().intersects(e.getRec())){e.setLive(false);this.isLive=false;Explor ex=new Explor(x-3,y-3,this.tm);return true;}}return true;}}五.爆炸类源代码:public class Explor {//初始化爆炸属性int x,y;TankMap tm;boolean islive=true;int diameter[]={5,9,13,18,25,31,21,12,6};int step=0;//构造方法public Explor(){}public Explor(int x,int y,TankMap t){this.x=x;this.y=y;this.tm=t;}//绘制爆炸public void draw(Graphics g){//如果爆炸已经发生过,从地图的爆炸集合中移出该爆炸if(!this.islive){return;}//判断爆炸是否发生完if(step==diameter.length){this.islive=false;step=0;return;}Color c=g.getColor();g.setColor(Color.ORANGE);g.fillOval(x, y, diameter[step], diameter[step]);step++;g.setColor(c);}}六.枚举方向源代码package tank;//定义枚举public enum Direction{UP,RIGHT,DOWN,LEFT,STOP;}七.随机血包产生的方法public class Blood{public final int WIDTH=30,HEIGHT=30;public int x= new Random().nextInt(800),y= new Random().nextInt(600);TankMap tm;public void draw(Graphics g){ImageIcon icon=new ImageIcon("blood.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}public boolean bloodb(Tank t){if(t.isLive&&this.getRec().intersects(t.getRec())){if(t.getLife()<=60){t.setLife(t.getLife()+40);}else{t.setLife(100);}}return false;}public Rectangle getRec(){return new Rectangle(this.x,this.y,this.WIDTH,this.HEIGHT);}}四、总结。
程序设计实训坦克大战实验报告
程序设计实训报告坦克大战专业班级:装控1401 实习时间:2015年7月10日至7月14日实习地点:微401 成员 1:赵振华成员 2:许晨欢成员 3:蒋绪涛一、作品概述1.1 创新点:1、自定义并命名树林和钢板精灵,设置树林属性为不接受碰撞可以自由穿梭,钢板为接受任何碰撞但不做任何处理(即子弹和坦克均不能摧毁钢板)。
2、添加坦克发炮、击中目标和坦克移动的特殊声效。
1.2 概述:这款游戏是我们QWER小组以经典90版坦克大战为背景制作的坦克大战的改编款,玩家通过控制坦克摧毁敌方坦克来保卫主基地不被摧毁。
当敌我双方坦克相碰或己方基地被子弹摧毁时游戏结束(敌我双方子弹均可摧毁基地),每隔3秒钟出现一辆敌方坦克,游戏最大时长为100秒。
此款游戏与经典90版坦克大战较为相似,操作简单,能唤起我们对童年的回忆。
二、功能设计玩家坦克与敌方坦克在街道中进行巷战,玩家坦克被击中或与敌方坦克相撞、玩家指挥部被击中或游戏时间到,一局游戏结束。
按下空格键后游戏开始,“空格开始”消失,载入地图,100秒倒计时开始,并把玩家坦克设置在指挥部左侧。
游戏时间到,玩家坦克被敌方坦克摧毁,与敌方坦克相撞,或者玩家指挥部被摧毁,一局游戏结束,游戏回到初始界面,并显示上一局的分数。
玩家用W、A、S、D键控制坦克上、下、左、右运行,按J键开炮。
坦克行进过程中有特殊声效,坦克发射或击中目标都有相应的声效。
玩家坦克碰到墙和钢板就停下来,需要调转方向才能继续前进。
玩家坦克开炮,一炮就能摧毁一块墙或者一辆敌方坦克,但不能摧毁钢板,玩家可穿梭于树林中。
玩家每摧毁一辆敌方坦克,加1分。
玩家指挥部被坦克或者炮弹(不管玩家还是敌方)碰上,都会被摧毁。
每隔3秒钟,就会产生一辆敌方坦克。
敌方坦克每隔一段时间,就自动开炮。
敌方坦克遇到墙就会停下来。
停下来的坦克,前方的墙如果被摧毁了,又能继续前进。
每隔几秒钟,敌方坦克就会顺时针变换一个方向前进。
每局最大时长为100秒。
java课程设计--坦克大战游戏(带源码)
g.drawRect(x,y-5, WIDTH,5);
int w=WIDTH*life/100;
g.fillRect(x, y-5, w, 5);
g.setColor(c);
}
}
private class BloodBar_B{
public void draw(Graphics g){
}
Graphics gOffScreen=offScreenImage.getGraphics();
Color c=gOffScreen.getColor();
gOffScreen.setColor(Color.GRAY);
gOffScreen.fillRect(0, 0,GAME_WIDTH,GAME_HEIGHT);
g.drawString("击中个数:"+explodes.size(),10,70);
g.drawString("坦克数量:"+tanks.size(),10,90);
g.drawString("生命值:"+myTank.getLife(),10,110);
if(tanks.size()<=0){
public static final int HEIGHT = 30;
private boolean live = true;
private BloodBar_G bb_G=new BloodBar_G();
private BloodBar_B bb_B=new BloodBar_B();
private int life =100;
Color c=g.getColor();
java实现坦克大战课程设计报告书
Java实现坦克大战小游戏摘要Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。
我的课程设计是用java来做一个简单的坦克大战小游戏。
我将这个程序细分了多个部分,每个部分都建了独立的类,比如:坦克的模型类,河道,树和坦克方向等等。
之所以将之细分,是遵循了java的万事万物皆对象的原理。
在实现每个类时,最简单但也是最繁琐就是建立界面与实例化坦克,因为这牵扯了界面布局,监听的建立等;而有一些类,比如;河道、墙、坦克,这些类这可以依样画葫芦的编写。
在编写过程,借鉴了他人的一些图片模型,实现的功能也并不是和经典的FC坦克大战相同,但是每个坦克之间的互动还是实现了的。
关键词:万事万物皆对象界面布局坦克之间的互动USE JAVA TO REALIZE BATTLE CITY MINI-GAMEABSTRACTJava is a object oriented program design language what can compose cross platform application software. My curriculum design is using JAVA language to make a simple small game called Tank Battle. I break down this program into multiple parts, each part is to establish an independent class, such as: Tank Model class, River Course class, Tree class, The Direction of Tank class and so on. The reason divides into multiple parts, is because follow the principle of JAVA that everything is an object. When implements every class, the most simple but also the most troublesome is build interface and instantiate Tank class, because it is involved of the interface layout, monitoring the establishment. While there are some classes, such as: River Course class, Wall class and Tank class, can write like stick closely to the pattern given.In the preparation process, I refer some pictures of models of others, the function of the retaliate isn’t like FC Tank Battle, but the interaction between ach tank is realized.Key words: everything is an object, the interface layout, the interaction betweeneach tank目录1 课程目的与要求 (1)1、1课程目标 (1)1、2 课程的实现环境 (1)2 概要设计 (2)3 详细设计 (3)4 测试结果与心得体会………………………………………………………………………5 参考文献……………………………………………………………………………………附录……………………………………………………………………………………………源程序代码……………………………………………………………………………………1 课程的目的与要求1、1课程目标JAVA程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。
课程设计报告--坦克大战
目录一.问题定义 (1)1. 项目名称 (1)2. 项目目标 (1)3. 选题背景 (1)二.可行性研究 (1)1.技术可行性 (1)2. 经济可行性 (1)3. 操作可行性 (1)三.需求分析 (2)1. 游戏内容需求 (2)2. 游戏规则 (3)四.游戏设计 (3)1. 类的设计 (3)2. 游戏流程 (4)1. 主流程 (4)2. 游戏初始化 (5)3. 游戏运行 (6)3. 游戏序列图 (14)游戏初始化 (14)键盘按下事件 (15)游戏运行 (15)玩家坦克处理 (16)电脑坦克处理 (17)炮弹碰撞处理 (19)坦克碰撞处理 (19)游戏结束 (20)五.游戏代码 (21)CGameMain类 (21)CTankPlayer类 (32)CTankEnemy类 (36)CBullet类 (42)CWeapon类 (49)六.实验总结 (53)一.问题定义1.项目名称坦克大战2.项目目标综合运用C++及其面向对象的知识开发一款小游戏。
3.选题背景相信大部分同学都玩过或看过“坦克大战”这款经典游戏。
现在,就由我自己动手来开发它。
因为之前的学习,我具备了C++语言和面向对象的基础知识,在这个基础上按照实验指南的指导一步一步进行下去,把这款经典游戏做出来。
巩固之前所学知识也学习新的知识。
二.可行性研究1.技术可行性本游戏采用 FunCode和Visual C++6.0进行开发,基于Windows xp和Windows7操作系统。
Funcode软件提供了大量基础类库,可以快速方便地构造出游戏软件。
之前课程学习过C++,具有一定的C++语言开发基础,对面向程序设计有一定了解。
2.经济可行性此次课程设计由我一人完成,只需装有Funcode及Visual C++的电脑一台,无资金需求;且制作出来的游戏软件并不打算发行,也无后期资金需求,经济完全可行。
3.操作可行性本游戏只需用W、A、S、D来移动,用J键进行攻击,操作十分简单,界面友好,符合用户操作习惯。
坦克大战
《面向对象的编程技术》课程设计实验报告专业班级:计算机科学与技术114班姓名:翟晓军学号:119074133设计时间:2012.12.8——2012.12.20课题名称:坦克大战课程主题与目的:(1)参考(《PC游戏编程(窥门篇)》谭文洪著)中的“坦克大战”(TankWar工程),并对其进行完善、扩充,程序要能看出专业水平和商业化产品的效果。
(2)要求:修改案例中“子弹可以穿透石头墙”的错误;增加上帝模式(无敌);修改一种敌军坦克,使之威力更大(要求坦克画面采用学生自己的头像)(需要重新编译资源包;之所以“改”而不是“增”,是因为同学们无法修改地图编辑器,另一个办法是在程序运行后动态加入);回答“坦克大战”指导书.doc(或pdf) 和TankWar剖析.doc(或pdf)中带有蓝色《….?》标记的问题。
(3)在中国,电子游戏曾一度被大家斥为“电子海洛因”。
然而电子游戏在青年学生中大受欢迎却又是一个不争的事实。
正如水能载舟,亦能覆舟一样,任何事物都有其两面性。
与其千方百计地封堵,还不如让同学们从技术的角度来研究它,这样既可以掌握复杂系统的设计技巧,也可以破除对电子游戏的神秘感。
我相信,一个人如果自己能制作游戏,如果能清楚地知道那个绚丽多彩的虚拟世界背后无非就是一些类、变量、函数的话,他就不可能再沉迷于打游戏———与一堆对象、内存变量和函数较劲。
同时,从技术上讲,游戏程序的开发异常复杂,能充分体现面向对象的拟人化思想和面向对象设计技巧。
通过游戏程序的制作,可以帮助学生真正掌握面向对象程序设计的精髓。
主要技术:C++中类的继承、派生以及多态的使用 程序开发环境:Microsoft Visual C++6.0,WIN7等游戏的整体设计:TobjectTSpriteTobstacleTExplodeTBonusTEnemytankTPlayertank TBulletTWorldTLinkTLinkNode运行界面展示:指导书问题解答:1、g_world.Move();//《不马上返回菜单,而是继续动,去掉此行怎样?》答:敌人坦克也保持不动2、static DWORD dwTick ;//《定时器用法。
java坦克大战课程设计报告
网络编程程序设计坦克大战网络版专业班级:09级网络工程(2)班组长:张玉利(200903060011)成员:李瑞琳(200903060016)张杰(200903060036)朱凯强(200903060020)杨达允(200902010026)指导教师:王占中一、需求分析每个人都玩过坦克大战这个游戏,本程序完成的功能就是平时所玩的游戏中所实现的一些基本功能。
并且在单机版的基础上改写成网络版具体游戏要求:●玩家控制的坦克能够四处移动●玩家控制的坦克能够打击敌人●敌人坦克能够任意移动●坦克被摧毁能够模拟爆炸●多个玩家(即客户端)通过服务器端进行互动。
二、java文件对应的功能。
Tank.java主要是包括Tank的相关信息;以及基本方法,以及对应的按键处理public void keyPressed(KeyEvent e) 按键响应函数private void locateDirection() 确定当前的坦克的位置private Missile fire() tank发射子弹public boolean isLive() 检测坦克是否还活着public void setLive(boolean live) 设定坦克的生死状态Tankclient.Java主要是客户端登陆的功能,具体通过套节字实现。
class ConnDialog extends Dialog此类主要实现通过对话框的形式来连接登录服务器。
客户机自动实现修改udPport的功能。
TankDeadMsg.Java本文件主要是向所有客户机包括服务器发送死亡坦克的信息。
这里主要用到的是多态机制。
(Tankdeadmsg继承msg接口)public void parse(DataInputStream dis)主要功能:* 分析接收到的消息数据* 接收到的消息数据的输入流public void send(DatagramSocket ds, String IP, int udpPort)主要功能:发送死亡坦克的相关的消息*通过该socket发送数据*数据的目标IP*数据的目标端口TankMoveMsg.java本文件主要是向所有客户机包括服务器发送坦克移动的相关息。
坦克大战实验报告摘要
一、实验背景与目的在本次程序设计实训中,我们小组以经典90版坦克大战为原型,设计并实现了一款名为“坦克大战”的游戏。
本实验旨在通过实践,加深对程序设计基础知识的理解,提高编程能力,并锻炼团队协作和项目管理的经验。
通过本次实验,我们希望实现以下目标:1. 熟练运用C++等编程语言进行游戏开发。
2. 学习并应用游戏引擎和相关技术,如碰撞检测、图形渲染等。
3. 培养团队协作和项目管理能力。
二、作品概述本次实验作品名为“坦克大战”,是一款改编自经典90版坦克大战的游戏。
玩家通过控制坦克在街道上进行巷战,摧毁敌方坦克以保卫主基地。
游戏规则如下:1. 玩家坦克被击中或与敌方坦克相撞、玩家指挥部被敌方子弹摧毁时游戏结束。
2. 敌我双方子弹均可摧毁基地。
3. 每隔3秒钟出现一辆敌方坦克。
4. 游戏最大时长为100秒。
三、创新点1. 自定义精灵与属性:在游戏中,我们自定义并命名了树林和钢板精灵。
树林属性设置为不接受碰撞,可以自由穿梭;钢板属性设置为接受任何碰撞,但不做任何处理(即子弹和坦克均不能摧毁钢板)。
2. 特殊声效:为坦克发炮、击中目标和坦克移动等动作添加了特殊声效,使游戏更具沉浸感。
四、功能设计1. 玩家控制:玩家通过键盘操作控制坦克移动、射击等动作。
2. 敌方坦克生成:每隔3秒钟,游戏场景中会自动生成一辆敌方坦克。
3. 碰撞检测:游戏实现了敌我坦克碰撞和子弹与基地的碰撞检测,确保游戏规则的有效执行。
4. 图形渲染:游戏采用了图形渲染技术,使坦克、子弹、基地等元素在屏幕上呈现出来。
5. 得分与生命值:游戏设置了得分和生命值系统,玩家需要尽量摧毁敌方坦克,同时保证自己坦克的生命值。
五、实验过程与成果1. 前期准备:我们小组在实验前进行了充分的前期准备,包括查阅相关资料、学习编程语言和游戏开发技术等。
2. 分工协作:在实验过程中,我们根据个人特长和兴趣进行了分工,确保每个成员都能发挥自己的优势。
3. 编程实现:我们运用C++等编程语言,结合游戏引擎和相关技术,实现了坦克大战游戏的基本功能。
坦克大战课程设计
《面向对象的编程技术》课程设计实验报告学院:计算机学院班级:软件工程114学号:119074258姓名:黄芳恺指导老师:胡增涛2012.12.10[程序设计名称]:疯狂坦克;[程序设计主题]:一款娱乐游戏,玩家通过运行操作坦克消灭坦克最后打掉“邪恶源获得胜利;[程序设计目的]:《面向对象的编程技术》课程设计是一门独立开设的实验课程,旨在进一步强化学生对类、封装、继承、多态等面向对象基本概念的理解和OOP(面向对象编程)实际动手能力,并进一步拓展到OOD(面向对象设计)原则、技巧和初步的OOA(面向对象分析)方法。
[程序设计简介]:一、设计目的:C++电脑游戏开发:侧重利用面向对象的拟人化思想解决复杂问题和OOD技巧;同时让学生掌握基本面向对象C++程序设计方法,熟悉C++程序设计的步骤;通过进行可视化程序设计,进一步熟悉可视化C++开发工具的使用和开发,提高动手能力,提高分析问题和解决问题的能力;二、功能介绍:这是一款小游戏,主要通过玩家的相关操作游戏中坦克做出相关的动作达到相应的效果,使玩家能够获得小乐趣;三、基本内容:模拟敌我各种坦克、各种炮弹的运动,模拟地形和各种障碍物,设计上述对象之间的交互。
处理坦克的各种功能与操作。
四、主要技术:C++程序编程以及相关软件的运用;五、运行环境:本设计采用Microsoft Visual C++6.0编译,并能够在WIN98,WIN2000下运行游戏基于Windows Game Engine(WGE游戏引擎,添翼虎科技)(没提供源程序,不过不用担心,你可以把它看成是利用DirectX快速处理图片、声音、键鼠的类库) ,该引擎需要DirectX7.0 SDK支持[应用程序的总体设计结构图]:、TObjectTSprite TObstacle TExplode TBonusTEnemyTank TPlayerTank TBulletTWord TLink TLinkNode[应用程序类层次图]:[主要运行界面的介绍]:程序主要运行界面如下图,首先是3个选择项目,开始游戏,游戏介绍和退出游戏。
《java桌面开发项目实训》实训报告之坦克大战
广东工贸职业技术学院java桌面应用系统开发学期项目实训报告课程实训题目java版坦克大战专业计算机软件班级学号1313344姓名洪朝亮指导教师鲁庆完成时间2014/6/16----2014/7/4一、课程实训任务书及成绩评定二、课程实训进度计划三、课程实训所需要软件、硬件等资源说明◆Windows 7及以上操作系统;◆JDK1.6及以上版本、eclipse或者myEclipse等软件。
四、可参考的资料、文献1) 教材《Java语言实用教程》,杨晓燕主编,清华大学出版社,2009.042) 上课讲解演示的代码、所给的一些资料、ppt3)图书馆、网上相关内容五、实训内容及代码详细说明(请从此处开始写)1.1、初始化界面:import java.awt.*;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.io.File;import java.io.IOException;import java.util.Vector;import javax.imageio.ImageIO;import javax.swing.*;public class TankGame7 extends JFrame { MyPanel mp = null;public static void main(String[] args) { TankGame7 demo1 = new TankGame7();}public TankGame7() {mp = new MyPanel();mp.setBackground(Color.black);// 启动mp线程Thread t = new Thread(mp);t.start();// 将mp添加到窗体上this.add(mp);// 注册事件监听this.addKeyListener(mp);this.setSize(400, 300);this.setTitle("13软件班案例");// 关闭jvmthis.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}}1.2、在界面上绘制出敌我坦克,自己坦克1辆,敌人坦克不少于5辆。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序设计实训报告坦克大战专业班级:装控1401 实习时间:2015年7月10日至7月14日实习地点:微401 成员 1:赵振华成员 2:许晨欢成员 3:蒋绪涛一、作品概述1.1 创新点:1、自定义并命名树林和钢板精灵,设置树林属性为不接受碰撞可以自由穿梭,钢板为接受任何碰撞但不做任何处理(即子弹和坦克均不能摧毁钢板)。
2、添加坦克发炮、击中目标和坦克移动的特殊声效。
1.2 概述:这款游戏是我们QWER小组以经典90版坦克大战为背景制作的坦克大战的改编款,玩家通过控制坦克摧毁敌方坦克来保卫主基地不被摧毁。
当敌我双方坦克相碰或己方基地被子弹摧毁时游戏结束(敌我双方子弹均可摧毁基地),每隔3秒钟出现一辆敌方坦克,游戏最大时长为100秒。
此款游戏与经典90版坦克大战较为相似,操作简单,能唤起我们对童年的回忆。
二、功能设计玩家坦克与敌方坦克在街道中进行巷战,玩家坦克被击中或与敌方坦克相撞、玩家指挥部被击中或游戏时间到,一局游戏结束。
按下空格键后游戏开始,“空格开始”消失,载入地图,100秒倒计时开始,并把玩家坦克设置在指挥部左侧。
游戏时间到,玩家坦克被敌方坦克摧毁,与敌方坦克相撞,或者玩家指挥部被摧毁,一局游戏结束,游戏回到初始界面,并显示上一局的分数。
玩家用W、A、S、D键控制坦克上、下、左、右运行,按J键开炮。
坦克行进过程中有特殊声效,坦克发射或击中目标都有相应的声效。
玩家坦克碰到墙和钢板就停下来,需要调转方向才能继续前进。
玩家坦克开炮,一炮就能摧毁一块墙或者一辆敌方坦克,但不能摧毁钢板,玩家可穿梭于树林中。
玩家每摧毁一辆敌方坦克,加1分。
玩家指挥部被坦克或者炮弹(不管玩家还是敌方)碰上,都会被摧毁。
每隔3秒钟,就会产生一辆敌方坦克。
敌方坦克每隔一段时间,就自动开炮。
敌方坦克遇到墙就会停下来。
停下来的坦克,前方的墙如果被摧毁了,又能继续前进。
每隔几秒钟,敌方坦克就会顺时针变换一个方向前进。
每局最大时长为100秒。
三、功能实现3.1 数据结构struct Weapon{char szName[128]; // 精灵名称float fPosX, fPosY; // 精灵坐标float fSpeedX, fSpeedY; // X和Y方向上速度float fFireTime; // 敌方坦克距下一次开炮的剩余时间float fRotateTime;int iHp; // 生命值int iDir; // 朝向:0 - 上方;1 - 右方;2 - 下方;3 - 左方int iType; // 类型: 0 - 我方坦克;1 - 敌方坦克;2 - 我方// 子弹; 3 - 敌方子弹Weapon* pNext; // 指向下一个节点的指针};enum Direction{UP = 0, // 上方RIGHT = 1, // 右方DOWN = 2, // 下方LEFT = 3 // 左方};enum Role{MYTANK = 0, // 我方坦克ENEMYTANK = 1, // 敌方坦克MYBULLET = 2, // 我方子弹ENEMYBULLET = 3 // 敌方子弹};const float GAME_TIME = 100.f; // 一局游戏时间const float CREATE_TANK_TIME = 2.f; // 每批次生成坦克的时间间隔const float TANK_SPEED = 20.f; // 坦克速度const float BULLET_SPEED = 30.f; // 子弹速度const float FIRE_TIME = 2.f; // 坦克开炮时间间隔const float WORLD_LEFT = -26.f; // 游戏场景边界左值const float WORLD_TOP = -22.f; // 游戏场景边界左值const float WORLD_RIGHT = 26.f; // 游戏场景边界左值const float WORLD_BOTTOM = 22.f; // 游戏场景边界左值int g_iMap[11][13]; // 二维数组定义游戏地图int g_iWallCount = 0; // 游戏中墙的数量int g_iNum = 0; // 记录全部精灵的数目,用来给精灵命名float g_fCreateTime = 0.f; // 每批次生成坦克的剩余时间int g_listSize;const float ROTATE_TIME = 2.f; // 敌方坦克调转方向的时间bool g_bStart; // 定义游戏开始与否int g_iScore; // 游戏中的分数float g_fGameTime=30.f; // 定义游戏时间int maxscore=0; // 定义初始最高分3.2 算法描述3.2.1 游戏开始和结束1、游戏状态g_bstart分为两种状态0,1 ,其中0表示游戏结束状态,1表示游戏开始;当游戏未开始时即g_start状态为0,按下空格键,游戏g_bstart状态变为1,游戏开始,将“空格开始”与“splash”设置为不可见,游戏开始计时为100秒,显示最高分数,将本局游戏分数初始化为0,初始化地图中墙,goal,玩家坦克的位置。
一局游戏进行中,每循环一次,g_fGameTime减去一次刷屏的时间。
当g_fGameTime≤0,说明一局游戏时间已完,游戏停止,重新显示“空格开始“字样。
2、按W、S、A、D键,控制坦克上下左右运动。
定义MoveMyTank函数,按下W键,设置玩家坦克向上的速度;按下A键,设置向左速度;按下S键,设置向下的速度,按下D键,设置向右速度。
松开键盘,坦克速度为0。
同时设置玩家坦克朝向iDir。
3、游戏开始后,右上角实时显示剩余时间。
一局游戏开始后,在WinMain函数中的主循环里,通过dSetTextValue把(int)g_fGameTime的数值显示在名为“time”的文字精灵里,从而实时显示剩余时间(显示整秒的时间)。
4、当超过100秒,游戏结束,重新显示“空格开始”字样,游戏时间设为0,坦克回到初始位置。
一局游戏进行中,每循环一次,g_fGameTime减去一次刷屏的时间。
当g_fGameTime≤0,说明一局游戏时间已完,游戏停止,重新显示“空格开始”字样。
同时,g_batart状态要改为0,否则下一局就不能正确判断游戏开始或结束。
3.2.2 玩家坦克在街道中运行1、一局游戏开始时载入地图。
利用数组的值来载入地图,值为0,说明此处为空;值为1,说明此处有墙。
游戏开始后载入地图,但只能载入一次。
如果不停载入,会占有大量资源。
创建一个新的精灵,首先需要给它命名。
有规则地给精灵命名,有利于我们对精灵进行处理。
我们按照墙生成的先后顺序,分别给精灵命名为:wall0,wall1,wall2….按树林生成的顺序,分别给精灵命名为:shu,shu1,shu2……,钢板分别命名为aa1,aa2……。
2、一局游戏结束后删除地图。
3、玩家坦克碰到墙的话,不能继续前行。
设置玩家坦克的碰撞属性,并专门定义一个函数处理玩家坦克发生碰撞后,玩家坦克的响应。
3.2.3 玩家坦克射击1、玩家按下j键,坦克发送炮弹;自定义一个函数,OnFire用于完成坦克发射子弹功能。
玩家坦克发射子弹,和敌方坦克发射子弹功能基本一样,我们可以写在一个函数里。
首先,需要把发射子弹的坦克名称传进来,这样,我们才能获取坦克的朝向和位置;其次,需要区别是我方坦克发射的子弹,还是敌方坦克发射的子弹。
在dOnKeyDown 中增加对OnFire函数的调用。
条件需要满足:游戏开始后,且玩家按J键。
2、创建链表,用链表管理炮弹;用链表管理子弹,每发射一颗子弹,就添加到链表里。
每删除一颗子弹,就从链表里相应删除节点。
游戏结束时,删除所有剩余的子弹。
3、子弹击中墙,将墙摧毁;子弹击中目标,游戏结束。
碰撞事件中,我们经常会将碰撞的一方或两方删除。
但是,如果我们直接删除某个精灵,而后面的精灵还需要获得它的信息时,就没法获得了。
因此,我们定义一个ISDead函数,当该指针存在且iHp 为0时,说明该精灵已死。
碰撞函数中,先将需要删除的精灵的iHp设置为0,最后再统一将需要删除的精灵删除。
4、在dOnSpriteColSprite函数中调用上面两个碰撞函数。
其中,墙只具有“接受碰撞”属性,因此只需要判断szTarName是否包含wall字符串。
子弹具有“发射碰撞”和“接受碰撞”两种属性,因此需要分别判断szSrcName和szTarName是否包含bullet 字符串。
3.2.4 敌方坦克产生与运动1、每隔一段时间,生成一辆敌方坦克,向下运动;坦克生成的初始位置前方不能有墙。
自定义一个函数,用于生成敌方坦克。
每次生成一辆敌方坦克,总是放在第一排,列数随机,但其前方不能有墙。
方向朝向,设置“发送碰撞”和“接受碰撞”属性,设置世界边界。
创建一个Weapon指针节点,将精灵名称、朝向、坦克调转方向时间保存起来,并将节点添加到链表中。
2、敌方坦克每隔一段时间,就顺时针变化一个方向,继续前进。
自定义一个MoveEnemyTank函数,用来处理敌方坦克的运动。
函数根据敌方坦克名称,获取敌方坦克当前朝向和速度,然后将该坦克顺时针旋转90度,并修改相应速度。
在WinMain函数中,一局游戏运行时,遍历链表,找出敌方坦克节点,判断是否已经到调换方向时间。
如果时间到,调用MoveEnemyTank函数。
3.2.5 坦克对战1、玩家坦克子弹击中敌方坦克,敌方坦克被摧毁,玩家加一分。
在OnTankColOther 函数中,对玩家子弹碰到敌方坦克,敌方坦克iHp设为0,并且g_iScore加1。
2、每隔一段时间,敌方坦克就发射一发子弹;增加一个一个全局常量的定义:const float FIRE_TIME = 2.f; // 敌方坦克发射炮弹的时间间隔\ 创建坦克时,需要给坦克的fFireTime赋值为FIRE_TIME。
在WinMain的主循环中,遍历链表,找到敌方坦克节点。
如果坦克发射炮弹时间到,调用OnFire函数。
3、敌方子弹击中玩家坦克,游戏结束。
在OnMyTankColOther函数中,当玩家坦克碰到的是子弹精灵(不可能是自己发射的子弹,因为子弹速度比坦克快),游戏结束。
四、系统界面图4-1 开始游戏图4-2 游戏进行画面图4-3 开始新一局游戏五、总结许晨欢:这次程序设计实训我自己收获非常的多,首先是对于funcode这款软件的收获,可以说是从无到有,从陌生到熟悉,开始觉得软件太难了,无从下手,后来在不断询问老师和同学的过程中,逐渐熟能生巧,学会了创建第一个项目,运行FunCode创建新项目,导入静态精灵,导入动画精灵,删除精灵,设计界面初步,运行游戏等基本操作。