好文档 - 专业文书写作范文服务资料分享网站

C++大作业坦克大战

天下 分享 时间: 加入收藏 我要投稿 点赞

#include #include #include #include #include using namespace std;

HANDLE Mutex=CreateMutex(NULL,FALSE,NULL);//互斥对象

int GameOver=0; int level=0;

int map[23][23];

//坦克种类,Normal为玩家坦克 #define Normal 0 #define Red 1 #define Blue 2 #define Green 3 //方向的宏定义 #define Up 0 #define Down 1 #define Left 2 #define Right 3

//地图标记的宏定义 #define Empty 0 #define Player 1

#define PlayerBullet 2 #define EnemyBullet 3 #define Enemy 4

int Kill; int KillRed; int KillGreen; int EnemyExist;

void SetPos(int i,int j)//设定光标位置 { COORD pos={i,j}; HANDLE Out=GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(Out, pos); }

void HideCurSor(void)//隐藏光标 { CONSOLE_CURSOR_INFO info={1,0};

HANDLE Out=GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorInfo(Out,&info); }

int sharp[4][12]= { {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}, };//此数组用来保存坦克各个方向的形状信息

DWORD WINAPI Bulletfly(LPVOID lpParameter);//子弹函数申明 void Updata();//更新界面信息函数申明

class Tank//坦克类 {

private: int Direction;//方向 int hotpoint[2];//活动点 int Speed;//速度 int FirePower;//火力 public: Tank(int dir,int hot1,int hot2,int typ,int spe,int firepow)//构造函数 { Direction=dir; hotpoint[0]=hot1; hotpoint[1]=hot2; Type=typ; Speed=spe; FirePower=firepow; }

int Type;//坦克的种类(详见宏定义)

int ID;//坦克在MAP中的标记(详见宏定义) int FireEnable;//是否可以开火 int Life;//生命值

void Running();//运行函数

int Judge(int x,int y,int ID);//判断是否可以绘制坦克 void DrawTank();//重绘坦克 void Redraw();//擦除坦克 int GetSpeed()//获取速度 { return Speed; }

};

int GetFire()//获取火力 { return FirePower; }

int GetDirection()//获取方向 { return Direction; }

int GetHotX()//获取活动点坐标 { return hotpoint[0]; }

int GetHotY() { return hotpoint[1]; }

void IncreaseFire()//火力+ { FirePower++; }

void IncreaseSpeed()//速度+ { Speed++; }

void ChangeDirection(int newD)//改变方向 { Direction=newD; }

void ChangePos(int x,int y)//改变活动点 { hotpoint[0]=x; hotpoint[1]=y; }

Tank player(Right,0,0,Normal,1,1);//玩家 Tank enemy(Left,20,0,Red,1,1);//敌人

void Tank::DrawTank()//绘制坦克 { int i; int nx,ny; if(Type==Red)

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED); else if(Type==Blue) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_BLUE); else if(Type==Green) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_GREEN); else if(Type==Normal) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); for(i=0;i<6;i++) { nx=hotpoint[0]+sharp[Direction][i*2]; ny=hotpoint[1]+sharp[Direction][i*2+1]; SetPos((ny+1)*2,nx+1);//利用sharp数组相对于点x,y绘制形状 map[nx][ny]=ID; }

}

cout<<\■\

void Tank::Redraw()//擦除坦克,原理同上 { int i; int nx,ny; for(i=0;i<6;i++) { nx=hotpoint[0]+sharp[Direction][i*2]; ny=hotpoint[1]+sharp[Direction][i*2+1]; map[nx][ny]=Empty; SetPos((ny+1)*2,nx+1); cout<<\ } }

int Tank::Judge(int x,int y,int dir)//判断当前是否可以绘制坦克 { int i; int nx,ny; for(i=0;i<6;i++) {

}

nx=x+sharp[dir][i*2]; ny=y+sharp[dir][i*2+1]; if(nx<0||nx>=23||ny<0||ny>=23||map[nx][ny]!=Empty)//不能绘制,返回1 return 1; }

return 0;

void Tank::Running()//坦克运行函数 { int newD;

//坦克的运行 while(1) { if(Life==0) {

EnemyExist=0;//敌人不存在 return; }

if(GameOver==1) return;

if(FireEnable==1&&GameOver==0)//如果可以开火 {

WaitForSingleObject(Mutex,INFINITE);//线程拥有互斥对象 FireEnable=0;//设为不可开火 HANDLE bullet=CreateThread(NULL,0,Bulletfly,&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(hotpoint[0]-1,hotpoint[1],newD)==0) { hotpoint[0]--; Direction=newD; } else

C++大作业坦克大战

#include#include#include#include#includeusingnamespacestd;HANDLEMutex=CreateMutex(NULL,FALSE,NULL);//互斥对象intGameOver=0;in
推荐度:
点击下载文档文档为doc格式
1f5353961o34ka394oz4
领取福利

微信扫码领取福利

微信扫码分享