funcode C++课程设计_坦克大战

合集下载

10 C语言课程设计_坦克大战(提高篇)

10 C语言课程设计_坦克大战(提高篇)

C语言课程设计--坦克大战一、游戏介绍玩家坦克与敌方坦克在街道中进行巷战,玩家坦克被击中、玩家指挥部被击中或游戏时间到,一局游戏结束。

二、实验目的综合应用C语言知识和设计知识开发一款小游戏。

三、实验内容初始界面如下图。

按下空格键后游戏开始,“空格开始”消失,载入地图,并把玩家坦克设置在指挥部左侧。

游戏时间到,比如30秒,玩家坦克被敌方坦克摧毁,或者玩家指挥部被摧毁,一局游戏结束,游戏回到初始界面,并显示上一局的分数。

游戏区域为下图中最内部的黑色区域,左上角坐标[-26, -22],右下角坐标为[26, 22]。

墙为正方形,边长为4,坦克也是正方形,比墙略小一点。

玩家用WASD键控制坦克上、下、左、右运行,按J键开炮。

玩家坦克碰到墙就停下来,需要调转方向才能继续前进。

玩家坦克开炮,一炮就能摧毁一块墙,或者一辆敌方坦克。

玩家没摧毁一辆敌方坦克,加1分。

玩家指挥部被坦克或者炮弹(不管玩家还是敌方)碰上,都会被摧毁。

每隔几秒钟,比如3秒,就会产生一辆敌方坦克。

敌方坦克每隔一段时间,比如1秒,就自动开炮。

敌方坦克遇到墙就会停下来。

停下来的坦克,前方的墙如果被摧毁了,又能继续前进。

每隔几秒钟,比如2秒,敌方坦克就会顺时针变换一个方向前进。

四、实验准备本实验中可能用到的C 语言标准库函数和FunCode API Stdio.hMath.hString.hFunCode API原图的角度获得的旋转角度即为两张图片的五、程序初步设计如果程序规模比较小的时候,我们习惯一上手就写代码,边写边调整。

但是当程序越来越大,代码越来越多的时候,如果我们还用这种方式编程,程序写到一半的时候,你可能会恨不得重写一遍。

此,我们在写代码之前,先把程序功能细化一下,并初步设计好程序结构,包括数据结构和自定义函数。

有了比较清晰的思路以后,再开始开发程序。

在本项目中,我们要操作的对象有6个:玩家坦克、敌方坦克、玩家子弹、敌方子弹、墙、玩家指挥部。

funcode C++课程设计_坦克大战

funcode C++课程设计_坦克大战

实用标准课程设计一坦克大战一、游戏介绍相信大部分同学都玩过或看过“坦克大战”这款经典游戏。

现在,就由我们自己动手来开发它。

只要大家具备了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文件中。

C语言完整游戏项目坦克大战详细代码

C语言完整游戏项目坦克大战详细代码

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坦克大战
测试报告
测试游戏功能是否正常
检查游戏性能是否达标
调试游戏中的错误和问题
优化游戏性能和体验
游戏测试:成功运 行,无严重错误
调试过程:定位并 修复了若干问题
测试结果:性能稳 定,符合预期
结论:游戏测试和 调试工作顺利完成
游戏优化和改进
优化算法:采用更高效的算法,减 少计算量,提高游戏运行速度。
完 成 TA N K 坦 克 大 战 游 戏 的 程 序设计和实现
学会使用汇编语言进行编程
掌握游戏的基本规则和玩法
游戏规则和玩法
游戏目标:击败所有敌人,保护基地 角色设定:玩家扮演坦克,有生命值和弹药量限制 武器装备:多种武器可供选择,不同武器有不同的攻击力和射程 游戏地图:多个关卡,每个关卡有不同的地形和敌人配置
添加标题
游戏状态管理:游戏状态包括开始、进行中和结束三个状态。在开 始状态下,玩家可以开始游戏;在进行中状态下,玩家可以操作坦 克移动和射击;在结束状态下,游戏结束并给出评价。
添加标题
游戏角色行为:游戏角色包括玩家坦克和敌方坦克。玩家坦克的行 为包括移动和射击;敌方坦克的行为包括移动和攻击。
游戏界面布局:简洁明了,易于操作 角色设计:形象生动,符合游戏主题 场景设计:丰富多样,增加游戏趣味性 特效设计:绚丽多彩,提升游戏体验感
添加标题
添加标题
添加标题
添加标题
敌方角色:游戏中的敌方坦克种类多 样,包括轻型坦克、重型坦克、自行 火炮等,具有不同的攻击和防御能力, 对玩家构成威胁。
游戏辅助角色:游戏中的一些辅助角 色,如地图、弹药补给点等,为玩家 提供地图信息和弹药补给服务,帮助 玩家更好地进行游戏。
游戏程序设计和实 现
游戏整体架构:包 括游戏的主要功能 模块和各模块之间 的关系

坦克大战详细设计说明书

坦克大战详细设计说明书

RIA编程技术课程大作业11软工2班傅佳杰目录1绪论…………………………………………………………………………………1.1开发背景………………………………………………………………………1.2开发工具………………………………………………………………………2程序设计……………………………………………………………………………2.1主要设计思路……………………………………………………………………3程序简介………………………………………………………………………3.1程序一些类的介绍……………………………………………………………4程序运行与测试……………………………………………………………………4.1程序开始………………………………………………………………………4.2程序界面………………………………………………………………………4.3系统启动测试………………………………………………………………4.4子弹发射测试………………………………………………………………4.5玩家移动测试………………………………………………………………1绪论1.1开发背景随着信息社会的迅猛发展,人们对游戏的要求也越来越1.2开发工具记事本2程序设计2.1主要设计思路用Canvas进行图形或图像绘制;支持图形或图像移动;支持键盘控制;应实现功能基本完整的单机游戏系统。

3程序类的介绍3.1有关类的介绍Tank类1、Tank类的主要属性有:function Tank(x,y,direct,color){this.x=x;this.y=y;this.speed=1;this.isLive=true;this.direct=direct;this.color=color;1、drawTank ()方法drawTank()方法根据坦克的类型不同可以画出不同类型的坦克和不同方向的坦克2、fire()方法fire()方法的功能是实现打出一颗子弹,fire()方法调用了画坦克的颜色变量c ,画出与坦克一样颜色的子弹,以区别子弹是那一方发出来的。

新世纪坦克大战课程设计报告

新世纪坦克大战课程设计报告

计算机学院计算机科学与技术专业《程序设计综合课程设计》报告(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语言坦克大战最新代码
} key=bioskey(0);
judge_tank_my(map,key);/*判断己方坦克运动函数*/
} aaa: ; } void map_all(int map[15][15])/*初始化地图函数*/ { int i,j; for(i=0;i<15;i++)
for(j=0;j<15;j++) switch(map[j][i]) { case 0: break; case 5:map_wall(i,j);break;/*地形*/ case 6:map_steel(i,j);break; case 7:map_water(i,j);break; case 8:map_border(i,j);break; case 9:map_base(i,j);break; }
void uptank(int i,int j,int color);/*画坦克函数*/ void downtank(int i,int j,int color); void lefttank(int i,int j,int color); void righttank(int i,int j,int color);
/* Note:Your choice is C IDE */ #include "graphics.h" #include "stdlib.h" #include "stdio.h"
#define a_UP 0x4800/*定义A坦克按键*/ #define a_DOWN 0x5000 #define a_LEFT 0x4b00 #define a_RIGHT 0x4d00 #define a_shoot 0x1c0d
void judge_moveshootway(int map[15][15],int i);/*炮弹运动时判断炮弹方 向函数*/ void judge_shoot(int m,int map[15][15],int i);/*判断炮弹打中的物体函数 */ void judge_shootway(int map[15][15],int i);/*炮弹打中物体时判断方向函 数*/

c语言坦克大战源代码

c语言坦克大战源代码

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];/*后来加上的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计一坦克大战一、游戏介绍相信大部分同学都玩过或看过“坦克大战”这款经典游戏。

现在,就由我们自己动手来开发它。

只要大家具备了C++语言和面向对象的基础知识,然后按照实验指南的指导一步一步进行下去,相信我们每个同学都能把这款经典游戏做出来。

二、实验目标综合运用C++及其面向对象的知识开发一款小游戏。

三、实验内容在一个战场上,玩家控制坦克,消灭敌方坦克,并防止敌方坦克摧毁我方基地。

游戏的具体要求如下:1、游戏有一个初始页面,如下图。

2、按下任意键开始游戏,玩家控制坦克在战场上穿梭,碰到墙时,不能通过。

3、敌方坦克自由移动,每隔2秒改变一个方向,每隔3秒发射一发子弹。

4、敌方坦克每隔5秒出现一辆,从屏幕上方的左、中、右三个位置依次出现。

5、当玩家被消灭或者我方基地被摧毁或者游戏时间大于30秒的时候,游戏结束。

游戏开始前上海锐格软件有限公司进入游戏四、游戏的整体框架1五、实验指南实验准备打开FunCode,创建一个新的C++项目。

注意:项目名称必须为英文和数字,且不能有空格。

点击“项目”→“导入地图模板”,从对话框中选取名称为TankWar的模板导入。

导入成功后,界面如下:实验一游戏开始【实验内容】1、设置游戏标题2、按空格键,提示图片消失,游戏进入开始状态.【实验运行结果】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文件中。

因此,3先在LessonX.h文件对函数进行声明。

函数的返回值和参数列表都与CSystem::OnKeyDown函数保持一致。

访问权限应该是public。

代码如下:void OnKeyDown( const int iKey, const bool bAltPress, const bool bShiftPress, const boolbCtrlPress );3、接着,在Lesson.cpp文件中对该函数进行定义:void CGameMain::OnKeyDown( const int iKey, const bool bAltPress, const bool bShiftPress,const bool bCtrlPress ){}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= new CSprite("splash");m_pStart= new CSprite("start");8、最后,我们在CGameMain::OnKeyDown函数中处理空格键按下事件。

if( 0 ==GetGameState() ){if(iKey ==KEY_SPACE){m_iGameState = 1;}}4上海锐格软件有限公司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(){delete m_pSplash;delete m_pStart;}11、编译并运行程序,然后按下空格键,看看运行效果。

实验二坦克运动【实验内容】1、创建坦克类CTankPlayer;2、游戏开始时,将坦克放置于(0,0)的坐标上;3、通过按键WSAD控制坦克上下左右运动;4、坦克运行到黑色区域边界时不能继续前进。

【实验运行结果】在区域内运动5运动到区域边界【实验思路】坦克也是精灵,但是它具备一些自己独特的功能,比如通过键盘控制运动、开炮等。

因此我们可以创建一个新的类CTankPlayer类,并让它继承CSprite类。

通过WASD键,控制坦克做相应的的上左下右运动。

按下某个键,给坦克设置相应方向的运动速度;松开时,将该方向的速度设为0,表示停止运动。

屏幕上最内部的黑色区域为玩家坦克的活动区域,左上角坐标为(-26,-22),右下角坐标为(26,22)。

当坦克运动到该区域边界时,坦克不能继续前进。

【实验指导】1、通过类向导创建CTankPlayer类,其继承于CSprite类。

以VC++ 6.0为例:第一步、点击菜单“插入”-〉“新建类”。

第二步、在“New Class”对话框中输入类名和父类名。

6上海锐格软件有限公司第三步、点击“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方法void SetHp(int hp) {m_iHp = hp;}7void SetDir(int dir) {m_iDir = dir;}void SetSpeedX(float speedX) {m_fSpeedX = speedX;}void SetSpeedY(float speedY) {m_fSpeedY = speedY;}//get方法int GetHp() {return m_iHp;}int GetDir() {return m_iDir;}float GetSpeedX() {return m_fSpeedX;}float GetSpeedY() {return m_fSpeedY;}3、CTankPlayer的父类是CSprite类(具体声明查看CommonClass.h),构造函数为CSprite( const char *szName )。

4、所以通过上边方法自动生成的类,如果系统自动生成构造函数CTankPlayer(void),删除掉它以及在CTankPlayer.cpp中自动生成的对构造函数实现的代码:CTankPlayer::CTankPlayer(void){}再为CTankPlayer类添加新的构造函数:CTankPlayer(const char* szName)。

CTankPlayer::CTankPlayer(const char* szName):CSprite(szName) //对构造函数进行实现{m_iDir=0;m_fSpeedX=0.f;m_fSpeedY=0.f;m_iHp=2;}子类对象创建时,要先调用父类的构造函数完成父类部分的构造。

如果父类没有默认构造函数,子类的构造函数必须显示调用父类的构造函数。

CTankPlayer构造函数调用CSprite类构造函数,并将参数szName的值传递给它,从而将名称为szName 的精灵图片与CTankPlayer对象绑定起来。

相关文档
最新文档