funcode C++课程设计坦克大战
funcodeC课程设计坦克大战
![funcodeC课程设计坦克大战](https://img.taocdn.com/s3/m/c4f239a89e314332396893e4.png)
f u n c o d e C课程设计坦克大战文件编码(008-TTIG-UTITD-GKBTT-PUUTI-WYTUI-8256)课程设计一坦克大战一、游戏介绍相信大部分同学都玩过或看过“坦克大战”这款经典游戏。
现在,就由我们自己动手来开发它。
只要大家具备了C++语言和面向对象的基础知识,然后按照实验指南的指导一步一步进行下去,相信我们每个同学都能把这款经典游戏做出来。
二、实验目标综合运用C++及其面向对象的知识开发一款小游戏。
三、实验内容在一个战场上,玩家控制坦克,消灭敌方坦克,并防止敌方坦克摧毁我方基地。
游戏的具体要求如下:1、游戏有一个初始页面,如下图。
2、按下任意键开始游戏,玩家控制坦克在战场上穿梭,碰到墙时,不能通过。
3、敌方坦克自由移动,每隔2秒改变一个方向,每隔3秒发射一发子弹。
4、敌方坦克每隔5秒出现一辆,从屏幕上方的左、中、右三个位置依次出现。
5、当玩家被消灭或者我方基地被摧毁或者游戏时间大于30秒的时候,游戏结束。
游戏开始前进入游戏四、游戏的整体框架五、实验指南实验准备打开FunCode,创建一个新的C++项目。
注意:项目名称必须为英文和数字,且不能有空格。
点击“项目”→“导入地图模板”,从对话框中选取名称为TankWar的模板导入。
导入成功后,界面如下:实验一游戏开始【实验内容】1、设置游戏标题2、按空格键,提示图片消失,游戏进入开始状态.【实验运行结果】游戏开始前按下空格键后【实验思路】按下空格键是键盘按下事件,可在CSystem::OnKeyDown函数中编写响应代码。
为了保证程序结构的清晰、一致,更好的办法是在CGameMain类中添加一个相应的键盘按下事件处理函数,然后在CSystem::OnMouseClick函数中进行调用。
g_GameMain是CGameMain类的对象,它是全局变量,在程序运行时最先被创建。
【实验指导】1、C++程序的执行入口是主函数。
FunCode的主函数名称叫WinMain,写在文件中。
C语言完整游戏项目坦克大战详细代码
![C语言完整游戏项目坦克大战详细代码](https://img.taocdn.com/s3/m/61b3dced710abb68a98271fe910ef12d2af9a992.png)
C语⾔完整游戏项⽬坦克⼤战详细代码话不多说我们今天就来创造出属于我们⾃⼰的《坦克⼤战》,GOGOGO直接开始吧这次的源码⽐较详细,我分了好⼏个cpp⽂件,思路更加的清晰,请耐⼼⽤⼼的观看⾸先就是我们载⼊图⽚的函数tupian.cpp# include "tanke.h"障碍物void LaoWang(int * tilex, int * tiley){IMAGE img;loadimage(&img, _T("res\\tile.bmp"));putimage(*tilex, *tiley, 32 , 32 , &img, 32 * 5, 0 );}void tileHong(int * tilex, int * tiley){IMAGE img;loadimage(&img, _T("res\\tile.bmp"));putimage(*tilex, *tiley, 32, 32, &img, 32 * 0, 0 );return;}void tileLv(int * tilex, int * tiley){IMAGE img;loadimage(&img, _T("res\\tile.bmp"));putimage(*tilex, *tiley, 32, 32, &img, 32 * 2, 0 );return;}void tileBai(int * tilex, int * tiley){IMAGE img;loadimage(&img, _T("res\\tile.bmp"));putimage(*tilex, *tiley, 32, 32, &img, 32 * 1, 0 );return;}IMAGE img;loadimage(&img, _T("res\\tile.bmp"));putimage(*tilex, *tiley, 32, 32, &img, 32 * 3, 0 ); }//物品void FaZhang(int *wupinx, int *wupiny){IMAGE img;loadimage(&img, _T("res\\fazhang.jpg"));putimage(*wupinx, *wupiny, 24, 24, &img, 0, 0 ); }void ShouQiang(int *wupinx, int *wupiny){IMAGE img;loadimage(&img, _T("res\\shouqiang.jpg"));putimage(*wupinx, *wupiny, 24, 24, &img, 0, 0 ); }void ShangDian(int *wupinx, int *wupiny){IMAGE img;loadimage(&img,_T("res\\shangdian.jpg"));putimage(*wupinx, *wupiny, 32, 32, &img, 0, 0 ); }void YaoShui(int *wupinx, int *wupiny){IMAGE img;loadimage(&img, _T("res\\yaoshui.jpg"));putimage(*wupinx, *wupiny, 28, 28, &img, 0, 0 ); }void DunPai(int *wupinx, int *wupiny){IMAGE img;loadimage(&img, _T("res\\dunpai.jpg"));putimage(*wupinx, *wupiny, 28, 28, &img, 0, 0 ); }void XieZi(int *wupinx, int *wupiny){IMAGE img;loadimage(&img, _T("res\ iezi.jpg"));putimage(*wupinx, *wupiny, 28, 28, &img, 0, 0 ); }void Boss(int *wupinx, int *wupiny){IMAGE img;loadimage(&img, _T("res\\boss.jpg"));putimage(*wupinx, *wupiny, 32, 32, &img, 0, 0 ); }void BigBoss(int *wupinx, int *wupiny){IMAGE img;loadimage(&img, _T("res\\bigboss.jpg"));putimage(*wupinx, *wupiny, 32, 32, &img, 0, 0 ); }接下来是初始化的函数waiyuan.cpp# include "tanke.h"{setcolor(GREEN);settextstyle(0, 0, ("宋体"));char c2[20] = "⾃⼰⽣命值:";outtextxy(0, 20, c2);char c3[10] ;sprintf(c3, _T("%.1f"), 100* (60 - *j) / 60.0);outtextxy(90, 20, c3);}void DShengMing(int * d,int *k){setcolor(GREEN);settextstyle(0, 0, ("宋体"));char c2[20] = "敌⼈⽣命值:";outtextxy(0, 0, c2);char c3[10] ;sprintf(c3, _T("%.1f"), 100* (60 - *d) / 60.0);outtextxy(90, 0, c3);char c4[40] = "恭喜~! 现在起⾦币到2200有惊喜!";//胜利 if ( *k >= 8000 ){setcolor(YELLOW);settextstyle(30, 0, ("宋体"));outtextxy(150, 0, c4);}}void Gold(int * gold){setcolor(GREEN);settextstyle(0, 0, ("宋体"));char c2[20] = "⾦币:";outtextxy(0, 40, c2);char c3[10] ;sprintf(c3, _T("%d"), *gold);outtextxy(40, 40, c3);}void start(void){initgraph(200, 130);TCHAR s1[10]="坦克⼤战";TCHAR s2[30]="按A 开始游戏按B 退出游戏";TCHAR s3[30]="按W S A D控制⽅向";TCHAR s4[20]="按J 发射⼦弹";TCHAR s5[20]="按C 看攻略";outtextxy(70, 0, s1);outtextxy(0, 110, s2);outtextxy(60, 90, s5);outtextxy(55, 30, s4);outtextxy(35, 60, s3);while (true){Sleep(500);if (GetAsyncKeyState('A')){BeginBatchDraw();closegraph();initgraph(640, 480);Sleep(200);Quit();return ;}if (GetAsyncKeyState('C'))GongLue();}}}void GongLue(void){initgraph(450, 300);TCHAR s1[20]="游戏攻略:";TCHAR s2[50]="再打坦克之前先吃法杖打掉⽩⾊砖块,";TCHAR s3[50]="这样敌坦克打⽩⾊就不能回⾎了,boss更应如此。
(汇编代码)微机原理课程设计之TANK坦克大战
![(汇编代码)微机原理课程设计之TANK坦克大战](https://img.taocdn.com/s3/m/208dd1667275a417866fb84ae45c3b3566ecdd56.png)
测试游戏功能是否正常
检查游戏性能是否达标
调试游戏中的错误和问题
优化游戏性能和体验
游戏测试:成功运 行,无严重错误
调试过程:定位并 修复了若干问题
测试结果:性能稳 定,符合预期
结论:游戏测试和 调试工作顺利完成
游戏优化和改进
优化算法:采用更高效的算法,减 少计算量,提高游戏运行速度。
完 成 TA N K 坦 克 大 战 游 戏 的 程 序设计和实现
学会使用汇编语言进行编程
掌握游戏的基本规则和玩法
游戏规则和玩法
游戏目标:击败所有敌人,保护基地 角色设定:玩家扮演坦克,有生命值和弹药量限制 武器装备:多种武器可供选择,不同武器有不同的攻击力和射程 游戏地图:多个关卡,每个关卡有不同的地形和敌人配置
添加标题
游戏状态管理:游戏状态包括开始、进行中和结束三个状态。在开 始状态下,玩家可以开始游戏;在进行中状态下,玩家可以操作坦 克移动和射击;在结束状态下,游戏结束并给出评价。
添加标题
游戏角色行为:游戏角色包括玩家坦克和敌方坦克。玩家坦克的行 为包括移动和射击;敌方坦克的行为包括移动和攻击。
游戏界面布局:简洁明了,易于操作 角色设计:形象生动,符合游戏主题 场景设计:丰富多样,增加游戏趣味性 特效设计:绚丽多彩,提升游戏体验感
添加标题
添加标题
添加标题
添加标题
敌方角色:游戏中的敌方坦克种类多 样,包括轻型坦克、重型坦克、自行 火炮等,具有不同的攻击和防御能力, 对玩家构成威胁。
游戏辅助角色:游戏中的一些辅助角 色,如地图、弹药补给点等,为玩家 提供地图信息和弹药补给服务,帮助 玩家更好地进行游戏。
游戏程序设计和实 现
游戏整体架构:包 括游戏的主要功能 模块和各模块之间 的关系
JAVA课程设计坦克大战游戏(含代码)
![JAVA课程设计坦克大战游戏(含代码)](https://img.taocdn.com/s3/m/66395518c5da50e2524d7f70.png)
Java课程设计任务书简单电子游戏坦克大战的设计1、主要内容:设计一个简单的坦克大战电子游戏,可以允许多位玩家在局域网中同时对战2、系统要求:游戏具有图形游戏界面,能让用户看到游戏所给出的反馈。
有人机交互功能,使用户操作指定的游戏元素,并且坦克具有生命值,能攻击敌方,无法攻击友方,而且坦克的攻击具有视觉效果!3、具体要求(包括技术要求等):1.需要有图形游戏界面,让用户能看到游戏给出的反馈2.有人机交互功能,使用户能操作指定的游戏元素3.不同队伍的坦克,须显示不同外观,已分辨敌我4.坦克能够开火,攻击敌方,但不能攻击队友5需要有不可被子弹穿透的墙6.坦克有生命值,并非被击中一次就会爆炸7游戏结束后可重新开始学习并掌握以下技术:Java、JavaBean 等熟练使用以下开发工具:Myeclipse 等实现系统上述的功能。
4、进度安排:12月28日~ 12月29日:课程设计选题,查找参考资料12月30日~ 1月1日:完成系统设计和数据库设计1月2日~ 1月4日:完成程序代码的编写1月4日~ 1月5日:系统测试与完善1月5日~ 1月6日:完成课程设计报告,准备答辩分工:随着计算机的普及以及对电子游戏的认识,电子游戏已被越来越多的人选作放松、娱乐的休闲方式;电子游戏既不需要专门购买游戏器材,也不需要宽阔的游戏场地,只需要一台能独立完成任务的计算机即可,它可以是人们工作、学习时用的计算机,并不需要另行配置,这比起传统休闲游戏即省钱又省事。
局域网游戏更是可以将现实空间中零散的计算机,组织起来,使其在逻辑空间中集中起来,使游戏的组织、开展变得轻松。
如此轻松而又安逸的休闲方式,使得越来越多的人尝试,甚至已经将电子游戏作为主要休闲方式,既然有如此多的人使用,那其中必然存在巨大的商机,即使人们不愿意为一个小小的休闲游戏花费金钱,但在游戏中添加广告、游戏相关服务也包藏了巨大的财富;当然电子游戏的制作如今已是空前的火爆,大大小小的游戏公司横空出世,都想在电子游戏制作这个行业里占据一席之地,而一款成功的电子游戏需要精心的策划、分析、设计,只有这样才能获得游戏中包藏的财富,以及做出一款真正能够让玩家娱乐、放松的游戏,而不是骗取玩家钱财的工具。
新世纪坦克大战课程设计报告
![新世纪坦克大战课程设计报告](https://img.taocdn.com/s3/m/51aeb68bd0d233d4b14e6938.png)
计算机学院计算机科学与技术专业《程序设计综合课程设计》报告(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.不同的效果画面,包括背景颜色的输出。
c语言坦克大战源代码
![c语言坦克大战源代码](https://img.taocdn.com/s3/m/9e3476b7d0f34693daef5ef7ba0d4a7302766ca9.png)
c语言坦克大战源代码/*游戏的整体思路大概是这样的?首先是欢迎界面,然后进入游戏界面,最后是gameover的界面。
本来打算做单人游戏,后来发现让敌人自主移动比较困难,所以改成了双人游戏?layer1控制按键是up,down,left,right,enter,player2控制按键是a,s,d,w,space。
*/#include<stdio.h>#include<string.h>#include<stdlib.h>#include<graphics.h>/*定义鼠标键值常量*/#define ESC 0x011b/*玩家1坦克按键*/#define UP 0x4800#define DOWN 0x5000#define LEFT 0x4b00#define RIGHT 0x4d00#define ENTER 0x1c0d#define up 0x1177/*玩家2坦克按键*/#define down 0x1f73#define left 0x1e61#define right 0x2064#define fire 0x246a/*定义游戏常量*//*双人游戏*/#define NUM 2/*坦克宽度*/#define WIDTH 20/*坦克的数量,宽度*//*定义global变量*******************************************//*子弹的属性*/struct myboom{/*如果子弹life为0则代表子弹没有发射*/int life;int x,y;int direction;};/*子弹们的初始属性*/struct myboom iboom[NUM]={{0},{0}};/*坦克的属性*/struct mytank{int life;int x,y;int direction;};/*坦克们的初始属性*/struct mytank itank[NUM]={{3,10*WIDTH,22*WIDTH},{1,440,40}};pre[NUM][2]={{10*WIDTH,22*WIDTH},{440,40}};/*xy[0]代表自己的坦克; xy[1]及以后代表敌军; 坦克坐标*//*存被子弹覆盖的图像*/void *boom_save[NUM];/*malloc开辟图像空间的大小*/int size;/*动画显示*/void *save[NUM];/*后来加上的。
坦克大战课程设计论文
![坦克大战课程设计论文](https://img.taocdn.com/s3/m/2bcbe5a5f524ccbff12184d2.png)
坦克大战游戏设计1.课程设计的目的随着手机的日益普及,java功能在移动设备上的实现及java 应用程序产生的影响力,对丰富人们的生活内容,提供便捷的咨询起着不可忽视的作用。
本项目介绍了坦克大战的基本构建方法、java的相关技术及本程序的结构分析和具体功能的实现。
游戏是在Eclipse3.2环境下编程。
本项目重点运用了图形化用户界面GUI,Thread多线程的有关知识,其中涉及了绘图工具的运用,事件处理操作以及图形的碰撞检测等知识点。
通过此课程设计,使学生巩固所学知识、培养学生动手能力,了解Java的面向对象的体系结构。
学生用Java语言设计一个完整的应用程序,综合应用所学知识完成软件的分析、设计、调试和总结,提高学生对Java语言的综合应用能力和解决问题的能力。
2.设计方案论证2.1设计思路本项目介绍了坦克大战的基本构建方法、java的相关技术及本程序的结构分析和具体功能的实现。
游戏是在Eclipse3.2环境下编程。
一、游戏基本元素:坦克,炮管,子弹,墙壁,地雷二、它的主要功能:(1)能够朝四个方向移动:上、下、左、右键。
(2) 按下鼠标左键发射普通子弹;按下鼠标右键发射散弹;子弹爆炸的效果,普通子弹和炮弹的效果(3)敌人能够移动(4)能够模拟爆炸(5)能够产生障碍(6)能够增长生命玩家控制主坦克(上方有血条的)的移动以及炮弹的发射。
若玩家将敌方坦克全部打掉则玩家胜;若期间由玩家控制的主坦克被打掉则视为玩家失败。
游戏中只有普通墙作为障碍物,玩家无法穿越它们并且普通子弹不能将墙打穿;但是玩家可以用炮弹将普通墙打掉。
桃心可以将坦克的血加满。
2.2简要的设计流程:键盘监听器2.2设计方法2.2.1构建游戏主类在主类中构造一个主Frame框架,设置它的大小和位置,并将其显示。
在主类中编写一段代码,构造一个窗口。
并添加窗口关闭的处理事件,将窗口设置成打小不可变。
主要代码如下:this.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});this.setResizable(false);2.2.2构建坦克类Tank构造主窗口中所需要的Tank类,并将坦克加到窗口中,实现坦克的四个方向的移动创建一个坦克类,用画图工具构造出简单的图形代表坦克,并将坦克加入到主窗口当中。
坦克大战游戏程序课程设计
![坦克大战游戏程序课程设计](https://img.taocdn.com/s3/m/c0712e29a21614791711288f.png)
《程序设计应用基础》课程设计计划书坦克大战游戏1引言学习了C语言程序设计之后,我们粗略的掌握了程序设计的基本思路和要求,为了更加熟练的掌握这门计算机语言,我们选择编译一个经典小游戏——坦克大战。
通过课程设计提高我们的动手能力,把理论知识运用到实践当中。
在课程设计中,C语言的语法和逻辑严谨,对于初学者而言,有时忘记一个逗号或者分号整个程序便运行不了,经过了反复的调试,修改,最终形成可执行的程序。
在这个过程中,通过不断的练习,我们对C语言的掌握程度有明显的提高,同时,也锻炼了我们的头脑,使我们的思维更加科学严谨。
2设计方案2.1设计思路坦克大战游戏,一共两关。
不同的关卡,游戏地图、敌方坦克出现的种类不一样。
敌方坦克地图上最多存在4辆,击杀后会出现新坦克直至补足4个,当击杀坦克一定数值则敌方新坦克不会再增加。
击杀完所有坦克则胜利过关。
己方坦克也有复活次数,用完则失败。
另地图正下方有己方老家,若被敌方坦克攻破则游戏失败。
3程序设计与实施3.1程序的主要模块整个程序分为里表两大部分。
里部分由41*41的int地图数组组成,每个元素代表了该以该数组元素行列下标为地图坐标y,x那个单元的情况,不同的地图障碍物在该数组有不同的值,坦克在地图上占3*3个单元,在地图数组内相应坐标的3*3个元素内也对应特殊的值。
由地图数组值可以读出该坦克信息。
表部分则是根据里部分的地图数组通过gotoxy和printf函数在命令行界面打印出相应字符以构成游戏界面的。
程序中的每个函数操作都是通过里部分(地图数组)判定,然后对里部分(地图数组)操作,再由里部改变外部,由gotoxy和printf函数将可视化界面呈现给玩家。
也就是游戏主体函数内里表部分是一起操作的,不分开。
对于函数分类,程序又可分为三大类。
一类游戏辅助函数。
一个子弹系统,一个坦克系统。
子弹和坦克分别都是独立运作的系统,有少量信息交换。
3.2 主函数及其流程图主函数包括打印地图,实现游戏内置调节游戏速度的功能,判断坦克类型,判断敌我坦克是否存活,判断游戏胜负。
坦克大战开发毕业设计(论文)
![坦克大战开发毕业设计(论文)](https://img.taocdn.com/s3/m/cc1982c36f1aff00bed51e21.png)
毕业设计(论文)坦克大战开发摘要进入新世纪以来,计算机游戏业蓬勃发展,已成为新世纪最热门的专业。
坦克大战是一款非常经典。
风靡全球,经久不衰的游戏。
1985年推出的坦克大战(Battle City)由13×13大小的地图组成,地形包括砖墙、海水、钢板、森林、地板5种,玩家作为坦克军团仅存的一支精锐部队的指挥官,为了保卫基地不被摧毁而展开战斗。
游戏以其出色的游戏性感染的一代又一代的玩家。
本程序主要由C#编写。
本文的坦克大战有完整的界面,能够实现人机大战,。
而且坦克大战剧情非常简单,游戏的主角在保护好城堡的前提下,消灭所有的敌人,所以非常容易上手。
本论文第一章是介绍国内外的游戏发展状况,第二章介绍坦克大战的总体设计,第三章是游戏涉及的技术问题,最后总结。
关键词:坦克大战;游戏;技术;代码第一章游戏的背景相信喜欢玩游戏的朋友都是从玩最初的“小霸王”,超级玛丽,坦克大战,等等一系列经典的小游戏开始,然后就是三国志之类的大型一点的,到现在的电脑游戏,单机游戏,到网络游戏,这么一个过程,游戏其实已经不知不觉的进入了我们的生活。
电脑游戏在当今,已经十分普遍了,游戏玩家也比较多。
特别是网络游戏,因为其剧情的有趣性,游戏画面的美观,招式的华丽,等一系列原因,吸引了不少游戏玩家,特别是3D网游的推出,使得网络游戏发展进入了一个新时期。
游戏是怎么发展起来的?国内外游戏的发展情况是什么样的呢?下面将会给你答案。
真正的电子游戏机产生于20世纪70年代。
1971年麻省理工学院的学生Nolan Bushnell设计了世界上第一个业务用游戏机(俗名街机),叫做《电脑空间》(Computer Space)。
《电脑空间》的主题是两个玩家各自控制一艘太空战舰围绕这具有强大引力的星球向对方发射导弹进行攻击。
两艘战舰在战斗的同时还必须注意克服引力,无论是被对方的导弹击中还是没有成功摆脱引力,飞船都会坠毁。
这台游戏机用一台黑白电视作为显示屏,用一个控制柄作为操作器,不过由于市场因素这款游戏以失败告终。
课程设计报告--坦克大战
![课程设计报告--坦克大战](https://img.taocdn.com/s3/m/c04b6f7dbcd126fff6050b26.png)
目录一.问题定义 (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键进行攻击,操作十分简单,界面友好,符合用户操作习惯。
坦克大战
![坦克大战](https://img.taocdn.com/s3/m/1339240a03d8ce2f006623bd.png)
《面向对象的编程技术》课程设计实验报告专业班级:计算机科学与技术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 ;//《定时器用法。
C大作业坦克大战
![C大作业坦克大战](https://img.taocdn.com/s3/m/14013a5bcc17552706220859.png)
C大作业坦克大战文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]#include<iostream>#include<>#include<>#include<>#include<>usingnamespacestd;HANDLEMutex=CreateMutex(NULL,FALSE,NULL);//互斥对象intGameOver=0;intlevel=0;intmap[23][23];//坦克种类,Normal为玩家坦克#defineNormal0#defineRed1#defineBlue2#defineGreen3//方向的宏定义#defineUp0#defineDown1#defineLeft2#defineRight3//地图标记的宏定义#defineEmpty0#definePlayer1#definePlayerBullet2#defineEnemyBullet3#defineEnemy4intKill;intKillRed;intKillGreen;intEnemyExist;voidSetPos(inti,intj)//设定光标位置{COORDpos={i,j};HANDLEOut=GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(Out,pos);}voidHideCurSor(void)//隐藏光标{CONSOLE_CURSOR_INFOinfo={1,0};HANDLEOut=GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorInfo(Out,&info);}intsharp[4][12]={{0,1,1,0,1,1,1,2,2,0,2,2},{0,0,0,2,1,0,1,1,1,2,2,1},{0,1,0,2,1,0,1,1,2,1,2,2},{0,0,0,1,1,1,1,2,2,0,2,1},};//此数组用来保存坦克各个方向的形状信息DWORDWINAPIBulletfly(LPVOIDlpParameter);//子弹函数申明voidUpdata();//更新界面信息函数申明classTank//坦克类{private:intDirection;//方向inthotpoint[2];//活动点intSpeed;//速度intFirePower;//火力public:Tank(intdir,inthot1,inthot2,inttyp,intspe,intfirepow)//构造函数{Direction=dir;hotpoint[0]=hot1;hotpoint[1]=hot2;Type=typ;Speed=spe;FirePower=firepow;}intType;//坦克的种类(详见宏定义)intID;//坦克在MAP中的标记(详见宏定义)intFireEnable;//是否可以开火intLife;//生命值voidRunning();//运行函数intJudge(intx,inty,intID);//判断是否可以绘制坦克voidDrawTank();//重绘坦克voidRedraw();//擦除坦克intGetSpeed()//获取速度{returnSpeed;}intGetFire()//获取火力{returnFirePower;}intGetDirection()//获取方向{returnDirection;}intGetHotX()//获取活动点坐标{returnhotpoint[0];}intGetHotY(){returnhotpoint[1];}voidIncreaseFire()//火力+{FirePower++;}voidIncreaseSpeed()//速度+{Speed++;}voidChangeDirection(intnewD)//改变方向{Direction=newD;}voidChangePos(intx,inty)//改变活动点{hotpoint[0]=x;hotpoint[1]=y;}};Tankplayer(Right,0,0,Normal,1,1);//玩家Tankenemy(Left,20,0,Red,1,1);//敌人voidTank::DrawTank()//绘制坦克{inti;intnx,ny;if(Type==Red)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREG ROUND_INTENSITY|FOREGROUND_RED);elseif(Type==Blue)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREG ROUND_INTENSITY|FOREGROUND_BLUE);elseif(Type==Green)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREG ROUND_INTENSITY|FOREGROUND_GREEN);elseif(Type==Normal)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREG ROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGRO UND_BLUE);for(i=0;i<6;i++){nx=hotpoint[0]+sharp[Direction][i*2];ny=hotpoint[1]+sharp[Direction][i*2+1];SetPos((ny+1)*2,nx+1);//利用sharp数组相对于点x,y绘制形状map[nx][ny]=ID;cout<<"■";}}voidTank::Redraw()//擦除坦克,原理同上{inti;intnx,ny;for(i=0;i<6;i++){nx=hotpoint[0]+sharp[Direction][i*2];ny=hotpoint[1]+sharp[Direction][i*2+1];map[nx][ny]=Empty;SetPos((ny+1)*2,nx+1);cout<<"";}}intTank::Judge(intx,inty,intdir)//判断当前是否可以绘制坦克{inti;intnx,ny;for(i=0;i<6;i++){nx=x+sharp[dir][i*2];ny=y+sharp[dir][i*2+1];if(nx<0||nx>=23||ny<0||ny>=23||map[nx][ny]!=Empty)//不能绘制,返回1return1;}return0;}voidTank::Running()//坦克运行函数{intnewD;//坦克的运行while(1){if(Life==0){EnemyExist=0;//敌人不存在return;}if(GameOver==1)return;if(FireEnable==1&&GameOver==0)//如果可以开火{WaitForSingleObject(Mutex,INFINITE);//线程拥有互斥对象FireEnable=0;//设为不可开火HANDLEbullet=CreateThread(NULL,0,Bulletfly,&ID,0,NULL);//创建子弹线程CloseHandle(bullet);ReleaseMutex(Mutex);//释放互斥对象Sleep(100);}WaitForSingleObject(Mutex,INFINITE);//线程拥有互斥对象srand((int)time(0));newD=rand()%4;if(newD==Up)//随机出新的方向并重新绘制坦克{Redraw();if(Judge(hotpoint[0]-1,hotpoint[1],newD)==0){hotpoint[0]--;Direction=newD;}else{if(Judge(hotpoint[0],hotpoint[1],newD)==0)Direction=newD;}}elseif(newD==Down){Redraw();if(Judge(hotpoint[0]+1,hotpoint[1],newD)==0){hotpoint[0]++;Direction=newD;}else{if(Judge(hotpoint[0],hotpoint[1],newD)==0)Direction=newD;}}elseif(newD==Left){Redraw();if(Judge(hotpoint[0],hotpoint[1]-1,newD)==0){hotpoint[1]--;Direction=newD;}else{if(Judge(hotpoint[0],hotpoint[1],newD)==0)Direction=newD;}}elseif(newD==Right){Redraw();if(Judge(hotpoint[0],hotpoint[1]+1,newD)==0){hotpoint[1]++;Direction=newD;}else{if(Judge(hotpoint[0],hotpoint[1],newD)==0)Direction=newD;}}if(GameOver==0&&Life!=0)DrawTank();ReleaseMutex(Mutex);//释放互斥对象Sleep(500-80*Speed);}}/*********************子弹线程函数*******************/ DWORDWINAPIBulletfly(LPVOIDlpParameter){int*ID=(int*)lpParameter;//ID用来获取发射子弹坦克的IDintPos[2];//子弹活动点intdirection;intSpeed;inttype;inthit=0;//击中标记intoldx,oldy;//旧活动点intflag=0;//子弹是否有移动的标记if(*ID==Player)//如果是玩家坦克{type=PlayerBullet;direction=();Speed=();Pos[0]=();Pos[1]=();}elseif(*ID==Enemy)//如果是敌人坦克{type=EnemyBullet;direction=();Speed=();Pos[0]=();Pos[1]=();}if(direction==Up)//根据坦克的位置和方向确定子弹的初始坐标{Pos[0]--;Pos[1]++;}elseif(direction==Down){Pos[0]+=3;Pos[1]++;}elseif(direction==Left){Pos[0]++;Pos[1]--;}elseif(direction==Right){Pos[0]++;Pos[1]+=3;}//子弹的运行while(1){WaitForSingleObject(Mutex,INFINITE);//这个不再注释了。
坦克大战
![坦克大战](https://img.taocdn.com/s3/m/157e9509fc4ffe473368ab2e.png)
攀枝花学院课程设计题目:坦克大战程序设计院(系):数学与计算机学院年级专业: 2015级网络工程姓名:陈波学号: 201510803075 指导教师:朱正国二〇一六年七月五日攀枝花学院教务处制攀枝花学院本科学生课程设计任务书注:任务书由指导教师填写。
课程设计(论文)指导教师成绩评定表摘要坦克大战是一款适用于青少年娱乐放松的游戏,不仅有利于人们放松还能避免对游戏的上瘾。
该游戏简单,操作性低,随着现在各种网络游戏的盛行有着一款既不上瘾又能缓解人们的压力,对于当今社会很是重要。
坦克大战利用了计算机图形学进行程序设计,也利用C++语言绘图函数实现坦克大战图形界面演示过程。
同时,通过C++语言实现图形学的绘图,程序控制,以及区域填充,并根据坦克大战的移动和攻击全过程演示。
关键词坦克大战,绘图,程序控制,界面演示。
目录摘要 (I)1 需求分析 (3)1.1需求概述 (3)1.2需求环境 (3)1.3功能描述 (3)2 概要设计 (5)2.1程序功能模块 (5)2.2程序流程图 (6)3 详细设计 (7)3.1游戏开始 (7)3.1.1代码功能 (7)3.1.2 功能实现代码 (8)3.2坦克的移动过程 (10)3.2.1代码功能 (10)3.2.2 功能实现代码 (11)3.3坦克开炮和敌方坦克的构造 (17)3.3.1代码功能 (17)3.3.2功能实现代码 (19)3.4地图的加载和创建父类-CW EAPON类 (23)3.4.1代码功能 (23)3.4.2 功能实现代码 (25)3.5子弹链表和显示游戏信息 (30)3.5.1代码功能 (30)3.5.2 功能实现代码 (32)4 测试与运行 (36)结束语 (37)参考文献 (38)1 需求分析1.1 需求概述坦克大战程序设计是计算机图形学中图形变换的内容之一。
而图形学中的图形变换的概念是由简单图形生成复杂图形,可用二维图形表示三维形体,甚至可以对静态图形经过快速变换而获得图形的动态显示效果。
JAVA课程设计坦克大战(含代码)
![JAVA课程设计坦克大战(含代码)](https://img.taocdn.com/s3/m/f6c87db4294ac850ad02de80d4d8d15abe230075.png)
JAVA课程设计坦克⼤战(含代码)Java程序课程设计任务书项⽬名称:坦克⼤战游戏的设计与开发英⽂名:Tank Battle1、主要内容:1、基于java的游戏开发与设计的分析;2、坦克⼤战游戏的架构搭建与设计实现;3、游戏可以通过⽤户可以注册新⽤户,修改⾃⼰的密码、个⼈资料。
2、具体要求1、系统的功能要求:(⼀)实现玩家试玩游戏功能,屏蔽⽤户注册和登陆功能(空功能)(⼆)玩家具备⼀个或者两个备选坦克战车(三)玩家可以选择⼀个到两个关卡进⾏作战(四)玩家可以选择两个敌对阵营中的⼀个加⼊,与其他AI战车坦克并肩作战(五)胜利判定条件为:时间制、全杀制(可选)(六)⾄少提供两个可以⾃由切换的视⾓(七)⾄少提供⼀种炮弹类型(⼋)假定项⽬:如果⽤户注册,登陆功能能够顺利做好,则提供⼀个玩家分数上传和排⾏榜功能。
2、学习并掌握以下技术:数据库的JDBC连接,JA V A编程语⾔,MySQL数据库的应⽤;JSP的开发与运⽤3、熟练使⽤以下开发⼯具:JCreator,Myeclipse ,MySQL ,PowerDesigner 等3、进度安排:12⽉28⽇~ 12 ⽉29 ⽇:查阅资料,完成⽂献综述,任务书;12⽉29 ⽇~ 12⽉31⽇:进⾏系统的需求分析与设计;1⽉1⽇~ 1⽉3⽇:根据分析进⾏各个模块程序的设计与创建;1⽉4⽇~ 1 ⽉6⽇:完成各个模块的程序编写;1⽉7 ⽇~ 1 ⽉8 ⽇:完成全部程序的编写及系统测试;1⽉9⽇~ 1 ⽉10⽇:完成课程设计报告的编写,答辩;摘要随着Java语⾔的不断发展和壮⼤,现在的Java已经⼴泛的应⽤于各个领域,包括医药,汽车⼯业,⼿机⾏业,游戏,等等地⽅。
Java游戏的开发为满⾜⼈们娱乐所需⽽设计。
本游戏为坦克⼤战游戏,是基于Java的图形⽤户界⾯⽽开发的,可以放松⼼情的⼩游戏。
游戏从系统操作简便、界⾯友好、灵活、上⼿即会的基本要求出发,完成整款游戏的开发。
坦克大战课程设计
![坦克大战课程设计](https://img.taocdn.com/s3/m/9e67cc627e21af45b307a82e.png)
《面向对象的编程技术》课程设计实验报告学院:计算机学院班级:软件工程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个选择项目,开始游戏,游戏介绍和退出游戏。
c语言编写坦克大战源代码
![c语言编写坦克大战源代码](https://img.taocdn.com/s3/m/c5e8101e964bcf84b9d57ba9.png)
#include "tank.h"#include "ConOperator.h"#include <time.h>#include <windows.h>#include <conio.h>#include <iostream>using namespace std;TankGame::TankGame(int w, int h){// 设定当前关数no = 1;// 设定游戏整体高宽wide = w;high = h;HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);COORD sizePos = {2 * wide, high};SetConsoleScreenBufferSize(hStdOut, sizePos);// 分配游戏空间状态表gameSpace = new GameSpace*[high];for (int i = 0; i != high; i++)gameSpace[i] = new GameSpace[wide];// 添加围墙wall = new Wall(gameSpace, wide, high);wall->draw();}void TankGame::load_init(){// 初始化游戏空间for (int y = 1; y != high-1; y++) {for (int x = 1; x != wide-1; x++) {gameSpace[y][x].have = false;gameSpace[y][x].kind = 0;gameSpace[y][x].no = 0;}}// 添加地图map.load(gameSpace, no);// 初始化自己坦克me.init_xy();me.trans_direction(1);me.set_no(0);me.init_move(gameSpace, wide / 2 - 2, high - 5);// 按顺序诞生敌人坦克creatPlace = 0;for (int i = 0; i != 3; i++) {freezeTime[i] = REBIRTHTIME;enemy[i].init_xy();enemy[i].set_kind(2);enemy[i].set_no(i+1);reset(enemy[i]);}// 数目初始化leftCount = 17;existCount = 3;// 显示图片me.draw_tank();for (int i = 0; i != 3; i++)enemy[i].draw_tank();map.draw();}TankGame::~TankGame(){if (wall)delete wall;if (gameSpace) {for (int i = 0; i != high; i++)delete[] gameSpace[i];delete[] gameSpace;}}void TankGame::reset(Tank& tank){bool success = false;int t = 3;while (t && !success) {creatPlace++;if (creatPlace == 4)creatPlace = 1;// 诞生地点选择switch (creatPlace) {case 1:tank.trans_direction(3); //朝下if (tank.reset(gameSpace,1,1))success = true;break;case 2:tank.trans_direction(3);if (tank.reset(gameSpace,wide / 2 - 2, 1))success = true;break;case 3:tank.trans_direction(3);if (tank.reset(gameSpace,wide - 4, 1))success = true;break;}if (!success)t--;}}void TankGame::start(){char command;enter_picture(command);if (command != ENTER)return;while (me.blood > 0) {// init data for runingload_init();// run a taskruning_a_task();// determine why returnif (me.blood > 0) {no++;if (no > map.total) {success_gameover();break;}char command;turn_to_next_task(command);if (command != ENTER)break;}else game_over();}}//voidvoid TankGame::runing_a_task(){while ((leftCount || existCount) && me.blood) {clock_t now = clock();char command = -1; // 主人命令while (clock() - now < TIME_UNIT) // 小于一个时间片,暂停update_keyBoard_char(command);/*更新敌人坦克*/for (int i = 0; i != 3; i++) {if (enemy[i].blood == 0)continue;if (enemy[i].freezeTime == 0) {enemy[i].rand_direction(gameSpace); // 产生随机方向}else {if (enemy[i].speed == 0) {enemy[i].move(gameSpace);if (bullet[i+1].disapper) {int shot = -1;bullet[i+1] = enemy[i].rand_shot(gameSpace,i+1, shot);if (shot == 0)me.be_shot(gameSpace);bullet[i+1].registration(gameSpace);}enemy[i].freezeTime--;} else {enemy[i].speed--;}}}/*更新自己坦克*/if (command >=0 && command < 4) {me.trans_to_direction(command);me.move(gameSpace);}/*更新子弹*/for (int i = 0; i !=4; i++) {if (!bullet[i].disapper) { // 存在的子弹int shot;bullet[i].move(gameSpace, shot); // 运行,是否射中if (shot == 0)me.be_shot(gameSpace);else if (shot >= 1 && shot <= 3) {enemy[shot-1].be_shot(gameSpace);existCount--;} else if (shot >= 7 && shot <= 10) {bullet[shot-7].unregistration(gameSpace);bullet[shot-7].clear();bullet[shot-7].init(bullet[shot-7].kind);}}}/*自己产生子弹*/if (bullet[0].disapper) {if (command == 32) {int shot;bullet[0] = me.make_bullet(gameSpace,0, shot);if (shot >= 1 && shot <= 3) {enemy[shot-1].be_shot(gameSpace);existCount--;}bullet[0].registration(gameSpace);}}/*诞生缺损敌人*/if (leftCount > 0) {for (int i = 0; i != 3; i++) {if (enemy[i].blood == 0) {if (freezeTime[i] == 0) {freezeTime[i] = REBIRTHTIME;reset(enemy[i]);existCount++;leftCount--;}else freezeTime[i]--;}}}}}void TankGame::update_keyBoard_char(char& c){if (_kbhit()) {c = getch();if (c == -32) {c = getch();if (c != UP && c != DOWN && c != LEFT && c != RIGHT)c = -1;else if (c == RIGHT)c = 0;else if (c == UP)c = 1;else if (c == LEFT)c = 2;elsec = 3;}elsec = 32;}}void TankGame::enter_picture(char &command){string captions[6];captions[0] = "◥◣◢◤■■■■■◥◣◢◤";captions[1] = " ◥◣◢◤◢◤◥◣◢◤";captions[2] = " ◥◣◢◤◢◤◥◣◢◤";captions[3] = " ◢◤◢◤◢◤◥◣";captions[4] = " ◢◤◢◤◢◤◥◣";captions[5] = " ◢◤■■■■■◢◤◥◣";string s = " ";color(0x0e);for (int i = 0; i != 6; i++)grid(7, 6 + i, captions[i]);Frame frame(30,15);frame.draw_frame(4,19,0x09);string sentence[3];sentence[0] = "This small game is made by yzx in 2010.";sentence[1] = "Wlecome to play it.";sentence[2] = "All Rights Reserved.";color(0x0e);for (int i = 0; i != 3; i++) {for (int k = 0; k != sentence[i].size(); k++) {grid(14+k,21+2*i,sentence[i][k]);sleep(50);}sleep(1000);}grid(7, 28,"Enter : 开始ESC : 退出");while (true) {if (_kbhit()) {command = getch();if (command == ENTER || command == ESC)break;}}// clear screen picture in wallclear_picture();}void TankGame::turn_to_next_task(char& command){clear_picture();color(0x0e);grid(18, 20, "第");grid(20, 20, no);grid(22, 20, "关");while (true) {if (_kbhit()) {command = getch();if (command == ENTER || command == ESC)break;}}grid(18, 20," ");}void TankGame::success_gameover(){clear_picture();Frame frame(30,15);frame.draw_frame(4,10,0x09);string sentence[3];sentence[0] = "Congratulations for Successfully finishing all tasks";sentence[1] = "Thank you for using it deeply.";sentence[2] = "And welcome to use it next time.";color(0x0e);for (int i = 0; i != 3; i++) {for (int k = 0; k != sentence[i].size(); k++) {grid(12+k,14+2*i,sentence[i][k]);sleep(50);}sleep(1000);}while (true) {if (_kbhit()) {char command = getch();if (command == ENTER || command == ESC)break;}}}void TankGame::game_over(){clear_picture();Frame frame(30,15);frame.draw_frame(4,15,0x09);string sentence[4];sentence[0] = "Game over, but you can try it again.";sentence[1] = "Thank you for using it deeply.";sentence[2] = "And welcome to use it next time.";sentence[3] = "All rights reserved.(Violators will be prosecuted.) .";color(0x0e);for (int i = 0; i != 4; i++) {for (int k = 0; k != sentence[i].size(); k++) {grid(13+k,18+2*i,sentence[i][k]);sleep(50);}sleep(1000);}while (true) {if (_kbhit()) {char command = getch();if (command == ENTER || command == ESC)break;}}}void TankGame::clear_picture(){int cirX = wide / 2;int cirY = high / 2;int depth = cirY > cirX ? cirY + 2 : cirX + 2;int lx, rx, uy, by;int l, r, u, b;for (int i = 0; i != depth; i++) {lx = cirX - i;rx = cirX + i;uy = cirY - i;by = cirY + i;uy <= 0 ? u = 1 : u = uy;by >= high - 1 ? b = high - 2 : b = by;lx <= 0 ? l = 1 : l = lx;rx >= wide -1 ? r = wide - 2 : r = rx;if (rx < wide - 1) {for (int k = u; k <= b; k++)grid(rx, k, " ");}if (lx > 0) {for (int k = u; k <= b; k++)grid(lx, k, " ");}if (by < high - 1) {for (int k = l; k <= r; k++)grid(k, by, " ");}if (uy > 0) {for (int k = l; k <= r; k++)grid(k, uy, " ");}}}void TankGame::test(){for (int y = 0; y != 40; y++) {for (int x = 0; x != 40; x++) {if (gameSpace[y][x].have)// && gameSpace[y][x].kind == 3)grid(x, 42+y, (char)gameSpace[y][x].no);elsegrid(x, 42+y, " ");}}}。
funcode C++课程设计_坦克大战
![funcode C++课程设计_坦克大战](https://img.taocdn.com/s3/m/e563cb3fcc175527072208d3.png)
实用标准课程设计一坦克大战一、游戏介绍相信大部分同学都玩过或看过“坦克大战”这款经典游戏。
现在,就由我们自己动手来开发它。
只要大家具备了C++语言和面向对象的基础知识,然后按照实验指南的指导一步一步进行下去,相信我们每个同学都能把这款经典游戏做出来。
二、实验目标综合运用C++及其面向对象的知识开发一款小游戏。
三、实验内容在一个战场上,玩家控制坦克,消灭敌方坦克,并防止敌方坦克摧毁我方基地。
游戏的具体要求如下:1、游戏有一个初始页面,如下图。
2、按下任意键开始游戏,玩家控制坦克在战场上穿梭,碰到墙时,不能通过。
3、敌方坦克自由移动,每隔2秒改变一个方向,每隔3秒发射一发子弹。
4、敌方坦克每隔5秒出现一辆,从屏幕上方的左、中、右三个位置依次出现。
5、当玩家被消灭或者我方基地被摧毁或者游戏时间大于30秒的时候,游戏结束。
游戏开始前上海锐格软件有限公司1进入游戏四、游戏的整体框架五、实验指南实验准备打开FunCode,创建一个新的C++项目。
注意:项目名称必须为英文和数字,且不能有空格。
点击“项目”→“导入地图模板”,从对话框中选取名称为TankWar的模板导入。
导入成功后,界面如下:实验一游戏开始【实验内容】1、设置游戏标题2、按空格键,提示图片消失,游戏进入开始状态.【实验运行结果】2上海锐格软件有限公司3游戏开始前按下空格键后【实验思路】按下空格键是键盘按下事件,可在CSystem::OnKeyDown 函数中编写响应代码。
为了保证程序结构的清晰、一致,更好的办法是在CGameMain 类中添加一个相应的键盘按下事件处理函数,然后在CSystem::OnMouseClick 函数中进行调用。
g_GameMain 是CGameMain 类的对象,它是全局变量,在程序运行时最先被创建。
【实验指导】1、C++程序的执行入口是主函数。
FunCode 的主函数名称叫WinMain ,写在Main.cpp文件中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计一坦克大战一、游戏介绍相信大部分同学都玩过或看过“坦克大战”这款经典游戏。
现在,就由我们自己动手来开发它。
只要大家具备了C++语言和面向对象的基础知识,然后按照实验指南的指导一步一步进行下去,相信我们每个同学都能把这款经典游戏做出来。
二、实验目标综合运用C++及其面向对象的知识开发一款小游戏。
三、实验内容在一个战场上,玩家控制坦克,消灭敌方坦克,并防止敌方坦克摧毁我方基地。
游戏的具体要求如下:1、游戏有一个初始页面,如下图。
2、按下任意键开始游戏,玩家控制坦克在战场上穿梭,碰到墙时,不能通过。
3、敌方坦克自由移动,每隔2秒改变一个方向,每隔3秒发射一发子弹。
4、敌方坦克每隔5秒出现一辆,从屏幕上方的左、中、右三个位置依次出现。
5、当玩家被消灭或者我方基地被摧毁或者游戏时间大于30秒的时候,游戏结束。
游戏开始前进入游戏四、游戏的整体框架五、实验指南实验准备打开FunCode,创建一个新的C++项目。
注意:项目名称必须为英文和数字,且不能有空格。
点击“项目”→“导入地图模板”,从对话框中选取名称为TankWar的模板导入。
导入成功后,界面如下:实验一游戏开始【实验内容】1、设置游戏标题2、按空格键,提示图片消失,游戏进入开始状态.【实验运行结果】游戏开始前按下空格键后【实验思路】按下空格键是键盘按下事件,可在CSystem::OnKeyDown函数中编写响应代码。
为了保证程序结构的清晰、一致,更好的办法是在CGameMain类中添加一个相应的键盘按下事件处理函数,然后在CSystem::OnMouseClick函数中进行调用。
g_GameMain是CGameMain类的对象,它是全局变量,在程序运行时最先被创建。
【实验指导】1、C++程序的执行入口是主函数。
FunCode的主函数名称叫WinMain,写在Main.cpp文件中。
CSystem::SetWindowTitle是设置程序运行窗口标题的函数,修改如下:CSystem::SetWindowTitle("坦克大战");2、参考CSystem::OnKeyDown函数,为CGameMain类创建一个OnKeyDown函数。
CGameMain类的头文件是LessonX.h文件,实现代码写在LessonX.cpp文件中。
因此,先在LessonX.h文件对函数进行声明。
函数的返回值和参数列表都与CSystem::OnKeyDown函数保持一致。
访问权限应该是public。
代码如下:voidOnKeyDown(constintiKey,constboolbAltPress,constboolbShiftPress,cons tboolbCtrlPress);3、接着,在Lesson.cpp文件中对该函数进行定义:voidCGameMain::OnKeyDown(constintiKey,constboolbAltPress,constboolbShif tPress,constboolbCtrlPress){}4、在CSystem::OnKeyDown函数(Main.cpp文件中)调用CGameMain::OnKeyDown函数,并将自己的参数传递给该函数。
g_GameMain是是CGameMain类的对象,它是全局变量,在程序运行时最先被创建。
因此,我们可以用g_GameMain调用自己的成员函数OnKeyDown。
g_GameMain.OnKeyDown(iKey,bAltPress,bShiftPress,bCtrlPress);5、FunCode程序运行时,当发生键盘按下事件,程序首先调用并执行CSystem::OnKeyDown函数,然后由CSystem::OnKeyDown函数调用并执行CGameMain::OnKeyDown函数。
因此,键盘按下事件的响应代码我们在CGameMain::OnKeyDown函数中编写即可。
6、我们要处理的两个精灵如下图,它们的名称分别是splash和start。
我们需要创建两个CSprite类对象与这两个精灵绑定。
7、在CGameMain类中声明两个CSprite*类型,根据面向对象的封装性原理,成员变量的访问权限应该是private。
代码应该写在哪个文件,请参看前面的实验步骤。
CSprite*m_pSplash;CSprite*m_pStart;在CGameMain类的构造函数中,对上面两个指针变量进行初始化。
通过调用CSprite 的构造函数,将精灵和精力对象绑定在一起。
m_pSplash=newCSprite("splash");m_pStart=newCSprite("start");8、最后,我们在CGameMain::OnKeyDown函数中处理空格键按下事件。
if(0==GetGameState()){if(iKey==KEY_SPACE){m_iGameState=1;}}KEY_SPACE是枚举变量KeyCodes的成员,表示空格键。
KeyCodes定义在CommonClass.h文件中。
该枚举变量定义了全部的键盘值。
注意:必须将m_iGameState的值改为1。
当GameMainLoop函数再次执行时,根据m_iGameState 的值调用并执行GameInit函数,游戏进入开始状态。
进入游戏开始状态时,调用CSprite类的SetSpriteVisible函数将精灵图片设置为不可见。
在GameInit函数中添加代码:m_pSplash->SetSpriteVisible(false);m_pStart->SetSpriteVisible(false);9、程序执行完CGameMain::GameInit函数后,执行CGameMain::SetGameState(2),将m_iGameState的值改为2,游戏进入运行状态。
10、在CGameMain类的析构函数中delete本实验创建的指针对象,以释放分配的内存。
CGameMain::~CGameMain(){deletem_pSplash;deletem_pStart;}11、编译并运行程序,然后按下空格键,看看运行效果。
实验二坦克运动【实验内容】1、创建坦克类CTankPlayer;2、游戏开始时,将坦克放置于(0,0)的坐标上;3、通过按键WSAD控制坦克上下左右运动;4、坦克运行到黑色区域边界时不能继续前进。
【实验运行结果】在区域内运动运动到区域边界【实验思路】坦克也是精灵,但是它具备一些自己独特的功能,比如通过键盘控制运动、开炮等。
因此我们可以创建一个新的类CTankPlayer类,并让它继承CSprite类。
通过WASD键,控制坦克做相应的的上左下右运动。
按下某个键,给坦克设置相应方向的运动速度;松开时,将该方向的速度设为0,表示停止运动。
屏幕上最内部的黑色区域为玩家坦克的活动区域,左上角坐标为(-26,-22),右下角坐标为(26,22)。
当坦克运动到该区域边界时,坦克不能继续前进。
【实验指导】1、通过类向导创建CTankPlayer类,其继承于CSprite类。
以VC++6.0为例:第一步、点击菜单“插入”-〉“新建类”。
第二步、在“NewClass”对话框中输入类名和父类名。
第三步、点击“Change”按钮,在新对话框中修改CTankPlayer类的头文件和cpp 文件的路径。
将头文件保存到项目文件夹的\SourceCode\Header文件夹中,将cpp文件保存到项目文件夹下的\SourceCode\Src文件夹中。
这里需要特别注意的是创建文件路径的问题,所有的.h头文件应该在项目文件夹\SourceCode\Header中,所有的.cpp源文件应该放在项目文件夹下的\SourceCode\Src文件夹中。
2、为CTankPlayer类添加m_iDir,m_fSpeedX,m_fSpeedY,m_iHp四个成员变量(成员变量。
用来表示坦克在X轴和Y轴方向上的速度以及运行的方向,并且在构造函数中初始化为0。
这里规定,m_iDir的值为0、1、2、3,分别表示上、右、下、左。
成员函数的声明和定义如何添加,访问权限是什么,可参考实验一,下文不再继续提示),分别表示运动方向、X轴、Y轴速度以及血量值。
本文档的命名采用匈牙利命名法,m_表示类成员变量,i表示整型,f表示float型,sz表示字符指针,g_表示全局变量等。
同时需要在public权限下定义获取和设置这些变量的Get和Set方法://set方法voidSetHp(inthp){m_iHp=hp;}voidSetDir(intdir){m_iDir=dir;}voidSetSpeedX(floatspeedX){m_fSpeedX=speedX;}voidSetSpeedY(floatspeedY){m_fSpeedY=speedY;}//get方法intGetHp(){returnm_iHp;}intGetDir(){returnm_iDir;}floatGetSpeedX(){returnm_fSpeedX;}floatGetSpeedY(){returnm_fSpeedY;}3、CTankPlayer的父类是CSprite类(具体声明查看CommonClass.h),构造函数为CSprite(constchar*szName)。
4、所以通过上边方法自动生成的类,如果系统自动生成构造函数CTankPlayer(void),删除掉它以及在CTankPlayer.cpp中自动生成的对构造函数实现的代码:CTankPlayer::CTankPlayer(void){}再为CTankPlayer类添加新的构造函数:CTankPlayer(constchar*szName)。
CTankPlayer::CTankPlayer(constchar*szName):CSprite(szName)//对构造函数进行实现{m_iDir=0;m_fSpeedX=0.f;m_fSpeedY=0.f;m_iHp=2;}子类对象创建时,要先调用父类的构造函数完成父类部分的构造。
如果父类没有默认构造函数,子类的构造函数必须显示调用父类的构造函数。
CTankPlayer构造函数调用CSprite类构造函数,并将参数szName的值传递给它,从而将名称为szName 的精灵图片与CTankPlayer对象绑定起来。
5、为CTankPlayer类添加Init函数,该函数主要用来完成该类的初始化工作。
这里,先调用setHp方法设置血量。
然后调用父类的SetSpritePosition函数将坦克精灵设置在屏幕中央(0,0)处。