ImageVerifierCode 换一换
格式:DOCX , 页数:28 ,大小:19.51KB ,
资源ID:8855924      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8855924.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C大作业坦克大战.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C大作业坦克大战.docx

1、C大作业坦克大战 文档编制序号:KKIDT-LLE0828-LLETD298-POI08C大作业坦克大战#include#include#include#include#includeusingnamespacestd;HANDLEMutex=CreateMutex(NULL,FALSE,NULL);/互斥对象intGameOver=0;intlevel=0;intmap2323;/坦克种类,Normal为玩家坦克#defineNormal0#defineRed1#defineBlue2#defineGreen3/方向的宏定义#defineUp0#defineDown1#defineLeft2

2、#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_

3、CURSOR_INFOinfo=1,0; HANDLEOut=GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorInfo(Out,&info);intsharp412= 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();/更新界面信息函数申明c

4、lassTank/坦克类private: intDirection;/方向 inthotpoint2;/活动点 intSpeed;/速度 intFirePower;/火力public: Tank(intdir,inthot1,inthot2,inttyp,intspe,intfirepow)/构造函数 Direction=dir; hotpoint0=hot1; hotpoint1=hot2; Type=typ; Speed=spe; FirePower=firepow; intType;/坦克的种类(详见宏定义) intID;/坦克在MAP中的标记(详见宏定义) intFireEnable;

5、/是否可以开火 intLife;/生命值 voidRunning();/运行函数 intJudge(intx,inty,intID);/判断是否可以绘制坦克 voidDrawTank();/重绘坦克 voidRedraw();/擦除坦克 intGetSpeed()/获取速度 returnSpeed; intGetFire()/获取火力 returnFirePower; intGetDirection()/获取方向 returnDirection; intGetHotX()/获取活动点坐标 returnhotpoint0; intGetHotY() returnhotpoint1; voidIn

6、creaseFire()/火力+ FirePower+; voidIncreaseSpeed()/速度+ Speed+; voidChangeDirection(intnewD)/改变方向 Direction=newD; voidChangePos(intx,inty)/改变活动点 hotpoint0=x; hotpoint1=y; ;Tankplayer(Right,0,0,Normal,1,1);/玩家Tankenemy(Left,20,0,Red,1,1);/敌人voidTank:DrawTank()/绘制坦克 inti; intnx,ny; if(Type=Red) SetConsol

7、eTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED); elseif(Type=Blue) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE); elseif(Type=Green) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGR

8、OUND_GREEN); elseif(Type=Normal) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); for(i=0;i6;i+) nx=hotpoint0+sharpDirectioni*2; ny=hotpoint1+sharpDirectioni*2+1; SetPos(ny+1)*2,nx+1);/利用sharp数组相对于点x,y绘制形状 mapnxny=ID; cout

9、; voidTank:Redraw()/擦除坦克,原理同上 inti; intnx,ny; for(i=0;i6;i+) nx=hotpoint0+sharpDirectioni*2; ny=hotpoint1+sharpDirectioni*2+1; mapnxny=Empty; SetPos(ny+1)*2,nx+1); cout; intTank:Judge(intx,inty,intdir)/判断当前是否可以绘制坦克 inti; intnx,ny; for(i=0;i6;i+) nx=x+sharpdiri*2; ny=y+sharpdiri*2+1; if(nx=23|ny=23|m

10、apnxny!=Empty)/不能绘制,返回1 return1; 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,&

11、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(hotpoint0-1,hotpoint1,newD)=0) hotpoint0-; Direction=newD; else if(Judge(hotpoint0,hotpoint1,n

12、ewD)=0) Direction=newD; elseif(newD=Down) Redraw(); if(Judge(hotpoint0+1,hotpoint1,newD)=0) hotpoint0+; Direction=newD; else if(Judge(hotpoint0,hotpoint1,newD)=0) Direction=newD; elseif(newD=Left) Redraw(); if(Judge(hotpoint0,hotpoint1-1,newD)=0) hotpoint1-; Direction=newD; else if(Judge(hotpoint0,h

13、otpoint1,newD)=0) Direction=newD; elseif(newD=Right) Redraw(); if(Judge(hotpoint0,hotpoint1+1,newD)=0) hotpoint1+; Direction=newD; else if(Judge(hotpoint0,hotpoint1,newD)=0) Direction=newD; if(GameOver=0&Life!=0) DrawTank(); ReleaseMutex(Mutex);/释放互斥对象 Sleep(500-80*Speed); /*子弹线程函数*/DWORDWINAPIBulle

14、tfly(LPVOIDlpParameter) int*ID=(int*)lpParameter;/ID用来获取发射子弹坦克的ID intPos2;/子弹活动点 intdirection; intSpeed; inttype; inthit=0;/击中标记 intoldx,oldy;/旧活动点 intflag=0;/子弹是否有移动的标记 if(*ID=Player)/如果是玩家坦克 type=PlayerBullet; direction=(); Speed=(); Pos0=(); Pos1=(); elseif(*ID=Enemy)/如果是敌人坦克 type=EnemyBullet; di

15、rection=(); Speed=(); Pos0=(); Pos1=(); if(direction=Up)/根据坦克的位置和方向确定子弹的初始坐标 Pos0-; Pos1+; elseif(direction=Down) Pos0+=3; Pos1+; elseif(direction=Left) Pos0+; Pos1-; elseif(direction=Right) Pos0+; Pos1+=3; /子弹的运行 while(1) WaitForSingleObject(Mutex,INFINITE);/这个不再注释了。 if(flag=1&hit!=1)/擦除原位置 mapoldx

16、oldy=Empty; SetPos(oldy+1)*2,oldx+1); cout; if(GameOver=1) return0; if(hit=1|Pos022|Pos122)/如果击中 ReleaseMutex(Mutex); Sleep(500); if(type=PlayerBullet) =1; elseif(type=EnemyBullet) =1; break; switch(mapPos0Pos1)/子弹经过的MAP的标记 如果是空位置就绘制子弹 mapPos0Pos1=type; SetPos(Pos1+1)*2,Pos0+1); SetConsoleTextAttrib

17、ute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); cout; break; 如果是玩家位置 if(type!=PlayerBullet) ;/生命减少 if=0) GameOver=1; Updata(); hit=1; break; 如果是敌人位置 if(type!=PlayerBullet) hit=1; else hit=1; Kill+; if(Kill%20=0&5)/击杀数+ +; if=Red)/如果击杀红坦克 Kil

18、lRed+; if(KillRed%10=0&()5) (); if=Green)/如果击杀绿坦克 KillGreen+; if(KillGreen%10=0&()5) (); ();/擦除敌人 =0;/敌人死亡 Updata(); break; oldx=Pos0; oldy=Pos1; if(direction=Up)/子弹移动 Pos0-; elseif(direction=Down) Pos0+; elseif(direction=Left) Pos1-; elseif(direction=Right) Pos1+; ReleaseMutex(Mutex); flag=1; Sleep

19、(60-10*Speed); return0;/*敌人线程函数*/DWORDWINAPITankRuning(LPVOIDlpParameter) Sleep(400); intPos; intStart2;/敌人起始地址 inttyp; intfire; intspe; while(1) if(GameOver=1) return0; srand(int)time(0);/随机出敌人起始地址 Pos=rand()%4; if(Pos=0) Start0=2; Start0=2; elseif(Pos=1) Start0=2; Start1=18; elseif(Pos=2) Start0=1

20、8; Start1=2; elseif(Pos=3) Start0=18; Start1=18; if(Start0,Start1,Down)=0) break; WaitForSingleObject(Mutex,INFINITE); srand(int)time(0); typ=rand()%3+1;/随机出敌人的种类 if(typ=Blue) spe=1+level; fire=1+level; elseif(typ=Red) spe=1+level; fire=3+level; elseif(typ=Green) spe=3+level; fire=1+level; enemy=Tan

21、k(Down,Start0,Start1,typ,spe,fire);/重新生成敌人坦克 =Enemy; =1; =1; ReleaseMutex(Mutex); (); return0;voidInit()/初始化函数 Kill=0; KillRed=0; KillGreen=0; player=Tank(Left,0,0,Normal,1,1); enemy=Tank(Left,0,0,Red,1,1); =2; =1; =0; =1; =Player; =Enemy; EnemyExist=0;voidUpdata()/更新界面信息 SetConsoleTextAttribute(Get

22、StdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); inti; SetPos(53,0); cout生命值:; SetPos(53,1); for(i=0;i5;i+) if(i cout; else cout; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN); SetPos(53,3); cout移动速度:

23、; SetPos(53,4); for(i=0;i5;i+) if(i() cout; else cout; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED); SetPos(53,5); cout火力:; SetPos(53,6); for(i=0;i5;i+) if(i() cout; else cout; SetPos(53,8); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREG

24、ROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); cout杀敌数:Kill; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED); SetPos(53,9); cout杀死红坦克:KillRed; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN

25、); SetPos(53,10); cout杀死绿坦克:KillGreen;voidDrawMap()/画界面 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); system(cls); inti; for(i=0;i25;i+) SetPos(i*2,0); cout; for(i=1;i25;i+) SetPos(0,i); cout; SetPos(24*2,i); cout; for(i=0;i25;i+) SetPos(i*2,24); cout; Updata();voidWelcome()/欢迎界面 intx; system(cls); SetConsoleTextAttribute(

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1