坦克大战俄罗斯方块原码CC++精品视频集.docx

上传人:b****7 文档编号:9734503 上传时间:2023-02-06 格式:DOCX 页数:44 大小:40.80KB
下载 相关 举报
坦克大战俄罗斯方块原码CC++精品视频集.docx_第1页
第1页 / 共44页
坦克大战俄罗斯方块原码CC++精品视频集.docx_第2页
第2页 / 共44页
坦克大战俄罗斯方块原码CC++精品视频集.docx_第3页
第3页 / 共44页
坦克大战俄罗斯方块原码CC++精品视频集.docx_第4页
第4页 / 共44页
坦克大战俄罗斯方块原码CC++精品视频集.docx_第5页
第5页 / 共44页
点击查看更多>>
下载资源
资源描述

坦克大战俄罗斯方块原码CC++精品视频集.docx

《坦克大战俄罗斯方块原码CC++精品视频集.docx》由会员分享,可在线阅读,更多相关《坦克大战俄罗斯方块原码CC++精品视频集.docx(44页珍藏版)》请在冰豆网上搜索。

坦克大战俄罗斯方块原码CC++精品视频集.docx

坦克大战俄罗斯方块原码CC++精品视频集

C/C++精品视频集

这是我收集的部分C/C++精品视频集.

其中部分下载地址:

2015-04-13C语言精髓所在——指针的艺术

链接:

密码:

nivq

2015-04-16C++打造酷炫鼠标-Vico老师.

链接:

密码:

5j3z

2015-04-24C++开发最牛贪吃蛇游戏------盛大内部核心技术

链接:

密码:

1n8e

 

视频太多没一一上传.

如果你需要更多可以加QQ:

1329938469

 

下面是《《坦克大战》》和《《俄罗斯方块》》

 

坦克大战:

(2页到18页)

#include

#include

#include

#include

#include

usingnamespacestd;

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

intGameOver=0;

intlevel=0;

intmap[23][23];

//坦克种类,Normal为玩家坦克

#defineNormal0

#defineRed1

#defineBlue2

#defineGreen3

//方向的宏定义

#defineUp0

#defineDown1

#defineLeft2

#defineRight3

//地图标记的宏定义

#defineEmpty0

#definePlayer1

#definePlayerBullet2

#defineEnemyBullet3

#defineEnemy4

intKill;

intKillRed;

intKillGreen;

intEnemyExist;

voidSetPos(inti,intj)//设定光标位置

{

COORDpos={i,j};

HANDLEOut=GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleCursorPosition(Out,pos);

}

voidHideCurSor(void)//隐藏光标

{

CONSOLE_CURSOR_INFOinfo={1,0};

HANDLEOut=GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleCursorInfo(Out,&info);

}

intsharp[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},

};//此数组用来保存坦克各个方向的形状信息

DWORDWINAPIBulletfly(LPVOIDlpParameter);//子弹函数申明

voidUpdata();//更新界面信息函数申明

classTank//坦克类

{

private:

intDirection;//方向

inthotpoint[2];//活动点

intSpeed;//速度

intFirePower;//火力

public:

Tank(intdir,inthot1,inthot2,inttyp,intspe,intfirepow)//构造函数

{

Direction=dir;

hotpoint[0]=hot1;

hotpoint[1]=hot2;

Type=typ;

Speed=spe;

FirePower=firepow;

}

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

intID;//坦克在MAP中的标记(详见宏定义)

intFireEnable;//是否可以开火

intLife;//生命值

voidRunning();//运行函数

intJudge(intx,inty,intID);//判断是否可以绘制坦克

voidDrawTank();//重绘坦克

voidRedraw();//擦除坦克

intGetSpeed()//获取速度

{

returnSpeed;

}

intGetFire()//获取火力

{

returnFirePower;

}

intGetDirection()//获取方向

{

returnDirection;

}

intGetHotX()//获取活动点坐标

{

returnhotpoint[0];

}

intGetHotY()

{

returnhotpoint[1];

}

voidIncreaseFire()//火力+

{

FirePower++;

}

voidIncreaseSpeed()//速度+

{

Speed++;

}

voidChangeDirection(intnewD)//改变方向

{

Direction=newD;

}

voidChangePos(intx,inty)//改变活动点

{

hotpoint[0]=x;

hotpoint[1]=y;

}

};

Tankplayer(Right,0,0,Normal,1,1);//玩家

Tankenemy(Left,20,0,Red,1,1);//敌人

voidTank:

:

DrawTank()//绘制坦克

{

inti;

intnx,ny;

if(Type==Red)

SetConsoleTextAttribute(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|FOREGROUND_GREEN);

elseif(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<<"■";

}

}

voidTank:

:

Redraw()//擦除坦克,原理同上

{

inti;

intnx,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<<"";

}

}

intTank:

:

Judge(intx,inty,intdir)//判断当前是否可以绘制坦克

{

inti;

intnx,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

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,&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

{

if(Judge(hotpoint[0],hotpoint[1],newD)==0)

Direction=newD;

}

}

elseif(newD==Down)

{

Redraw();

if(Judge(hotpoint[0]+1,hotpoint[1],newD)==0)

{

hotpoint[0]++;

Direction=newD;

}

else

{

if(Judge(hotpoint[0],hotpoint[1],newD)==0)

Direction=newD;

}

}

elseif(newD==Left)

{

Redraw();

if(Judge(hotpoint[0],hotpoint[1]-1,newD)==0)

{

hotpoint[1]--;

Direction=newD;

}

else

{

if(Judge(hotpoint[0],hotpoint[1],newD)==0)

Direction=newD;

}

}

elseif(newD==Right)

{

Redraw();

if(Judge(hotpoint[0],hotpoint[1]+1,newD)==0)

{

hotpoint[1]++;

Direction=newD;

}

else

{

if(Judge(hotpoint[0],hotpoint[1],newD)==0)

Direction=newD;

}

}

if(GameOver==0&&Life!

=0)

DrawTank();

ReleaseMutex(Mutex);//释放互斥对象

Sleep(500-80*Speed);

}

}

/*********************子弹线程函数*******************/

DWORDWINAPIBulletfly(LPVOIDlpParameter)

{

int*ID=(int*)lpParameter;//ID用来获取发射子弹坦克的ID

intPos[2];//子弹活动点

intdirection;

intSpeed;

inttype;

inthit=0;//击中标记

intoldx,oldy;//旧活动点

intflag=0;//子弹是否有移动的标记

if(*ID==Player)//如果是玩家坦克

{

type=PlayerBullet;

direction=player.GetDirection();

Speed=player.GetFire();

Pos[0]=player.GetHotX();

Pos[1]=player.GetHotY();

}

elseif(*ID==Enemy)//如果是敌人坦克

{

type=EnemyBullet;

direction=enemy.GetDirection();

Speed=enemy.GetFire();

Pos[0]=enemy.GetHotX();

Pos[1]=enemy.GetHotY();

}

if(direction==Up)//根据坦克的位置和方向确定子弹的初始坐标

{

Pos[0]--;

Pos[1]++;

}

elseif(direction==Down)

{

Pos[0]+=3;

Pos[1]++;

}

elseif(direction==Left)

{

Pos[0]++;

Pos[1]--;

}

elseif(direction==Right)

{

Pos[0]++;

Pos[1]+=3;

}

//子弹的运行

while

(1)

{

WaitForSingleObject(Mutex,INFINITE);//这个不再注释了。

if(flag==1&&hit!

=1)//擦除原位置

{

map[oldx][oldy]=Empty;

SetPos((oldy+1)*2,oldx+1);

cout<<"";

}

if(GameOver==1)

return0;

if(hit==1||Pos[0]<0||Pos[0]>22||Pos[1]<0||Pos[1]>22)//如果击中

{

ReleaseMutex(Mutex);

Sleep(500);

if(type==PlayerBullet)

player.FireEnable=1;

elseif(type=EnemyBullet)

enemy.FireEnable=1;

break;

}

switch(map[Pos[0]][Pos[1]])//子弹经过的MAP的标记

{

caseEmpty:

//如果是空位置就绘制子弹

map[Pos[0]][Pos[1]]=type;

SetPos((Pos[1]+1)*2,Pos[0]+1);

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);

cout<<"■";

break;

casePlayer:

//如果是玩家位置

if(type!

=PlayerBullet)

{

player.Life--;//生命减少

if(player.Life<=0)

GameOver=1;

}

Updata();

hit=1;

break;

caseEnemy:

//如果是敌人位置

if(type!

=PlayerBullet)

hit=1;

else

{

hit=1;

Kill++;

if(Kill%20==0&&player.Life<5)//击杀数++

player.Life++;

if(enemy.Type==Red)//如果击杀红坦克

{

KillRed++;

if(KillRed%10==0&&player.GetFire()<5)

player.IncreaseFire();

}

if(enemy.Type==Green)///如果击杀绿坦克

{

KillGreen++;

if(KillGreen%10==0&&player.GetSpeed()<5)

player.IncreaseSpeed();

}

enemy.Redraw();//擦除敌人

enemy.Life=0;//敌人死亡

}

Updata();

break;

}

oldx=Pos[0];

oldy=Pos[1];

if(direction==Up)//子弹移动

Pos[0]--;

elseif(direction==Down)

Pos[0]++;

elseif(direction==Left)

Pos[1]--;

elseif(direction==Right)

Pos[1]++;

ReleaseMutex(Mutex);

flag=1;

Sleep(60-10*Speed);

}

return0;

}

 

/*************************敌人线程函数***************************/

DWORDWINAPITankRuning(LPVOIDlpParameter)

{

Sleep(400);

intPos;

intStart[2];//敌人起始地址

inttyp;

intfire;

intspe;

while

(1)

{

if(GameOver==1)

return0;

srand((int)time(0));//随机出敌人起始地址

Pos=rand()%4;

if(Pos==0)

{

Start[0]=2;

Start[0]=2;

}

elseif(Pos==1)

{

Start[0]=2;

Start[1]=18;

}

elseif(Pos==2)

{

Start[0]=18;

Start[1]=2;

}

elseif(Pos==3)

{

Start[0]=18;

Start[1]=18;

}

if(player.Judge(Start[0],Start[1],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=Tank(Down,Start[0],Start[1],typ,spe,fire);//重新生成敌人坦克

enemy.ID=Enemy;

enemy.Life=1;

enemy.FireEnable=1;

ReleaseMutex(Mutex);

enemy.Running();

return0;

}

 

voidInit()//初始化函数

{

Kill=0;

KillRed=0;

KillGreen=0;

player=Tank(Left,0,0,Normal,1,1);

enemy=Tank(Left,0,0,Red,1,1);

player.Life=2;

player.FireEnable=1;

enemy.Life=0;

enemy.FireEnable=1;

player.ID=Player;

enemy.ID=Enemy;

EnemyExist=0;

}

voidUpdata()//更新界面信息

{

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);

inti;

SetPos(53,0);

cout<<"生命值:

";

SetPos(53,1);

for(i=0;i<5;i++)

{

if(i

cout<<"■";

else

cout<<"";

}

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);

SetPos(53,3);

cout<<"移动速度:

";

SetPos(53,4);

for(i=0;i<5;i++)

{

if(i

cout<<"■";

else

cout<<"";

}

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSIT

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

当前位置:首页 > 工程科技 > 冶金矿山地质

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

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