欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

    课程设计题目名称.doc

    • 资源ID:10077055       资源大小:102.50KB        全文页数:21页
    • 资源格式: DOC        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    课程设计题目名称.doc

    坦克大战学号: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 Gridvector<vector<int>>pan;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;i<2*a+1;i+)pani.resize(2*a+1);for(x=0;x<2*a+1;x+)for(y=0;y<2*a+1;y+)panxy=0;void Grid:SetAward(int a,int b,int c)int i,x,y;cout<<fixed<<setprecision(2);cout<<"火力奖励坐标:"for(i=0;i<b;i+)x=rand()%(2*a+1); y=rand()%(2*a+1);SetGrid(x,y,1);cout<<"("<<x-a<<","<<y-a<<") "cout<<endl<<"盔甲奖励坐标:"for(i=0;i<c;i+)x=rand()%(2*a+1); y=rand()%(2*a+1);SetGrid(x,y,2);cout<<"("<<x-a<<","<<y-a<<") "cout<<endl;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<Tank>&,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;cout<<fixed<<setprecision(2);bu=rand()%6+1;fx=rand()%4+1;switch (fx)case 1:if(a-y>bu)y=y+bu; else if(2*a+1-y>bu) y=a-(bu-(a-y); else y=(bu-(2*a+1-y)-a; if(y<-a)y=-a;if(y>a)y=a; break;case 2:if(y+a>bu)y=y-bu; else if(2*a+1+y>bu) y=(bu-(y+a)-a; else y=a-(bu-(2*a+1+y); if(y<-a)y=-a;if(y>a)y=a; break;case 3:if(a-x>bu)x=x+bu; else if(2*a-x+1>bu) x=a-(bu-(a-x); else x=(bu-(2*a-x+1)-a; if(x<-a)x=-a;if(x>a)x=a; break;case 4:if(x+a>bu)x=x-bu; else if(2*a+x+1>bu) x=(bu-(x+a)-a; else x=a-(bu-(2*a+x+1); if(x<-a)x=-a;if(x>a)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+;cout<<name<<"得到1点火力奖励!"else if(type=2)Firepower=Firepower+2;cout<<name<<"得到双倍2点火力奖励!"else if(p.GetGrid(x+a,y+a)=2) if(type=1)Armour+;cout<<name<<"得到1点盔甲奖励!"/和棋盘比较 Firepower=1 Armour=2else Armour=Armour+2;cout<<name<<"得到双倍2点盔甲奖励!"p.SetGrid(x+a,y+a,0);void Tank:Fight(vector<Tank> &tanks,int &n,int &over)int i,j;for(i=0;i<n;i+)for(j=0;j<n;j+)if(i<j&&tanksi.GetX()=tanksj.GetX()&&tanksi.GetY()=tanksj.GetY()cout<<tanksi.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;i<n;i+)if(tanksi.GetArmour()<=0)cout<<tanksi.GetName()<<"挂了!"<<endl;tanks.erase(tanks.begin()+i);i-;n-;over+;else cout<<tanksi.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;cout<<fixed<<setprecision(2);bu=rand()%6+1;fx=rand()%4+1;switch (fx)case 1:if(a-y>bu)y=y+bu; else if(2*a+1-y>bu) y=a-(bu-(a-y); else y=(bu-(2*a+1-y)-a; if(y<-a)y=-a;if(y>a)y=a; break;case 2:if(y+a>bu)y=y-bu; else if(2*a+1+y>bu) y=(bu-(y+a)-a; else y=a-(bu-(2*a+1+y); if(y<-a)y=-a;if(y>a)y=a; break;case 3:if(a-x>bu)x=x+bu; else if(2*a-x+1>bu) x=a-(bu-(a-x); else x=(bu-(2*a-x+1)-a; if(x<-a)x=-a;if(x>a)x=a; break;case 4:if(x+a>bu)x=x-bu; else if(2*a+x+1>bu) x=(bu-(x+a)-a; else x=a-(bu-(2*a+x+1); if(x<-a)x=-a;if(x>a)x=a; break;void Tank_b:Award(Grid &p,int a)if(p.GetGrid(x+a,y+a)=1)Firepower=Firepower+2;cout<<name<<"得到双倍2点火力奖励!"else if(p.GetGrid(x+a,y+a)=2) Armour+;cout<<name<<"得到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;cout<<fixed<<setprecision(2);bu=rand()%6+1;fx=rand()%4+1;switch (fx)case 1:if(a-y>bu)y=y+bu; else if(2*a+1-y>bu) y=a-(bu-(a-y); else y=(bu-(2*a+1-y)-a; if(y<-a)y=-a;if(y>a)y=a; break;case 2:if(y+a>bu)y=y-bu; else if(2*a+1+y>bu) y=(bu-(y+a)-a; else y=a-(bu-(2*a+1+y); if(y<-a)y=-a;if(y>a)y=a; break;case 3:if(a-x>bu)x=x+bu; else if(2*a-x+1>bu) x=a-(bu-(a-x); else x=(bu-(2*a-x+1)-a; if(x<-a)x=-a;if(x>a)x=a; break;case 4:if(x+a>bu)x=x-bu; else if(2*a+x+1>bu) x=(bu-(x+a)-a; else x=a-(bu-(2*a+x+1); if(x<-a)x=-a;if(x>a)x=a; break;void Tank_l:Award(Grid &p,int a)if(p.GetGrid(x+a,y+a)=1) Firepower+;cout<<name<<"得到1点火力奖励!"else if(p.GetGrid(x+a,y+a)=2) Armour+;cout<<name<<"得到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;cout<<"输入棋盘大小:" /输入棋盘大小cin>>size;cout<<endl;time_t ti; srand(unsigned int)time(&ti);Tank t;Tank_b tb;vector<Tank> tanks;cout<<"输入普通坦克个数:" /输入普通坦克的个数和属性cin>>ta1;cout<<endl;while(1)if(ta1>=0)for(;i<=ta1;i+)tanks.push_back(t);vector<Tank>:iterator iter=tanks.end();iter-;cout<<"第"<<i<<"个普通坦克名字:"cin>>name;cout<<endl;iter->SetName(name);cout<<"第"<<i<<"个普通坦克盔甲:"cin>>Armour;cout<<endl;iter->SetArmour(Armour);cout<<"第"<<i<<"个普通坦克火力:"cin>>Firepower;cout<<endl;iter->SetFirepower(Firepower);iter->SetType(1);iter->SetTy("普通坦克");break;else cout<<"输入普通坦克个数:"cin>>ta1;cout<<"输入双倍坦克个数:" /输入双倍普通坦克的个数和属性cin>>ta2;cout<<endl;i=1;while(1)if(ta2>=0)for(;i<=ta2;i+)tanks.push_back(tb);vector<Tank>:iterator iter=tanks.end();iter-;cout<<"第"<<i<<"个双倍坦克名字:"cin>>name;cout<<endl;iter->SetName(name);cout<<"第"<<i<<"个双倍坦克盔甲:"cin>>Armour;cout<<endl;iter->SetArmour(Armour);cout<<"第"<<i<<"个双倍坦克火力:"cin>>Firepower;cout<<endl;iter->SetFirepower(Firepower);iter->SetType(2);iter->SetTy("双倍坦克");break;else cout<<"输入双倍坦克个数:"cin>>ta2;cout<<"输入环回坦克个数:" /输入环回普通坦克的个数和属性cin>>ta3;cout<<endl;i=1;while(1)if(ta3>=0)for(;i<=ta3;i+)tanks.push_back(t);vector<Tank>:iterator iter=tanks.end();iter-;cout<<"第"<<i<<"个环回坦克名字:"cin>>name;cout<<endl;iter->SetName(name);cout<<"第"<<i<<"个环回坦克盔甲:"cin>>Armour;cout<<endl;iter->SetArmour(Armour);cout<<"第"<<i<<"个环回坦克火力:"cin>>Firepower;cout<<endl;iter->SetFirepower(Firepower);iter->SetType(1);iter->SetTy("环回坦克");break;else cout<<"输入环回坦克个数:"cin>>ta3;cout<<"输入每轮显示次数:" /输入每轮显示次数cin>>n;num=ta1+ta2+ta3;cout<<endl;cout<<"火力奖励个数:" /火力奖励个数cin>>setFirepower;cout<<endl;cout<<"盔甲奖励个数:" /盔甲奖励个数cin>>setArmour;cout<<endl;Grid pan(size);pan.SetAward(size,setFirepower,setArmour); /随即输出奖励区域vector<Tank>:iterator iter=tanks.begin();vector<Tank>:iterator end=tanks.end();cout<<"第0轮:"<<endl; /显示初始时各坦克的属性while(iter!=tanks.end()cout<<iter->GetTy()<<iter->GetName()<<":("<<iter->GetX()<<","<<iter->GetY()<<")"<<" 火力值:"<<iter->GetFirepower()<<" 盔甲:"<<iter->GetArmour()<<endl;iter+;iter=tanks.begin();while(tanks.capacity()>1) if(out>n)out=1;cout<<endl;system("pause"); /按照设置的每轮显示次数进行显示if(turn=tanks.size()cout<<endl<<endl<<"第"<<times<<"轮:"<<endl;iter=tanks.begin();out+;times+;turn=0;iter->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<<"*冠军是:"<<tanks.begin()->GetName()<<"*"<<endl;break;if(ta1+ta2+ta3-over=0)cout<<"*全挂了!*"<<endl;break;system("pause");return 0;

    注意事项

    本文(课程设计题目名称.doc)为本站会员(土8路)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




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

    三一文库
    收起
    展开