课程设计题目名称.doc

上传人:土8路 文档编号:10077055 上传时间:2021-04-17 格式:DOC 页数:21 大小:102.50KB
返回 下载 相关 举报
课程设计题目名称.doc_第1页
第1页 / 共21页
课程设计题目名称.doc_第2页
第2页 / 共21页
课程设计题目名称.doc_第3页
第3页 / 共21页
课程设计题目名称.doc_第4页
第4页 / 共21页
课程设计题目名称.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《课程设计题目名称.doc》由会员分享,可在线阅读,更多相关《课程设计题目名称.doc(21页珍藏版)》请在三一文库上搜索。

1、坦克大战学号:09072122姓名:李征完成日期: 2011 年 4 月【题目的名称及要求】课程设计题目:坦克大战游戏题目描述:游戏中有坦克和棋盘,一个棋盘,棋盘是正方形的,在x,y方向上从-max到 max,max的值是初始时由用户输入的。每个坦克有名称、位置、盔甲和火力,初始时,坦克在棋盘中心(0,0)的位置,坦克在棋盘上可以往四个方向 (up, down, left right) 移动,所有的坦克轮流移动,移动的方向和步数随机产生。坦克的移动不能超出棋盘,例如棋盘的最大值是10,坦克的当前位置是( 8, 0 ),做往右走6步的移动,往右走2步到达边界,再往回走4步,所以移动后的位置在(

2、6, 0 ).棋盘上有一些奖励区域,如果坦克落在了奖励区域里,会增加火力或盔甲,当某个坦克用了这个奖励后,该区域不再是奖励区域。奖励盔甲的区域个数由用户输入,区域随机指定,奖励火力的区域个数由用户输入,区域也是随机指定。当个坦克在同一个区域里,他们会打仗,坦克的盔甲数将会减少,减少的量是另一坦克的火力数,当一个坦克没有盔甲了,他就退出,当剩的坦克个数少于等于一个时,游戏结束,有一个剩余,则他就是胜利者,否则没有胜利者。题目要求:(1) 按照面向对象的思想和开发过程完成这个应用程序(2) 不能使用全局变量(3) 至少需要一个Tank类和一个棋盘Grid类扩充功能:1坦克的个数和属性由键盘输入。2

3、 创建不同的坦克LoopTank 当坦克走到边界时,循环到另一边,例如棋盘的最大值是10,坦克的当前位置是( 8, 0 ),做往右走步的移动,往右走步到达边界,然后从左边开始往右走步,所以移动后的位置在( -6, 0 ). DoubleTank 这种坦克移动到奖励区域时获得2倍的奖励3 由用户输入多少个什么类型的坦克及坦克的属性【完成的功能及特色】(1)程序功能的详细说明这个程序的设计是按照面向对象的思想和开发过程完成的;没有使用全局变量;构建了一个Tank类和一个棋盘Grid类;棋盘是正方形的,在x,y方向上从-max到 max,max的值是初始时由用户输入的;运行程序时坦克的个数和属性由键

4、盘输入;各个奖励点个数由玩家任意设定;创建了三种不同类型的坦克:普通坦克,双倍坦克,环回坦克;坦克获得奖励时提示奖励信息并消除此点的奖励; 坦克相遇时提示开战信息; 坦克盔甲为零后立刻退出战斗并提示;(2)自己的特色 为了不破坏类的封装性,各个类中没有使用友缘函数;坦克运行流程:移动-判断奖励-判断战斗-显示当前状态;*提示获得奖励语句的下一轮才显示坦克的位置;(3)运行界面截图设置棋盘大小;设置普通坦克的个数;设置普通坦克的属性;设置双倍坦克的个数;设置双倍坦克的属性;设置环回坦克的个数;设置环回坦克的属性;设置每次显示轮数;设置火力和盔甲奖励个数;随机设定火力和盔甲奖励区域;显示第0轮即坦

5、克初始状态;相遇时战斗;获得奖励(状态在下一轮显示);坦克牺牲后;显示胜利者;(当同时牺牲时显示“全挂了!”)(4)程序缺陷当在需要输入数字的地方输入字母或特殊字符会出错;随机设定奖励时有时会有重复,覆盖问题(好解决,只是闲麻烦);获得奖励后状态在下一轮显示(不是错误,个人习惯而已,但有时会误导别人); 其它bug未知;【设计实现】(1) 类之间的关系图;调用Grid棋盘Tank普通坦克继承继承MoveAwardTank_l环回坦克Tank_b双倍坦克AwardMoveMoveAward(2) 主要函数的说明SetAward()设置奖励奖励盔甲的区域个数由用户输入,区域随机指定,奖励火力的区域

6、个数由用户输入,区域也是随机指定。Award()获得奖励棋盘上有一些奖励区域,如果坦克落在了奖励区域里,会增加火力或盔甲,当某个坦克用了这个奖励后,该区域不再是奖励区域。Move()坦克移动初始时,坦克在棋盘中心(0,0)的位置,坦克在棋盘上可以往四个方向 (up, down, left right) 移动,所有的坦克轮流移动,移动的方向和步数随机产生。坦克的移动不能超出棋盘,例如棋盘的最大值是10,坦克的当前位置是( 8, 0 ),做往右走6步的移动,往右走2步到达边界,再往回走4步,所以移动后的位置在( 6, 0 ).Fight()战斗当个坦克在同一个区域里,他们会打仗,坦克的盔甲数将会减

7、少,减少的量是另一坦克的火力数,当一个坦克没有盔甲了,他就退出。(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);

8、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)

9、 ;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

10、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=

11、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

12、) 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(in

13、t 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 T

14、ank: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+;coutna

15、me得到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()和tanks

16、j.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()tanks

17、i.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

18、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

19、-(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点盔甲奖励

20、!;/和棋盘比较 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

21、 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;

22、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(

23、)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-

24、;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;coutSetAr

25、mour(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;coutSetName(name);cout第iArmour;coutSetArmour(Armour);cout第iFirepower;coutSetFirepower(Firepow

26、er);iter-SetType(1);iter-SetTy(环回坦克);break;else coutta3;coutn;num=ta1+ta2+ta3;coutendl;coutsetFirepower;coutendl;coutsetArmour;coutendl;Grid pan(size);pan.SetAward(size,setFirepower,setArmour); /随即输出奖励区域vector:iterator iter=tanks.begin();vector:iterator end=tanks.end();cout第0轮:endl; /显示初始时各坦克的属性whil

27、e(iter!=tanks.end()coutGetTy()GetName():(GetX(),GetY() 火力值:GetFirepower() 盔甲:GetArmour()1) if(outn)out=1;coutendl;system(pause); /按照设置的每轮显示次数进行显示if(turn=tanks.size()coutendlendl第times轮:Fight(tanks,num,over); /战斗iter=tanks.begin();if(tanks.size()=2)if(size!=0)iter-Move(size); /移动iter-Award(pan,size); /判断奖励iter+;turn+;if(ta1+ta2+ta3-over=1)cout*冠军是:GetName()*endl;break;if(ta1+ta2+ta3-over=0)cout*全挂了!*endl;break;system(pause);return 0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1