课程设计题目名称.doc_第1页
课程设计题目名称.doc_第2页
课程设计题目名称.doc_第3页
课程设计题目名称.doc_第4页
课程设计题目名称.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

坦克大战学号:09072122姓名:李征完成日期: 2011 年 4 月【题目的名称及要求】课程设计题目:坦克大战游戏题目描述:游戏中有坦克和棋盘,一个棋盘,棋盘是正方形的,在x,y方向上从-max到 max,max的值是初始时由用户输入的。每个坦克有名称、位置、盔甲和火力,初始时,坦克在棋盘中心(0,0)的位置,坦克在棋盘上可以往四个方向 (up, down, left right) 移动,所有的坦克轮流移动,移动的方向和步数随机产生。坦克的移动不能超出棋盘,例如棋盘的最大值是10,坦克的当前位置是( 8, 0 ),做往右走6步的移动,往右走2步到达边界,再往回走4步,所以移动后的位置在( 6, 0 ).棋盘上有一些奖励区域,如果坦克落在了奖励区域里,会增加火力或盔甲,当某个坦克用了这个奖励后,该区域不再是奖励区域。奖励盔甲的区域个数由用户输入,区域随机指定,奖励火力的区域个数由用户输入,区域也是随机指定。当个坦克在同一个区域里,他们会打仗,坦克的盔甲数将会减少,减少的量是另一坦克的火力数,当一个坦克没有盔甲了,他就退出,当剩的坦克个数少于等于一个时,游戏结束,有一个剩余,则他就是胜利者,否则没有胜利者。题目要求:(1) 按照面向对象的思想和开发过程完成这个应用程序(2) 不能使用全局变量(3) 至少需要一个tank类和一个棋盘grid类扩充功能:1坦克的个数和属性由键盘输入。2 创建不同的坦克looptank 当坦克走到边界时,循环到另一边,例如棋盘的最大值是10,坦克的当前位置是( 8, 0 ),做往右走步的移动,往右走步到达边界,然后从左边开始往右走步,所以移动后的位置在( -6, 0 ). doubletank 这种坦克移动到奖励区域时获得2倍的奖励3 由用户输入多少个什么类型的坦克及坦克的属性【完成的功能及特色】(1)程序功能的详细说明这个程序的设计是按照面向对象的思想和开发过程完成的;没有使用全局变量;构建了一个tank类和一个棋盘grid类;棋盘是正方形的,在x,y方向上从-max到 max,max的值是初始时由用户输入的;运行程序时坦克的个数和属性由键盘输入;各个奖励点个数由玩家任意设定;创建了三种不同类型的坦克:普通坦克,双倍坦克,环回坦克;坦克获得奖励时提示奖励信息并消除此点的奖励; 坦克相遇时提示开战信息; 坦克盔甲为零后立刻退出战斗并提示;(2)自己的特色 为了不破坏类的封装性,各个类中没有使用友缘函数;坦克运行流程:移动-判断奖励-判断战斗-显示当前状态;*提示获得奖励语句的下一轮才显示坦克的位置;(3)运行界面截图设置棋盘大小;设置普通坦克的个数;设置普通坦克的属性;设置双倍坦克的个数;设置双倍坦克的属性;设置环回坦克的个数;设置环回坦克的属性;设置每次显示轮数;设置火力和盔甲奖励个数;随机设定火力和盔甲奖励区域;显示第0轮即坦克初始状态;相遇时战斗;获得奖励(状态在下一轮显示);坦克牺牲后;显示胜利者;(当同时牺牲时显示“全挂了!”)(4)程序缺陷当在需要输入数字的地方输入字母或特殊字符会出错;随机设定奖励时有时会有重复,覆盖问题(好解决,只是闲麻烦);获得奖励后状态在下一轮显示(不是错误,个人习惯而已,但有时会误导别人); 其它bug未知;【设计实现】(1) 类之间的关系图;调用grid棋盘tank普通坦克继承继承moveawardtank_l环回坦克tank_b双倍坦克awardmovemoveaward(2) 主要函数的说明setaward()设置奖励奖励盔甲的区域个数由用户输入,区域随机指定,奖励火力的区域个数由用户输入,区域也是随机指定。award()获得奖励棋盘上有一些奖励区域,如果坦克落在了奖励区域里,会增加火力或盔甲,当某个坦克用了这个奖励后,该区域不再是奖励区域。move()坦克移动初始时,坦克在棋盘中心(0,0)的位置,坦克在棋盘上可以往四个方向 (up, down, left right) 移动,所有的坦克轮流移动,移动的方向和步数随机产生。坦克的移动不能超出棋盘,例如棋盘的最大值是10,坦克的当前位置是( 8, 0 ),做往右走6步的移动,往右走2步到达边界,再往回走4步,所以移动后的位置在( 6, 0 ).fight()战斗当个坦克在同一个区域里,他们会打仗,坦克的盔甲数将会减少,减少的量是另一坦克的火力数,当一个坦克没有盔甲了,他就退出。(3) 程序的源代码清单grid.hclass gridvectorvectorpan;public:grid();grid(int);void setaward(int a,int b,int c);int getgrid(int x,int y);void setgrid(int x,int y,int xy);#endifgrid.cppgrid:grid();grid:grid(int a)int x,y,i=0;pan.resize(2*a+1);for(i=0;i2*a+1;i+)pani.resize(2*a+1);for(x=0;x2*a+1;x+)for(y=0;y2*a+1;y+)panxy=0;void grid:setaward(int a,int b,int c)int i,x,y;coutfixedsetprecision(2);cout火力奖励坐标:;for(i=0;ib;i+)x=rand()%(2*a+1); y=rand()%(2*a+1);setgrid(x,y,1);cout(x-a,y-a) ;coutendl盔甲奖励坐标:;for(i=0;ic;i+)x=rand()%(2*a+1); y=rand()%(2*a+1);setgrid(x,y,2);cout(x-a,y-a) ;coutendl;int grid:getgrid(int x,int y)return panxy;void grid:setgrid(int x,int y,int xy)panxy=xy;tank.hclass tankprotected:int x,y;string name;string ty;int firepower;int armour;int type;public:tank();tank(int,int,string,int,int,int);void setx(int x1);void sety(int y1);void setname(string n);void setty(string t);void setfirepower(int f);void setarmour(int l);void settype(int t);int getx();int gety();string getname();string getty();int getfirepower();int getarmour();int gettype();virtual void move(int);void award(grid&,int);void fight(vector&,int &n,int &over);tank.cpptank:tank()x=0;y=0;name=null;firepower=30;armour=100;type=1;tank:tank(int x1,int y1,string n, int f,int l,int t)x=x1;y=y1;name=n;firepower=f;armour=l;type=t;void tank:move(int a)int fx,bu;coutfixedbu)y=y+bu; else if(2*a+1-ybu) y=a-(bu-(a-y); else y=(bu-(2*a+1-y)-a; if(ya)y=a; break;case 2:if(y+abu)y=y-bu; else if(2*a+1+ybu) y=(bu-(y+a)-a; else y=a-(bu-(2*a+1+y); if(ya)y=a; break;case 3:if(a-xbu)x=x+bu; else if(2*a-x+1bu) x=a-(bu-(a-x); else x=(bu-(2*a-x+1)-a; if(xa)x=a; break;case 4:if(x+abu)x=x-bu; else if(2*a+x+1bu) x=(bu-(x+a)-a; else x=a-(bu-(2*a+x+1); if(xa)x=a; break;void tank:setx(int x1)x=x1;void tank:sety(int y1)y=y1;void tank:setname(string n)name=n;void tank:setfirepower(int f)firepower=f;void tank:setarmour(int l)armour=l;void tank:settype(int t)type=t;void tank:setty(string t)ty=t;int tank:getx()return x;int tank:gety()return y;int tank:gettype()return type;string tank:getname()return name;string tank:getty()return ty;int tank:getfirepower()return firepower;int tank:getarmour()return armour;void tank:award(grid &p,int a)if(p.getgrid(x+a,y+a)=1) if(type=1)firepower+;coutname得到1点火力奖励!;else if(type=2)firepower=firepower+2;coutname得到双倍2点火力奖励!;else if(p.getgrid(x+a,y+a)=2) if(type=1)armour+;coutname得到1点盔甲奖励!;/和棋盘比较 firepower=1 armour=2else armour=armour+2;coutname得到双倍2点盔甲奖励!;p.setgrid(x+a,y+a,0);void tank:fight(vector &tanks,int &n,int &over)int i,j;for(i=0;in;i+)for(j=0;jn;j+)if(ij&tanksi.getx()=tanksj.getx()&tanksi.gety()=tanksj.gety()couttanksi.getname():(tanksi.getx(),tanksi.gety()和tanksj.getname():(tanksj.getx(),tanksj.gety()打起来了endl;tanksi.setarmour(tanksi.getarmour()-tanksj.getfirepower();tanksj.setarmour(tanksj.getarmour()-tanksi.getfirepower();for(i=0;in;i+)if(tanksi.getarmour()=0)couttanksi.getname()挂了!endl;tanks.erase(tanks.begin()+i);i-;n-;over+;else couttanksi.getty()tanksi.getname():(tanksi.getx(),tanksi.gety() 火力值:tanksi.getfirepower() 盔甲:tanksi.getarmour()endl;tank_b.hclass tank_b:public tankpublic:tank_b();tank_b(int,int,string,int,int,int);void move(int);void award(grid&,int);tank_b.cpptank_b:tank_b():tank();tank_b:tank_b(int x1,int y1,string n, int f,int l,int t):tank(x1,y1,n,f,l,t);void tank_b:move(int a)int fx,bu;coutfixedbu)y=y+bu; else if(2*a+1-ybu) y=a-(bu-(a-y); else y=(bu-(2*a+1-y)-a; if(ya)y=a; break;case 2:if(y+abu)y=y-bu; else if(2*a+1+ybu) y=(bu-(y+a)-a; else y=a-(bu-(2*a+1+y); if(ya)y=a; break;case 3:if(a-xbu)x=x+bu; else if(2*a-x+1bu) x=a-(bu-(a-x); else x=(bu-(2*a-x+1)-a; if(xa)x=a; break;case 4:if(x+abu)x=x-bu; else if(2*a+x+1bu) x=(bu-(x+a)-a; else x=a-(bu-(2*a+x+1); if(xa)x=a; break;void tank_b:award(grid &p,int a)if(p.getgrid(x+a,y+a)=1)firepower=firepower+2;coutname得到双倍2点火力奖励!;else if(p.getgrid(x+a,y+a)=2) armour+;coutname得到1点盔甲奖励!;/和棋盘比较 firepower=1 armour=2p.setgrid(x+a,y+a,0);tank_l.hclass tank_l:public tankpublic:tank_l();tank_l(int,int,string,int,int,int);void move(int);void award(grid&,int);tank_l.cpptank_l:tank_l():tank();tank_l:tank_l(int x1,int y1,string n, int f,int l,int t):tank(x1,y1,n,f,l,t);void tank_l:move(int a)int fx,bu;coutfixedbu)y=y+bu; else if(2*a+1-ybu) y=a-(bu-(a-y); else y=(bu-(2*a+1-y)-a; if(ya)y=a; break;case 2:if(y+abu)y=y-bu; else if(2*a+1+ybu) y=(bu-(y+a)-a; else y=a-(bu-(2*a+1+y); if(ya)y=a; break;case 3:if(a-xbu)x=x+bu; else if(2*a-x+1bu) x=a-(bu-(a-x); else x=(bu-(2*a-x+1)-a; if(xa)x=a; break;case 4:if(x+abu)x=x-bu; else if(2*a+x+1bu) x=(bu-(x+a)-a; else x=a-(bu-(2*a+x+1); if(xa)x=a; break;void tank_l:award(grid &p,int a)if(p.getgrid(x+a,y+a)=1) firepower+;coutname得到1点火力奖励!;else if(p.getgrid(x+a,y+a)=2) armour+;coutname得到1点盔甲奖励!;/和棋盘比较 firepower=1 armour=2p.setgrid(x+a,y+a,0);main()int main()string name;int ta1,ta2,ta3,n,num,size,armour,firepower,setarmour,setfirepower;int i=1,out=1,over=0,times=1,turn=0;coutsize;coutendl;time_t ti; srand(unsigned int)time(&ti);tank t;tank_b tb;vector tanks;coutta1;cout=0)for(;i=ta1;i+)tanks.push_back(t);vector:iterator iter=tanks.end();iter-;cout第iname;coutsetname(name);cout第iarmour;coutsetarmour(armour);cout第ifirepower;coutsetfirepower(firepower);iter-settype(1);iter-setty(普通坦克);break;else coutta1;coutta2;cout=0)for(;i=ta2;i+)tanks.push_back(tb);vector:iterator iter=tanks.end();iter-;cout第iname;coutsetname(name);cout第iarmour;coutsetarmour(armour);cout第ifirepower;coutsetfirepower(firepower);iter-settype(2);iter-setty(双倍坦克);break;else coutta2;coutta3;cout=0)for(;i=ta3;i+)tanks.push_back(t);vector:iterator iter=tanks.end();iter-;cout第iname;coutse

温馨提示

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

评论

0/150

提交评论