不错的一个游戏链接(C++源代码)

2022年1月25日 | 分类: 【编程】

建议在理解的基础之上玩:

https://blog.csdn.net/Guo_Clark/article/details/119206353?spm=1001.2101.3001.6650.11&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-11.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-11.pc_relevant_paycolumn_v3&utm_relevant_index=13

8款经典小游戏

收集了8款c++经典小游戏

1.贪吃蛇

/************************贪吃蛇***********************/
/**********************2012-11-20*********************/

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

/*** 光标定位 ***/
HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord;

void locate(int x,int y)
{
coord.X=y;
coord.Y=x;
SetConsoleCursorPosition(hout,coord);
};

/*** 隐藏光标 ***/
void hide()
{
CONSOLE_CURSOR_INFO cursor_info={1,0};
SetConsoleCursorInfo(hout, &cursor_info);
}

/*** 生成随机数 ***/
double random(double start, double end)
{
return start+(end-start)*rand()/(RAND_MAX + 1.0);
}

/*** 定义地图的长宽,蛇的坐标,长度,方向,食物的位置 ***/
int m,n;

struct node
{
int x,y;
}snake[1000];

int snake_length,dir;
node food;
int direct[4][2]={{-1,0},{1,0},{0,-1},{0,1}};

/*** 输出墙 ***/
void print_wall()
{
cout << " ";
for (int i=1;i<=n;i++)
cout << "-";
cout << endl;
for (int j=0;j<=m-1;j++)
{
cout << "|";
for (int i=1;i<=n;i++) cout << " ";
cout << "|" << endl;
}
cout << " ";
for (int i=1;i<=n;i++)
cout << "-";
}

/*** 首次输出蛇,其中snake[0]代表头 ***/
void print_snake()
{
locate(snake[0].x,snake[0].y);
cout << "@";
for (int i=1;i<=snake_length-1;i++)
{
locate(snake[i].x,snake[i].y);
cout << "*";
}
}

/*** 判断是否撞墙或者自撞 ***/
bool is_correct()
{
if (snake[0].x==0 || snake[0].y==0 || snake[0].x==m+1 || snake[0].y==n+1) return false;
for (int i=1;i<=snake_length-1;i++)
{
if (snake[0].x==snake[i].x && snake[0].y==snake[i].y) return false;
}
return true;
}

/*** 随机生成并输出食物位置 ***/
bool print_food()
{
srand((unsigned)time(0));
bool e;
while (1)
{
e=true;
int i=(int) random(0,m)+1,j=(int) random(0,n)+1;
food.x=i;food.y=j;
for (int k=0;k<=snake_length-1;k++)
{
if (snake[k].x==food.x && snake[k].y==food.y)
{
e=false;break;
}
}
if (e) break;
}
locate(food.x,food.y);
cout <=1;i–)
snake[i]=snake[i-1];
snake[0].x+=direct[dir][0];
snake[0].y+=direct[dir][1];
locate(snake[1].x,snake[1].y);
cout << "*";
/*** 吃到了食物 ***/
if (snake[0].x==food.x && snake[0].y==food.y)
{
snake_length++;
e=true;
snake[snake_length-1]=temp;
}
/*** 输出此时蛇状态 ***/
if (!e)
{
locate(temp.x,temp.y);
cout << " ";
}
else
print_food();
locate(snake[0].x,snake[0].y);
cout << "@";
/*** 如果自撞 ***/
if (!is_correct())
{
system("cls");
cout << "You lose!" << endl << "Length: " << snake_length << endl;
return false;
}
return true;
}

/*** 主函数 ***/
int main()
{
cout << "——————–贪吃蛇———————" << endl;
cout << "请注意窗口大小,以免发生错位.建议将窗口调为最大." << endl;
cout << "先选择难度.请在1-10中输入1个数,1最简单,10则最难" << endl;
cout << "然后进入游戏画面,以方向键控制方向.祝你游戏愉快!" << endl;
cout << "———————————————–" << endl;
m=25;
n=40;
if (m<10 || n25 || n>40)
{
cout << "ERROR" <> hard;
if (hard100)
{
cout << "ERROR" << endl;
system("pause");
return 0;
}
/*** 数据全部初始化,包括蛇长,位置,方向 ***/
snake_length=5;
clock_t a,b;
char ch;
double hard_len;
for (int i=0;i<=4;i++)
{
snake[i].x=1;
snake[i].y=5-i;
}
dir=3;
/*** 输出初始地图,蛇与食物 ***/
system("cls");
hide();
print_wall();
print_food();
print_snake();
locate(m+2,0);
cout <=(int)(400-30*hard)*(1-sqrt(hard_len))) break;
}
/*** 接受键盘输入的上下左右,并以此改变方向 ***/
if (kbhit())
{
ch=getch();
if (ch==-32)
{
ch=getch();
switch(ch)
{
case 72:
if (dir==2 || dir==3)
dir=0;
break;
case 80:
if (dir==2 || dir==3)
dir=1;
break;
case 75:
if (dir==0 || dir==1)
dir=2;
break;
case 77:
if (dir==0 || dir==1)
dir=3;
break;
}
}
}
/*** 前进 ***/
if (!go_ahead()) break;
/*** 在最后输出此时长度 ***/
locate(m+2,12);
cout << snake_length;
}
system("pause");
return 0;
}

2.狼人杀(我修改过的)

#include //C++输入输出流库
#include //使用srand函数要用到这个库
#include //使用time函数要用到这个库
#include
#include
long long sr=0;
using namespace std;
void brc()
{
system(“cls”);
long long jy=1,wd=3;
long long sy=3,wj=3;
srand((int)time(0));
long long n=rand()%15+1;
cout<<" 你是"<<n<<"号"<<endl;
cout<<" 正在分配身份"<<endl;
Sleep(1500);
long long m[20];
for(long long i=1;i<=15;i++)
m[i]=1;
long long s[20]={0};
long long yy[20]={0};
long long l=0,w=0,j=0,p=0;
for(long long i=1;i<=15;i++)
{
do
{
long long a=rand()%4+1;
if(a==1&&l<1)
{
l++;
s[i]=1;
sr=i;
}
else if(a==2&&w<2)
{
w++;
s[i]=2;
}
else if(a==4&&p<3)
{
p++;
s[i]=4;
}
else if(a==3&&j<9
)
{
j++;
s[i]=3;
}
}
while(s[i]==0);
}
if(s[n]==1)
cout<>杀手<<"<<endl;
else if(s[n]==2)
cout<>预言家<<"<<endl;
else if(s[n]==3)
cout<>平民<<"<<endl;
else
cout<>法师<<"<<endl;
cout<<" 游戏将在5秒后开始"<<endl;
Sleep(5000);
long long c=15;
long long f=0,flag=0;
long long day=1;
long long lr;
long long tp[20]={0};
do
{
lr=0;
system("cls");
cout<<" 第"<<day<<"晚开始"<<endl;
cout<<"你是"<<n<<"号"<<endl;
long long x;
for(long long i=1;i<=15;i++)
{
if(i==n&&m[n]==1)
{
if(s[n]==1)
{
cout<<" 你是杀手"<<endl;
for(long long j=1;j<=15;j++)
if(m[j]==1&&s[j]!=1)
cout<<j<<" ";
cout<<endl;
cout<<" 你选择杀掉"<>a;
m[a]=0;
cout<<endl;
cout<<" 杀手杀了"<<a<<"号";
if(s[a]==1)
cout<<"(杀手)"<<endl;
else if(s[a]==2)
cout<<"(预言家)"<<endl;
else if(s[a]==3)
cout<<"(平民)"<<endl;
else
cout<<"(法师)"<<endl;
c–;
}
else
if(s[n]==2)
{
cout<<" 你是预言家"<<endl;
cout<<" ";
for(long long j=1;j<=15;j++)
if(m[j]==1)
cout<<j<<" ";
cout<<endl<<" 你选择预言谁的身份"<>a;
if(s[a]==1)
{
cout<<" "<<a<<"号是杀手,请注意"<<endl;
Sleep(1000);
}
else
cout<<" "<<a<<"号是好人"<<endl;
}
}
else if(s[i]==1&&m[i]==1)
{
long long a;
do
{
a=rand()%15+1;
}
while(a==i||m[a]==0||s[a]==1);
cout<<" 杀手杀掉了"<<a<<"号";
if(s[a]==1)
cout<<"(杀手)"<<endl;
else if(s[a]==2)
cout<<"(预言家)"<<endl;
else if(s[a]==3)
cout<<"(平民)"<<endl;
else
cout<<"(法师)"<0)
{
sy–;
f=1;
long long b;
do
{
b=rand()%15+1;
b=rand()%15+1;
}
while(b==i||m[b]==0);
m[b]=0;
cout<<" 法师毒死了"<<b<<"号";
if(s[b]==1)
cout<<"(杀手)"<<endl;
else if(s[b]==2)
cout<<"(预言家)"<<endl;
else if(s[b]==3)
cout<<"(平民)"<<endl;
c–;
if(s[b]==1&&n!=sr)
{
cout<<endl<<" "<<sr<<"号是杀手!";
cout<<endl<<" 杀手已死亡!"<<endl;
cout<<" 游戏结束"<1)
{
if(jy>0)
{
jy–;
f=1;
long long b;
do
{
b=rand()%15+1;
}
while(b==i||m[b]==1);
c++;
cout<<" 法师复活了"<<b<<"号"<<endl;
m[b]=1;
if(m[sr]==0&&n!=sr)
{
cout<<endl<<" "<<sr<<"号是杀手!";
cout<<endl<<" 杀手已死亡!"<<endl;
cout<<" 游戏结束"<<endl;
return ;
}
break;//
}
}

}
}
}
if(s[n]==4)
{
cout<<" 你是法师"<<endl;
cout<<"存活状况:"<<endl;
for(long long j=1;j<=15;j++)
if(m[j]==1)
cout<<j<<" ";
cout<<endl;
cout<<" 你选择 1.* 杀 *还是 2.* 救 * 3.* 啥都不做 *"<>a;
if(a==3) break;
if(a==1)
{
if(wd>0)
{
wd–;
f=1;
cout<<" 你选择了杀人"<<endl;
for(long long i=1;i<=15;i++)
if(m[i]==1)
cout<<i<<" ";
cout<>b;
if(s[b]==1)
cout<<"(杀手)"<<endl;
else if(s[b]==2)
cout<<"(预言家)"<<endl;
else if(s[b]==3)
cout<<"(平民)"<<endl;
else
cout<<"(法师)"<<endl;
m[b]=0;
c–;
if(m[sr]==0&&n!=sr)
{
cout<<endl<<" "<<sr<<"号是杀手!";
cout<<endl<<" 杀手已死亡!"<<endl;
cout<<" 游戏结束"<<endl;
return ;
}
}
else
{
cout<>毒药<<不足"<0)
{
wj–;
f=1;
cout<<"你选择了复活"<<endl;
cout<<"阵亡名单:"<<endl;
for(long long i=1;i<=15;i++)
if(m[i]==0)
cout<<i<<"号,身份:"<<s[i]<<" "<>b;
m[b]=1;
c++;
}
else
{
cout<>复活药水<<不足"<<endl;
}
}
}
}
Sleep(1000);
long double p[20]={0};
cout<<" 第"<<day<<"晚结束"<<endl;
cout<<endl;
if(m[n]==0)
{
cout<>死<<了";
break;
}

cout<<" 存活:"<<endl;
cout<<" ";
for(long long i=1;i<=15;i++)
if(m[i]==1)
cout<<i<<" ";
cout<<endl;
cout<<" 请投票…."<<endl;
for(long long i=1;i<=15;i++)
{
if(i==n&&m[n]==1)
{
cout<<endl;
cout<<" 你选择投几号"<>a;
if(a==99)
for(long long i=1;i<=15;i++)
if(m[i]==1)
cout<<" "<<i<<"."<<s[i]<4)
p[a]+=1.5;
else
p[a]++;
cout<<endl;
cout<<" "<<i<“<<a<<endl;
if(s[a]==3)
{
tp[a]=i;
}
}
else if(s[i]==1&&m[i]==1)
{
long long a;
do
{
a=rand()%15+1;
}
while(m[a]==0||a==i||s[a]==1);
p[a]++;
cout<<" "<<i<“<<a<<endl;
if(s[a]==3)
{
tp[a]=i;
}
}
else if(s[i]==2&&m[i]==1)
{
if(flag!=0)
{
p[f]++;
cout<<" "<<i<“<<flag<<endl;
}
else
{
long long a;
do
{
a=rand()%15+1;
}
while(m[a]==0||a==i||yy[a]==3);
p[a]++;
if(s[a]==3)
{
tp[a]=i;
}
cout<<" "<<i<“<<a<<endl;
}
}
else if(s[i]==3&&m[i]==1)
{
if(tp[i]==0)
{
long long a;
do
{
a=rand()%15+1;
}
while(m[a]==0||a==i);
p[a]++;
cout<<" "<<i<“<<a<<endl;
}
else
{
if(m[tp[i]]==1)
{
p[tp[i]]++;
cout<<" "<<i<“<<tp[i]<<endl;
}
else
{
long long a;
do
{
a=rand()%15+1;
}
while(m[a]==0||a==i);
p[a]++;
cout<<" "<<i<“<<a<<endl;
}
}
}
else if(s[i]==4&&m[i]==1)
{
long long a;
do
{
a=rand()%15+1;
}
while(m[a]==0||a==i);
p[a]++;
cout<<" "<<i<“<<a<<endl;
}
}
system("cls");
cout<<" 投票情况:"<<endl;
for(long long i=1;i<=15;i++)
if(m[i]==1)
cout<<" "<<i<<"号"<<" 票数:"<<p[i]<<endl;
long long sw,max=-100;
for(long long i=1;imax)
{
sw=i;
max=p[i];
}
}
m[sw]=0;
cout<<" "<<sw<<"死了"<<endl;
c–;
cout<<" "<<sw<<"号的身份是";
if(s[sw]==1)
cout<<"杀手"<<endl;
else if(s[sw]==2)
cout<<"预言家"<<endl;
else if(s[sw]==3)
cout<<"平民"<<endl;
else
cout<<"法师"<<endl;
if(s[sw]==1&&n!=sr)
{
cout<<endl<<" "<<sr<<"号是杀手!";
cout<<endl<<" 杀手已死亡!"<<endl;
cout<<" 游戏结束"<<endl;
return ;
}
day++;
if(s[n]!=1)
{
for(long long i=1;i<=15;i++)
if(s[i]==1&&m[i]==1)
lr=1;
}
else
{
if(s[n]==1&&c==2)
lr=0;
}
system("pause");
cout<<endl;
if(m[sr]==0&&n!=sr)
{
cout<<endl<<" "<<sr<<"号是杀手!"<<endl;
cout<<endl<<" 杀手已死亡!"<<endl;
cout<<" 游戏结束"<1);
if(sr==n&&m[n]==1)
{
cout<<" 你杀掉了所有人!!!"<<endl;
}
cout<<" 游戏结束"<<endl;
return ;
}
int main()
{
srand((int)time(0));
char a='1';
while(1)
{
system("cls");
cout<<" 杀手游戏"<<endl;
cout<<"————————————————————————————————————————";
cout<<" 1.开始游戏"<<endl;
cout<<" 2.查看游戏规则"<<endl;
a=getch();
if(a=='1')
{
cout<<" 1. 15人场"<<endl;
cout<<" 2. 30人娱乐战(10猎人)”<<endl;
a='2';
while(a=='2')
{
a=getch();
switch(a)
{
case '1':
brc();
break;
}
if(a=='1')
break;
}
if(a=='1')
break;
}
else if(a=='2')
{
cout<<"杀手:每当晚上的时候可使用杀人权杀掉一人"<<endl;//1
cout<<"预言家:每天晚上可以知道一个人的身份"<<endl;//2
cout<<"平民:无技能,当玩家是平民时,在第5天拥有1.5票的投票权"<<endl;//3
cout<<"猎人:此身份仅限于30人娱乐局中,死亡后可带走一人"<<endl;
cout<<"投票细则:\n(游戏中除了你以外全是由超级AI人工代替)"<<endl;
cout<<"预言家如果预言到杀手将一直对他投票,如果预言到好人将永远不会对他投票"<<endl;
cout<<"平民将投上一个晚上对他投票他的人"<<endl;
cout<<"********利用好超级AI游戏规则找出杀手**********"<<endl;
system("pause");
}
}
return 0;
}

3.坦克

#include

#include

#include

//里规格:长39*2=78 (真坐标)(假坐标宽为39) 高39

//外规格:长41*2=82 (真坐标)(假坐标宽为41) 高41

#define UP 1

#define DOWN 2

#define LEFT 3

#define RIGHT 4

#define MAX_LEVEL 8

#define BULLET_NUM 20

#define MAX_LIFE 4

//程序中未写入函数参数表中且未说明的变量只有map二维数组,level_info数组和level

/*
此程序中涉及的x,y类的坐标值,分为以下两种:

假坐标:这里的坐标指的是以一个■长度为单位的坐标,而不是真正的coord坐标 (用于map数组的坐标)

真坐标:头文件自带的坐标结构coord中的坐标(也可以说是控制台里的真正坐标值)

区别:纵坐标y两值一致,假横坐标x值与真正coord横坐标(真坐标)关系是 x * 2 = coord 横坐标

coord横坐标既指GoTo函数中的x参数,因为本程序游戏界面以一个■长度为基本单位,

可以说涉及的coord横坐标全是偶数。既假坐标要变真坐标(变真坐标才能发挥真正作用),横坐标须乘以2

*/

typedef struct //这里的出现次序指的是一个AI_tank变量中的次序,游戏共有四个AI_tank变量

{ //∵设定每个AI_tank每种特殊坦克只出现一次 ∴fast_tank & firm_tank 最多出现次数不超过1

int fast_tank_order; //fast_tank出现的次序(在第fast_tank_order次复活出现,从第0次开始),且每个AI_tank只出现一次

int firm_tank_order; //firm_tank出现的次序,同上

} LevInfo; //关卡信息(准确说是该关出现的坦克信息)

LevInfo level_info [MAX_LEVEL] = {{-1,-1},{3,-1},{-1,3},{2,3},{2,3},{2,3},{2,3},{2,3}}; //初始化,-1代表没有该类型坦克

typedef struct //子弹结构体

{

int x,y; //子弹坐标,假坐标

int direction; //子弹方向变量

bool exist; //子弹存在与否的变量,1为存在,0不存在

bool initial; //子弹是否处于建立初状态的值,1为处于建立初状态,0为处于非建立初状态

bool my; //区分AI子弹与玩家子弹的标记,0为AI子弹,1为玩家(我的)子弹

} Bullet;

Bullet bullet [BULLET_NUM]; //考虑到地图上不太可能同时存在20颗子弹,所以数组元素设置20个

typedef struct //坦克结构体

{

int x,y; //坦克中心坐标

int direction; //坦克方向

int color; //颜色参方向数,1到6分别代表不同颜色,具体在PrintTank函数定义有说明

int model; //坦克图案模型,值为1,2,3,分别代表不同的坦克图案,0为我的坦克图案,AI不能使用

int stop; //只能是AI坦克使用的参数,非0代表坦克停止走动,0为可以走动

int revive; //坦克复活次数

int num; //AI坦克编号(固定值,为常量,初始化函数中定下)0~3

int CD; //发射子弹冷却计时

bool my; //是否敌方坦克参数,我的坦克此参数为1,为常量

bool alive; //存活为1,不存活为0

} Tank;

Tank AI_tank[4] , my_tank; //my_tank为我的坦克,Ai_tank 代表AI坦克

//∵所有的函数都有可能对全局变量map进行读写(改变),

//∴函数中不另说明是否会对全局变量map读写

//基本操作与游戏辅助函数

void GoToxy(int x,int y); //光标移动

void HideCursor(); //隐藏光标

void keyboard (); //接受键盘输入

void Initialize(); //初始化(含有对多个数据的读写)

void Stop(); //暂停

void Getmap(); //地图数据存放与获取

void Frame (); //打印游戏主体框架

void PrintMap(); //打印地图(地图既地图障碍物)(含对level的读取)

void SideScreen (); //副屏幕打印

void GameCheak(); //检测游戏输赢

void GameOver( bool home ); //游戏结束

void ClearMainScreen(); //主屏幕清屏函数∵system(“cls”)后打印框架有一定几率造成框架上移一行的错误∴单独编写清屏函数

void ColorChoose(int color); //颜色选择函数

void NextLevel(); //下一关(含有对level全局变量的读写)

//子弹部分

void BuildAIBullet(Tank *tank); //AI坦克发射子弹(含有对my_tank的读取,只读取了my_tank坐标)

void BuildBullet (Tank tank); //子弹发射(建立)(人机共用)(含全局变量bullet的修改)我的坦克发射子弹直接调用该函数,AI通过AIshoot间接调用

void BulletFly (Bullet bullet[BULLET_NUM]); //子弹移动和打击(人机共用),

void BulletHit (Bullet* bullet); //子弹碰撞(人机共用)(含Tank全局变量的修改),只通过BulletFly调用,子弹间的碰撞不在本函数,子弹间碰撞已在BulletShoot中检测并处理

void PrintBullet (int x,int y,int T); //打印子弹(人机共用)

void ClearBullet (int x,int y,int T); //清除子弹(人机共用)

int BulletCheak (int x,int y); //判断子弹前方情况(人机共用)

//坦克部分

void BuildAITank (int* position, Tank* AI_tank); //建立AI坦克

void BuildMyTank (Tank* my_tank); //建立我的坦克

void MoveAITank (Tank* AI_tank); //AI坦克移动

void MoveMyTank (int turn); //我的坦克移动,只通过keyboard函数调用,既键盘控制

void ClearTank (int x,int y); //清除坦克(人机共用)

void PrintTank (Tank tank); //打印坦克(人机共用)

bool TankCheak (Tank tank,int direction); //检测坦克dirtection方向的障碍物,返值1阻碍,0 畅通

int AIPositionCheak (int position); //检测AI坦克建立位置是否有障碍物AIPositionCheak

//DWORD WINAPI InputX(LPVOID lpParameter); //声明线程函数,用于检查X键输入并设置X键的输入冷却时间

//注意map数组应是纵坐标在前,横坐标在后,既map[y][x],(∵数组行长度在前,列长度在后)

//map里的值: 个位数的值为地图方块部分,百位数的值为坦克,子弹在map上没有值(子弹仅仅是一个假坐标)

//map里的值: 0为可通过陆地,1为红砖,2黄砖,5为水,100~103为敌方坦克,200为我的坦克,

//全局变量

int map[41][41]; //地图二维数组

int key_x; // X键是否被“读入”的变量,也是子弹是否可以发射的变,

int bul_num; //子弹编号

int position; //位置计数,对应AI坦克生成位置,-1为左位置,0为中间,1为右,2为我的坦克位置

int speed=7; //游戏速度,调整用

int level=1; //游戏关卡数

int score=0; //游戏分数

int remain_enemy; //剩余敌人(未出现的敌人)

char* tank_figure[4][3][4]=

{

{

{“◢┃◣”, “◢━◣”, “◢┳◣”, “◢┳◣”},

{“┣●┫”, “┣●┫”, “━●┃”, “┃●━”},

{“◥━◤”, “◥┃◤”, “◥┻◤”, “◥┻◤”}

},

{

{“┏┃┓”, “┏┳┓”, “┏┳┓”, “┏┳┓”},

{“┣●┫”, “┣●┫”, “━●┫”, “┣●━”},

{“┗┻┛”, “┗┃┛”, “┗┻┛”, “┗┻┛”}

},

{

{“┏┃┓”, “◢━◣”, “┏┳◣”, “◢┳┓”},

{“┣●┫”, “┣●┫”, “━●┃”, “┃●━”},

{“◥━◤”, “┗┃┛”, “┗┻◤”, “◥┻┛”}

},

{

{“╔┃╗”, “╔╦╗”, “╔╦╗”, “╔╦╗”},

{“╠█╣”, “╠█╣”, “━█╣”, “╠█━”},

{“╚╩╝”, “╚┃╝”, “╚╩╝”, “╚╩╝”}

}

};

int main () //主函数

{

int i;

unsigned int interval[12]={1,1,1,1,1,1,1,1,1,1,1,1} ; //间隔计数器数组,用于控制速度

srand(time(NULL)); //设置随机数种子(若不设置种子而调用rand会使每次运行的随机数序列一致)随机数序列指:如首次调用rand得到1,第二次得2,第三次3,则此次随机数序列为1,2,3

HideCursor(); //隐藏光标

system(“mode con cols=112 lines=42”); //控制窗口大小

Frame (); //打印游戏主体框架

Initialize(); //初始化,全局变量level初值便是1

// HANDLE h1 , h2 ; //定义句柄变量

for(;;)

{

if(interval[0]++%speed==0) //速度调整用,假设interval[0]为a, 语句意为 a % 2==0,a=a+1;

{

GameCheak(); //游戏胜负检测

BulletFly ( bullet );

for(i=0 ; i<=3 ; i++) //AI坦克移动循环

{

if(AI_tank[i].model==2 && interval[i+1]++%2==0) //四个坦克中的快速坦克单独使用计数器1,2,3,4

MoveAITank( & AI_tank[i]);

if(AI_tank[i].model!=2 && interval[i+5]++%3==0) //四个坦克中的慢速坦克单独使用计数器5,6,7,8

MoveAITank( & AI_tank[i]);

}

for(i=0;i<=3;i++) //建立AI坦克部分

if(AI_tank[i].alive==0 && AI_tank[i].revive<4 && interval[9]++%90==0) //一个敌方坦克每局只有4条命

{ //如果坦克不存活。计时,每次建立有间隔 1750 ms

BuildAITank( &position, & AI_tank[i] ); //建立AI坦克(复活)

break; //每次循环只建立一个坦克

}

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

if(AI_tank[i].alive)

BuildAIBullet(&AI_tank[i]); //AIshoot自带int自增计数CD,不使用main中的CD interval

if(my_tank.alive && interval[10]++%2==0 )

keyboard ();

if(my_tank.alive==0 && interval[11]++%30==0 && my_tank.revive 1 && GetAsyncKeyState( 0x6B )& 0x8000) // +键

{

speed–;

GoToxy(102,11); //在副屏幕打印出当前速度

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

printf(“%d “,21-speed); //副屏幕显示的速度为1~10

}

else if (speedCD==15)

{

if(!(rand()%11)) //冷却结束后在随后的每个游戏周期中有10分之一的可能发射子弹

{

BuildBullet(*tank);

tank->CD=0;

}

}

else

tank->CD++;

if(tank->CD >= 14) //AI强化部分,在冷却到达一定范围即可使用

{

if(tank->y==38 ) //如果坦克在底部(这个最优先)

{

if(tank->x direction==RIGHT) //坦克方向朝左

{

BuildBullet(*tank); //发射子弹

tank->CD=0;

}

}

else //在老家右边

if(tank->direction==LEFT) //坦克方向朝右

{

BuildBullet(*tank); //发射子弹

tank->CD=0;

}

}

else if(tank->x==my_tank.x+1 || tank->x==my_tank.x || tank->x==my_tank.x-1) //AI坦克在纵向上”炮口”对准我的坦克

{

if(tank->direction==DOWN && my_tank.y > tank->y || tank->direction==UP && my_tank.y y)

{ //若是AI朝下并且我的坦克在AI坦克下方(数值大的在下面)或者AI朝上我的坦克在AI上方

int big=my_tank.y , smal=tank->y , i;

if(my_tank.y y)

{

big=tank->y;

smal=my_tank.y;

}

for(i=smal+2;ix]!=0 || map[i][tank->x]!=5) //若有障碍

break;

if(i==big-1) //若i走到big-1说明无障碍

{

BuildBullet(*tank); //则发射子弹

tank->CD=0;

}

}

}

else if(tank->y==my_tank.y+1 || tank->y==my_tank.y || tank->y==my_tank.y-1) //AI坦克在横向上”炮口”对准我的坦克

{

if(tank->direction==RIGHT && my_tank.x > tank->x || tank->direction==LEFT && my_tank.x x)

{ //若是AI朝右并且我的坦克在AI坦克右方(数值大的在下面)或者AI朝左我的坦克在AI左方

int big=my_tank.y , smal=tank->y , i;

if(my_tank.x x)

{

big=tank->x;

smal=my_tank.x;

}

for(i=smal+2;iy][i]!=0 || map[tank->y][i]!=5) //若有障碍

break;

if(i==big-1) //若i走到big-1说明无障碍

{

BuildBullet(*tank); //则发射子弹

tank->CD=0;

}

}

}

}

}

void BuildBullet(Tank tank) //子弹发射(建立),传入结构体Tank,这里包含改变了全局变量结构体bullet

{ //∵实现方式为顺序循环建立子弹,每次调用改变的bullet数组元素都不同

switch(tank.direction) //∴为了方便,不将bullet放入参数,bullet作为全局变量使用

{

case UP :

bullet [bul_num].x = tank.x;

bullet [bul_num].y = tank.y-2;

bullet [bul_num].direction=1;

break;

case DOWN :

bullet [bul_num].x = tank.x;

bullet [bul_num].y = tank.y+2;

bullet [bul_num].direction=2;

break;

case LEFT :

bullet [bul_num].x = tank.x-2;

bullet [bul_num].y = tank.y;

bullet [bul_num].direction=3;

break;

case RIGHT :

bullet [bul_num].x = tank.x+2;

bullet [bul_num].y = tank.y;

bullet [bul_num].direction=4;

break;

}

bullet [bul_num].exist = 1; //子弹被建立,此值为1则此子弹存在

bullet [bul_num].initial = 1; //子弹处于初建立状态

bullet [bul_num].my=tank.my; //如果是我的坦克发射的子弹bullet.my=1,否则为0

bul_num++;

if(bul_num==BULLET_NUM) //如果子弹编号增长到20号,那么重头开始编号

bul_num=0; //考虑到地图上不可能同时存在20颗子弹,所以数组元素设置20个

}

void BulletFly(Bullet bullet[BULLET_NUM]) //子弹移动和打击

{ //含有全局变量Bullet的改变

for(int i =0; i<BULLET_NUM;i++)

{

if(bullet [i].exist) //如果子弹存在

{

if(bullet [i].initial==0) //如果子弹不是初建立的

{

if(map[bullet[i].y] [bullet[i].x]==0 || map[bullet[i].y] [bullet[i].x]==5) //如果子弹坐标当前位置无障碍

ClearBullet( bullet[i].x , bullet[i].y , BulletCheak(bullet[i].x , bullet[i].y )); //抹除子弹图形

switch(bullet [i].direction) //然后子弹坐标变化(子弹变到下一个坐标)

{

case UP :(bullet [i].y)–;break;

case DOWN :(bullet [i].y)++;break;

case LEFT :(bullet [i].x)–;break;

case RIGHT :(bullet [i].x)++;break;

}

}

int collide = BulletCheak ( bullet [i].x , bullet [i].y ); //判断子弹当前位置情况,判断子弹是否碰撞,是否位于水面上。

if( collide ) //如果检测到当前子弹坐标无障碍(无碰撞)(包括在地面上与在水面上)

PrintBullet( bullet[i].x , bullet[i].y , collide); //则打印子弹,若有碰撞则不打印

else

BulletHit( & bullet [i] ); //若有碰撞则执行子弹碰撞函数

if(bullet [i].initial) //若子弹初建立,则把初建立标记去除

bullet [i].initial = 0;

for(int j=0; jx; //∴这里的Tank使用全局变量

int y=bullet->y; //这里传入的值是子弹坐标,这两个值不需要改变

int i;

if(map[y][x]==1 || map[y][x]==2) //子弹碰到砖块

{

if(bullet->direction==UP || bullet->direction==DOWN) //如果子弹是纵向的

for(i = -1 ; idirection==LEFT || bullet->direction==RIGHT) //若子弹是横向的 (与子弹纵向实现同理)

for(i = -1 ; iexist=0; //这颗子弹已经不存在了

}

else if(map[y][x]==4 || map[y][x]==6 ) //子弹碰到边框或者不可摧毁方块

bullet->exist=0;

else if(bullet->my && map[y][x]>=100 && map[y][x]exist=0;

score+=100;

GoToxy(102,5); //在副屏幕上打印出分数

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

printf(“%d “,score);

}

else if(map[y][x]==200 && bullet->my==0 ) //若敌方子弹击中我的坦克

{

my_tank.alive=0;

ClearTank(my_tank.x , my_tank.y);

bullet->exist=0;

my_tank.revive++; //我的坦克复活次数+1(∵我的坦克复活次数与生命值有关∴放在这里自减)

score-=100; //分数减少

GoToxy(102,5); //在副屏幕上打印出分数

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

printf(“%d “,score);

GoToxy(102,7); //在副屏幕打印出我的剩余生命值

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

printf(“%d “, MAX_LIFE-my_tank.revive);

}

// else if(bullet->my==0 && map[y][x]>=100 && map[y][x]exist=0;

else if(map[y][x]==9) //子弹碰到家(无论是谁的子弹)

{

bullet->exist=0;

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

GoToxy(38,37); printf(” “);

GoToxy(38,38); printf(“◢◣ “);

GoToxy(38,39); printf(“███”);

GameOver(1); //游戏结束,传入1代表老家被毁

}

}

int BulletCheak (int x,int y) //判断子弹当前位置情况,判断子弹是否碰撞,是否位于水面上。

{ //有障碍返回0,无障碍且子弹在地面返回1,子弹在水面上返回2

if(map[y][x]==0)

return 1;

else if(map[y][x]==5)

return 2;

else

return 0;

}

void PrintBullet (int x,int y,int T) //当前坐标BulletCheak 的值做参量 T

{

if(T==1) // T==1 表示子弹当前坐标在陆地上

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

else if(T==2) // T==2 表示子弹当前坐标在水面上

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

GoToxy(2*x,y);

printf(“●”);

}

void ClearBullet(int x,int y,int T) //当前坐标BulletCheak 的值做参量 T

{

GoToxy(2*x,y);

if(T==2) // T==2 表示子弹当前坐标在水面上

{

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

printf(“~”);

}

else if(T==1) // T==1 表示子弹当前坐标在陆地上

{

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE);

printf(“●”);

}

}

//position为坦克生成位置,-1为左位置,0为中间,1为右,2为我的坦克位置

void BuildAITank(int* position, Tank* AI_tank) //执行一次该函数只建立一个坦克

{ //rand函数公式:0<=rand()%(a+1)<=a 0+m<=rand()%(n-m+1)+m<=n

//rand函数实现1到n:1<=rand()%(n)+1x= 20 + 18*(*position); //20 + 18 * position 对应三个生成位置的x假坐标

AI_tank->y=2;

if(AI_tank->revive==level_info[level-1].firm_tank_order) //坦克出现(复活)次序==关卡信息(level_info)中firm tank的出现次序

{

AI_tank->model = 3; //3为firm tank的模型(外观)

AI_tank->color = 2; //颜色参数2为绿色,具体详见函数ColorChoose

}

else if(AI_tank->revive==level_info[level-1].fast_tank_order) //同上if,这里是fast_tank的

{

AI_tank->model = 2;

AI_tank->color = rand()%6+1; //若不是firm tank则随机颜色,颜色参数为1~6,分别代表不同颜色,详见函数ColorChoose

}

else //普通坦克

{

AI_tank->model = 1;

AI_tank->color = rand()%6+1; //若不是firm tank则随机颜色

}

AI_tank->alive = 1; //坦克变为存在

AI_tank->direction = 2 ; //方向朝下

AI_tank->revive++; //复活次数+1

PrintTank(*AI_tank);

(*position)++;

remain_enemy–;

GoToxy(102,9); //在副屏幕上打印剩余坦克数

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

printf(“%d “,remain_enemy);

if(*position==2) //position只能为0,1,-1,这里position循环重置

*position = -1;

return ; //若生成了一辆坦克,则结束该函数

}

}

int AIPositionCheak( int position ) //position为坦克生成位置2为我的坦克位置,其余为AI位,-1为左位,0为中间位置,1为右位

{

int x,y;

if(position==2) //2为我的坦克位置,现在暂时用不到

x=15,y=38;

else

y=2 , x= 20 + 18 * position ; //20 + 18 * position 对应三个生成位置的x假坐标

for(int i=0;i<3;i++)

for(int j=0;jalive) //如果坦克活着

{

if(AI_tank->stop!=0) //坦克是否停止运动的判断,若stop参数不为0

{

AI_tank->stop–; //则此坦克本回合停止运动

return;

}

if( !(rand()%23) ) //22分之1的概率执行方向重置

{

AI_tank->direction = rand()%4+1;

if( rand()%3 ) //在方向重置后有2分之1的概率停止走动3步的时间

{

AI_tank->stop=2;

return;

}

}

ClearTank (AI_tank->x , AI_tank->y);

if(TankCheak ( *AI_tank , AI_tank->direction)) //如果前方无障碍

switch ( AI_tank->direction )

{

case UP : AI_tank->y–; break; //上前进一格

case DOWN : AI_tank->y++; break; //下前进一格

case LEFT : AI_tank->x–; break; //左前进一格

case RIGHT: AI_tank->x++; break; //右前进一格

}

else //前方有障碍

{

if(!(rand()%4)) //3分之1的概率乱转

{

AI_tank->direction=rand()%4+1;

AI_tank->stop=2; //乱转之后停止走动3步的时间

PrintTank(*AI_tank);

return; //∵continue会跳过下面的打印函数,∴这里先打印

}

else //另外3分之2的几率选择正确的方向

{

int j;

for(j=1;jdirection) == 0) //如果前方仍有障碍

AI_tank->direction=(rand()%4+1); //则换个随机方向检测

}

}

PrintTank(*AI_tank); //打印AI坦克

}

}

void BuildMyTank (Tank* my_tank) //建立我的坦克

{

my_tank->x=15;

my_tank->y=38;

my_tank->stop=NULL;

my_tank->direction=1;

my_tank->model=0;

my_tank->color=1;

my_tank->alive=1;

my_tank->my=1;

my_tank->CD=7;

PrintTank (*my_tank) ; //打印我的坦克

}

void MoveMyTank(int turn ) //玩家专用函数,turn为keyboard函数里因输入不同方向键而传入的不同的值

{

ClearTank(my_tank.x , my_tank.y); //map 数组中“我的坦克”参数清除工作已在此函数中完成

my_tank.direction=turn; //将键盘输入的方向值传入我的坦克方向值

if(TankCheak ( my_tank , my_tank.direction )) //若此时我的坦克当前方向上无障碍

switch (turn)

{

case UP : my_tank.y–; break; //上前进一格

case DOWN : my_tank.y++; break; //下前进一格

case LEFT : my_tank.x–; break; //左前进一格

case RIGHT: my_tank.x++; break; //右前进一格

} //若坦克当前方向上有障碍则跳过坐标变化直接打印该转向的坦克

PrintTank (my_tank);

}

bool TankCheak(Tank tank,int direction) //检测坦克前方障碍函数,参量为假坐标。返值1为可通过,返值0为阻挡(人机共用)

{

switch(direction) //direction变量 1上,2下,3左,4右

{

case UP:

if (map[tank.y-2][tank.x]==0 && map[tank.y-2][tank.x-1]==0 && map[tank.y-2][tank.x+1]==0)

return 1;

else

return 0;

case DOWN:

if (map[tank.y+2][tank.x]==0 && map[tank.y+2][tank.x-1]==0 && map[tank.y+2][tank.x+1]==0)

return 1;

else

return 0;

case LEFT:

if (map[tank.y][tank.x-2]==0 && map[tank.y-1][tank.x-2]==0 && map[tank.y+1][tank.x-2]==0)

return 1;

else

return 0;

case RIGHT:

if (map[tank.y][tank.x+2]==0 && map[tank.y-1][tank.x+2]==0 && map[tank.y+1][tank.x+2]==0)

return 1;

else

return 0;

default:

printf(“错误!!”);

Sleep(5000);

return 0;

}

}

void ClearTank(int x,int y) //清除坦克函数(人机共用)

{

for(int i=0;i<3;i++)

for(int j=0;j<3;j++)

{ //将坦克占用的地图上的九格去掉

map[y+j-1][x+i-1]=0;

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN);

GoToxy(2*x+2*j-2,y+i-1);

printf(" ");

}

}

void PrintTank(Tank tank) //打印坦克(人机共用) 由于读取的Tank参数较多,故就不将参数一一传入了

{ // tank.color参数对应不同的颜色,范围 1 ~ 6

ColorChoose(tank.color); //颜色选择函数 定义一个数组里装着字符指针(既装字符串)的数组指针(指向一维数组首地址的指针)

char *(*tankF)[4] = tank_figure[tank.model]; //将二维数组首址赋初值给数组指针 model==0为我的坦克,4为电脑1坦克,8为电脑2,类推

for(int i = 0; i < 3; i++)

{

GoToxy((tank.x-1)*2 , tank.y-1+i); //在坦克中心坐标的左边,上中下三行打印

printf("%s", tankF[i][tank.direction-1]); //打印的是地址,地址既字符串

for(int j=0;j<3;j++)

if(tank.my) //若为我的坦克

map[tank.y+j-1][tank.x+i-1]=200; //在map上把"坦克"九格填满代表敌我坦克的参数。敌方此值为100~103,我方为200

else

map[tank.y+j-1][tank.x+i-1]=100+tank.num; //这样可以通过map值读取坦克编号,读取操作在BulletHit 函数

}

}

void HideCursor() //隐藏光标

{ //CONSOLE_CURSOR_INFO结构体包含控制台光标的信息,DWORD dwSize光标百分比厚度(1~100)和BOOL bVisible光标是否可见

CONSOLE_CURSOR_INFO cursor_info={1,0};

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info); //SetConsoleCursorInfo用来设置指定的控制台光标的大小和可见性。

}

void GoToxy(int x,int y) //光标移动函数,X表示横坐标,Y表示纵坐标。

{

COORD coord; //使用头文件自带的坐标结构

coord.X=x; //这里将int类型值传给short,不过程序中涉及的坐标值均不会超过short范围

coord.Y=y;

HANDLE a=GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出句柄

SetConsoleCursorPosition(a,coord); //以标准输出的句柄为参数设置控制台光标坐标

}

void ColorChoose(int color) //颜色选择函数

{

switch(color)

{

case 1: //天蓝色(我的坦克颜色)

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

break;

case 2: //绿色

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

break;

case 3: //黄色

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

break;

case 4: //红色

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

break;

case 5: //紫色

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

break;

case 6: //白色

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

break;

case 7: //深蓝色(∵颜色深难与黑色背景辨识度不高 ∴坦克颜色不选用此颜色),只用在字体颜色闪烁中

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

break;

}

}

void Stop() //暂停

{

int color=1,timing=0;

while(1)

{

if(timing++%30==0)

{

ColorChoose(color); //颜色选择

GoToxy(100,13); //副屏幕打印

printf("游戏暂停");

GoToxy(88,17);

printf("按回车键回到游戏");

GoToxy(88,18);

printf("或按 Esc键退出游戏");

if(++color==8)

color=1;

}

if (GetAsyncKeyState( 0xD )& 0x8000) //回车键

{

GoToxy(100,13); //副屏幕打印

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

printf("正在进行"); //覆盖掉原来的提示

GoToxy(88,17);

printf(" ");

GoToxy(88,18);

printf(" ");

break;

}

else if(GetAsyncKeyState( 0x1B )& 0x8000) //Esc键退出

exit(0);

Sleep(20);

}

}

void ClearMainScreen() //主屏幕清屏函数,因使用system("cls");再打印框架有一定几率造成框架上移一行的错误,所以单独编写清屏函数

{

for(int i=1;i<40;i++)

{

GoToxy(2,i);

printf(" ");

}

}

void Frame () //打印游戏主体框架

{ //SetConsoleTextAttribute为设置文本颜色和文本背景颜色函数

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

printf(" ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ ");

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

printf(" ▂▂▂▂▂▂▂▂▂▂▂▂▂ \n");

for(int i=0;i<14;i++)

{

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

printf("▕ ▏");

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

printf(" | |\n");

}

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

printf("▕ ▏");

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

printf(" |═════════════|\n");

for(int i=0;i<24;i++)

{

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

printf("▕ ▏");

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

printf(" | |\n");

}

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

printf(" ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ ");

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

printf(" ﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊\n");

SideScreen (); //打印副屏幕

}

void PrintMap() // 打印地图(地图既地图障碍物)

{

for(int j=0;j<41;j++)

for(int i=0;i<41;i++)

if(map[i][j]==6)

{

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN

|FOREGROUND_RED|FOREGROUND_BLUE|BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE);

GoToxy(2*j,i);

printf("■");

}

else if(map[i][j]==2)

{

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|BACKGROUND_GREEN|BACKGROUND_RED);

GoToxy(2*j,i);

printf("▓");

}

else if(map[i][j]==1)

{

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|BACKGROUND_GREEN|BACKGROUND_RED);

GoToxy(2*j,i);

printf("▓");

}

else if(map[i][j]==5)

{

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

GoToxy(2*j,i);

printf("~");

}

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

GoToxy(38,37); printf("◣◢");

GoToxy(38,38); printf("███"); //∵无论地图怎么变,家所在位置不变,且家的字符多种,不方便用上述方式打印

GoToxy(38,39); printf("◢█◣"); //∴直接打印(且家的map值与符号无关)

}

void GetMap() //地图存放函数

{ //map里的值: 个位数的值为地图方块部分,百位数的值为坦克

int i ,j; //map里的值: 0为可通过陆地,1为红砖,2待定,5为水,100为敌方坦克,200为我的坦克,

int Map[8][41][41]=

{

{

{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,6,6,6,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,6,6,6,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,6,6,6,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,4},

{4,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,4},

{4,6,6,6,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,6,6,6,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}

},

{

{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,6,2,2,2,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,6,2,2,2,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,6,2,2,2,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,4},

{4,1,1,1,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,6,6,6,0,0,0,4},

{4,1,1,1,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,6,6,6,0,0,0,4},

{4,1,1,1,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,6,6,6,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,1,1,1,6,6,6,6,6,6,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,1,1,1,6,6,6,6,6,6,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,1,1,1,6,6,6,6,6,6,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,6,6,6,1,1,1,2,2,2,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,6,6,6,1,1,1,2,2,2,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,6,6,6,1,1,1,2,2,2,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,6,6,6,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,6,6,6,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,6,6,6,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,1,1,1,6,6,6,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,1,1,1,6,6,6,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,1,1,1,6,6,6,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,1,1,1,6,6,6,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,1,1,1,6,6,6,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,1,1,1,6,6,6,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,6,6,6,6,6,6,6,6,6,2,2,2,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4},

{4,6,6,6,6,6,6,6,6,6,2,2,2,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4},

{4,6,6,6,6,6,6,6,6,6,2,2,2,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4},

{4,6,6,6,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,6,6,6,6,6,6,0,0,0,0,0,0,4},

{4,6,6,6,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,6,6,6,6,6,6,0,0,0,0,0,0,4},

{4,6,6,6,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,6,6,6,6,6,6,0,0,0,0,0,0,4},

{4,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,1,1,1,1,1,1,0,0,0,4},

{4,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,1,1,1,1,1,1,0,0,0,4},

{4,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,1,1,1,1,1,1,0,0,0,4},

{4,2,2,2,6,6,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,6,6,6,4},

{4,2,2,2,6,6,6,6,6,6,6,6,6,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,6,6,6,6,6,6,4},

{4,2,2,2,6,6,6,6,6,6,6,6,6,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,6,6,6,6,6,6,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,4},

{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}

},

{

{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},

{4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,1,1,1,6,6,6,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,1,1,1,6,6,6,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4},

{4,6,6,6,0,0,0,1,1,1,5,5,5,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,5,5,5,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,5,5,5,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,5,5,5,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,5,5,5,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,5,5,5,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,1,1,1,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,1,1,1,4},

{4,1,1,1,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,1,1,1,4},

{4,1,1,1,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,1,1,1,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,6,6,6,6,6,6,4},

{4,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},

{4,1,1,1,1,1,1,0,1,1,1,1,1,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},

{4,1,1,1,1,1,1,0,1,1,1,1,1,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,5,5,5,0,0,0,1,1,1,1,1,1,4},

{4,1,1,1,1,1,1,0,1,1,1,1,1,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,5,5,5,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,5,5,5,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},

{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}

},

{

{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,6,6,6,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,4},

{4,6,6,6,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,0,4},

{4,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,1,0,0,0,0,4},

{4,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4},

{4,5,5,5,0,0,0,0,1,1,1,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,4},

{4,5,5,5,0,0,0,0,1,1,1,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,4},

{4,5,5,5,0,0,0,0,1,1,1,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,5,5,5,4},

{4,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,5,5,5,4},

{4,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,5,5,5,4},

{4,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,4},

{4,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,4},

{4,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,4},

{4,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,4},

{4,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,4},

{4,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,4},

{4,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,4},

{4,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,4},

{4,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,4},

{4,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,4},

{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}

},

{

{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},

{4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,5,5,5,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,4},

{4,5,5,5,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,4},

{4,5,5,5,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,4},

{4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,4},

{4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,4},

{4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,4},

{4,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,4},

{4,5,5,5,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},

{4,5,5,5,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},

{4,5,5,5,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,4},

{4,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,4},

{4,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,4},

{4,0,0,0,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,1,1,1,0,0,0,5,5,5,4},

{4,0,0,0,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,1,1,1,0,0,0,5,5,5,4},

{4,0,0,0,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,1,1,1,0,0,0,5,5,5,4},

{4,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,4},

{4,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,4},

{4,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,4},

{4,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,0,0,0,5,5,5,1,1,1,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,4},

{4,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,0,0,0,5,5,5,1,1,1,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,4},

{4,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,0,0,0,5,5,5,1,1,1,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,4},

{4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,4},

{4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,4},

{4,0,0,0,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,4},

{4,0,0,0,5,5,5,5,5,5,5,5,5,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,4},

{4,0,0,0,5,5,5,5,5,5,5,5,5,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,4},

{4,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}

},

{

{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,4},

{4,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,0,4},

{4,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,2,2,2,2,2,2,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,4},

{4,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,2,2,2,2,2,2,2,2,0,0,0,1,1,0,0,0,0,0,0,0,1,1,4},

{4,0,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,2,2,2,2,2,2,2,2,0,0,1,1,1,0,0,0,0,0,0,0,1,1,4},

{4,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,0,0,0,0,0,0,0,0,1,1,4},

{4,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,0,0,0,0,0,0,0,0,1,1,4},

{4,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,0,0,0,0,0,0,0,0,1,1,4},

{4,1,1,0,0,0,0,0,0,0,0,0,1,1,1,2,2,2,2,6,6,6,6,6,6,2,2,2,2,1,1,1,0,0,0,0,0,1,1,1,4},

{4,1,1,0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,6,6,6,6,6,6,2,2,2,2,1,1,1,1,0,0,0,0,1,1,1,4},

{4,1,1,0,0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,6,6,6,6,6,6,2,2,2,2,1,1,1,1,0,0,0,1,1,1,1,4},

{4,0,1,1,0,0,0,0,0,0,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,0,0,1,1,1,1,4},

{4,0,1,1,1,0,0,0,0,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,1,1,1,1,1,4},

{4,0,0,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,1,1,1,1,1,4},

{4,0,0,0,1,1,1,1,1,1,1,1,1,6,6,6,6,6,6,1,1,1,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1,0,4},

{4,0,0,0,1,1,1,1,1,1,1,1,1,6,6,6,6,6,6,1,1,1,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1,0,4},

{4,0,0,0,0,1,1,1,1,1,1,1,1,6,6,6,6,6,6,1,1,1,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,0,0,4},

{4,0,0,0,0,0,1,1,1,1,1,1,1,6,6,6,0,0,0,1,1,1,0,0,0,6,6,6,1,1,1,1,1,1,1,1,1,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,1,1,1,6,6,6,0,0,0,1,1,1,0,0,0,6,6,6,1,1,1,1,1,1,1,1,1,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,1,1,1,6,6,6,0,0,0,1,1,1,0,0,0,6,6,6,1,1,1,1,1,1,1,1,1,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,4},

{4,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,4},

{4,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,4},

{4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,4},

{4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,4},

{4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,4},

{4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,4},

{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}

},

{

{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},

{4,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,6,6,6,6,6,6,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,6,6,6,6,6,6,4},

{4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,6,6,6,6,6,6,4},

{4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,1,1,1,0,0,0,0,0,0,0,0,0,6,6,6,4},

{4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,1,1,1,0,0,0,0,0,0,0,0,0,6,6,6,4},

{4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,1,1,1,0,0,0,0,0,0,0,0,0,6,6,6,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,4},

{4,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,4},

{4,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,4},

{4,6,6,6,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,1,1,1,0,0,0,4},

{4,6,6,6,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,1,1,1,0,0,0,4},

{4,6,6,6,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,1,1,1,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,4},

{4,0,0,0,6,6,6,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,4},

{4,0,0,0,6,6,6,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,4},

{4,0,0,0,6,6,6,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,4},

{4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,4},

{4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,4},

{4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,4},

{4,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,6,6,6,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,4},

{4,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,6,6,6,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,4},

{4,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,6,6,6,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,4},

{4,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,4},

{4,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,4},

{4,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,4},

{4,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,4},

{4,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,4},

{4,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,4},

{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}

},

{

{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,4},

{4,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,5,5,5,5,5,5,1,1,1,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,4},

{4,0,0,0,0,0,0,5,5,5,5,5,5,1,1,1,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,4},

{4,0,0,0,0,0,0,5,5,5,5,5,5,1,1,1,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,1,1,1,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,1,1,1,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,1,1,1,0,0,0,0,0,0,4},

{4,0,0,0,6,6,6,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,6,6,6,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,6,6,6,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,0,0,0,5,5,5,5,5,5,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,0,0,0,5,5,5,5,5,5,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,0,0,0,5,5,5,5,5,5,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,4},

{4,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,6,6,6,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,4},

{4,6,6,6,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,4},

{4,6,6,6,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,4},

{4,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},

{4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,4},

{4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,4},

{4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,4},

{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}

},

};

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

for(j=0;j<41;j++)

map[i][j]=Map[level-1][i][j];

PrintMap(); //打印地图

}

void GameOver(bool home)

{

int timing=0,color=1;

while(1)

{

if(timing++%30==0) //游戏结束原因为生命值为0

{

ColorChoose(color); //颜色选择

if(home) //游戏结束原因为老家被毁,则多打印一行字以提示玩家

{

GoToxy(37,19); //主屏幕中心打印

printf("老家被毁!");

}

GoToxy(37,20); //主屏幕中心打印

printf("游戏结束!");

GoToxy(100,13); //副屏幕打印

printf("游戏结束");

GoToxy(88,17);

printf("请按回车键重新开始!");

GoToxy(88,18);

printf("或按 Esc键退出游戏!");

if(++color==8)

color=1;

}

if (GetAsyncKeyState( 0xD )& 0x8000) //回车键

{

// system("cls"); //清屏,这里清屏后再次打印框架有一定几率造成框架上移一行的bug,因此选用自建清屏函数

// Frame (); //重新打印游戏框架

score-=500; //分数-500

ClearMainScreen(); //主屏清屏函数,无需再次打印框架

Initialize(); //从本关重新开始

break;

}

else if(GetAsyncKeyState( 0x1B )& 0x8000) //Esc键退出

exit(0);

Sleep(20);

}

}

void NextLevel()

{

int timing=0,color=1;

level++;

if(level8 通关

while(1)

{

if(timing++%5==0)

{

ColorChoose(color);

GoToxy(33,20); //主屏幕中心打印

printf(“恭喜通过全部关卡!”);

GoToxy(100,13); //副屏幕打印

printf(“已通全关”);

GoToxy(88,17);

printf(“恭喜通过全部关卡!”);

GoToxy(88,19);

printf(“按 Esc键退出游戏!”);

if(++color==8)

color=1;

}

if(GetAsyncKeyState( 0x1B )& 0x8000) //Esc键退出

exit(0);

Sleep(10);

}

}

void GameCheak()

{ //剩余敌人为0且四坦克全部不存活

if(remain_enemy=MAX_LIFE) //我的生命值(复活次数)全部用完 MAX_LIFE

GameOver(0); //游戏结束,传入0代表我的复活次数用光(生命值为0)。游戏结束有两种判断,另一种是老家被毁

}

void SideScreen () //副屏幕 行(84起,110末,若双字符宽则在108打印最后一个字)列(11上屏末,13下屏初,39下屏末。为美观最好打在38)

{ // | 第 d 关 | ” | |\n”

GoToxy(93,2);

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

printf(“第 关”);

GoToxy(92,5);

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

printf(“分 数:”);

GoToxy(92,7);

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

printf(“生 命:”);

GoToxy(86,9);

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

printf(“剩余敌方坦克:”);

GoToxy(86,11);

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

printf(“当前游戏速度: %d”,21-speed);

GoToxy(86,13);

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

printf(“当前游戏状态:”);

GoToxy(94,19);

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

GoToxy(94,24);

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

printf(“帮 助”);

GoToxy(86,27);

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

printf(“方向键 ←↑→↓ 移动”);

GoToxy(93,29);

printf(“x 键 射击”);

GoToxy(89,31);

printf(“+ – 调整游戏速度”);

GoToxy(90,33);

printf(“游戏速度范围1~20”);

GoToxy(90,35);

printf(“回车键 暂停游戏”);

GoToxy(90,37);

printf(“Esc键 退出游戏”);

/* printf(“帮 助”); //这是第二种详细说明的样式
GoToxy(86,21);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
printf(“方向键 ←↑→↓ 移动”);
GoToxy(93,23);
printf(“x 键 射击”);
GoToxy(89,25);
printf(“+ – 调整游戏速度”);
GoToxy(90,27);
printf(“游戏速度范围1~20”);
GoToxy(90,29);
printf(“回车键 暂停游戏”);
GoToxy(90,31);
printf(“Esc键 退出游戏”);
GoToxy(86,33);
printf(“敌方坦克全部消灭则过关”);
GoToxy(87,34);
printf(“己方坦克生命值为0 或”);
GoToxy(86,35);
printf(“正下方的老家被毁则失败”);
GoToxy(86,36);
printf(“己坦克与敌坦克子弹碰撞”);
GoToxy(87,37);
printf(“则抵消,敌坦克间子弹碰”);
GoToxy(86,38);
printf(“撞不抵消且可穿过敌坦克”);*/

}

void Initialize() //初始化

{

remain_enemy=16;

my_tank.revive=0; //我的坦克复活次数为0

position=0;

bul_num=0;

GetMap();

BuildMyTank( &my_tank );

for(int i=0;i<12;i++) //子弹初始化

{

bullet [i].exist=0;

bullet [i].initial=0;

}

for(int i=0;i<=3;i++) //AI坦克初始化

{

AI_tank [i].revive=0;

AI_tank [i].alive=0; //初始化坦克全是不存活的,BuildAITank()会建立重新建立不存活的坦克

AI_tank [i].stop=0;

AI_tank [i].num=i;

AI_tank [i].my=0;

AI_tank [i].CD=0;

}

GoToxy(97,2); //在副屏幕上关卡数

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

printf("%d",level);

GoToxy(102,5); //在副屏幕上打印分数

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

printf("%d ",score);

GoToxy(102,7); //在副屏幕打印我的剩余生命值

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

printf("%d", MAX_LIFE-my_tank.revive);

GoToxy(102,9); //在副屏幕上打印剩余坦克数

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

printf("%d ",remain_enemy);

GoToxy(100,13); //在副屏幕上打印状态

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

printf("正在游戏");

}

4.吃豆人

#include
#include
#include
#include
#include
#include
#include

using namespace std;

const int n = 809;

struct Point {
int x, y;
};

int dali;

int fx[4] = {-1, 27, 1, -27};
int fxfx[4][2] = {{0, -1}, {1, 0}, {0, 1}, {-1, 0}};
int dis[1000][1000]; //0:墙 1:有分的路 2:没分的路 3:怪物的家
int changdi[30][27] = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0},
{0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0},
{0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1 ,0},
{0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 3, 3, 3, 3, 3, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0},
{2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 0, 3, 3, 3, 3, 3, 0, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2},
{0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 3, 3, 3, 3, 3, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0},
{0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0},
{0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0},
{0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0},
{0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0},
{0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
{0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
};

int x, x1, x2, x3, x4, y, y1, y2, y3, y4;
int now, now1, now2, now3, now4;
int g1, g2, g3, g4;
int fangx, nextfx, last1, last2, last3, last4;
int fenshu, guozi, guaitimer;
int T1, T2, t1, t2, stopped; //T:计时 t1:玩家速度 t2:怪物速度
int f; //f:{0:继续 1:被吃 2:赢了 3:输了}
int beichi;

void color (int a) {//颜色函数
SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE), a);
}

void gotoxy(int x, int y) {//位置函数(行为x 列为y)
COORD pos;
pos.X=2*y;
pos.Y=x;
SetConsoleCursorPosition (GetStdHandle (STD_OUTPUT_HANDLE),pos);
}

void begin () {
system (“cls”);
color (11);
printf (” ★”);
color (10);
printf (“吃豆人”);
color (11);
printf (“★\n\n”);
color(7);
printf (” 正在初始化,请耐心等待”);
for (int i = 0; i <= n; i++) {
for (int j = 1; j <= n; j++) {
dis[i][j] = 900;
}
}
for (int i = 0; i <= n; i++) {
for (int j = 0; j = 0 && i + fx[j] <= n) {
int k = i + fx[j], xx = k/27, yy = k % 27, kk;
if (changdi[i / 27][i % 27] && changdi[xx][yy]) {
dis[i][k] = kk = 1;
}
}
}
}
for (int k = 0; k <= n; k++) {
if (changdi[k]) {
for (int i = 0; i <= n; i++) {
if (changdi[i]) {
for (int j = 0; j dis[i][k] + dis[k][j]) {
dis[i][j] = dis[i][k] + dis[k][j];
}
}
}
}
}
if (k % 80 == 0) {
color (13);
gotoxy (3, 12);
printf(“│”);
} else if (k % 80 == 20) {
color (13);
gotoxy (3, 12);
printf (“╱”);
} else if (k % 80 == 40) {
color (13);
gotoxy (3, 12);
printf (“─”);
} else if (k % 80 == 60) {
color(13);
gotoxy (3, 12);
printf (“╲”);
}
if (k % 60==0) {
color (11);
gotoxy (5, k / 60);
printf(“●”);
}
}
}
}

void shuru () {
char ch = getch ();
if (ch == 75) {
if (changdi[x + fxfx[0][0]][y + fxfx[0][1]] == 1 | changdi[x + fxfx[0][0]][y + fxfx[0][1]] == 2) {
fangx = nextfx = 0;
} else {
nextfx = 0;
}
} else if (ch == 80) {
if (changdi[x + fxfx[1][0]][y + fxfx[1][1]] == 1 | changdi[x + fxfx[1][0]][y + fxfx[1][1]] == 2) {
fangx = nextfx = 1;
} else {
nextfx = 1;
}
} else if (ch == 77) {
if (changdi[x + fxfx[2][0]][y + fxfx[2][1]] == 1 | changdi[x + fxfx[2][0]][y + fxfx[2][1]] == 2) {
fangx = nextfx = 2;
} else {
nextfx = 2;
}
} else if (ch == 72) {
if (changdi[x + fxfx[3][0]][y + fxfx[3][1]] == 1 | changdi[x + fxfx[3][0]][y + fxfx[3][1]] == 2) {
fangx = nextfx = 3;
} else {
nextfx = 3;
}
} else if (ch == ‘ ‘) {
stopped = (stopped + 1) % 2;
} else if (ch == ‘-‘) {
t1++;
} else if ((ch == ‘+’) && t1 – 1 > 0) {
t1–;
}
else if (ch == ‘$’) {
dali = (dali + 1) % 2;
}
}

void reset () {
system (“cls”);
color (7);
x = 22;
y = 13;
x1 = x2 = x3 = x4 = 14;
y1 = 11;
y2 = 12;
y3 = 14;
y4 = 15;
now = 607;
now1 = 389;
now2 = 390;
now3 = 392;
now4 = 393;
for (int k = 0; k <= n; k++) {
int i = k / 27, j = k % 27;
gotoxy (i, j);
if (changdi[i][j] == 1) {
color (7);
printf("·");
} else if (!changdi[i][j]) {
color (1);
printf ("■");
}
if (j==26) {
gotoxy (i, 27);
color (7);
printf ("%d", i);
}
}
gotoxy (0, 0);
gotoxy (x, y);
color (14);
printf ("●");
gotoxy (x1, y1);
color (4);
printf ("◆");
gotoxy (x2, y2);
color (5);
printf ("◆");
gotoxy (x3, y3);
color (3);
printf ("◆");
gotoxy (x4, y4);
color (2);
printf ("◆");
fangx = 0;
T1 = T2 = guaitimer = 0;
t1 = 75;
t2 = 100;
stopped = 0;
fenshu = 0;
guozi = 237;
g1 = g2 = g3 = g4 = 0;
dali = 0;
gotoxy (14, 30);
printf (" ");
}

void move1 () {
int xx, yy;
xx = x + fxfx[nextfx][0];
yy = y + fxfx[nextfx][1];
if (changdi[xx][yy]) {
if (changdi[xx][yy] == 1) {
fenshu++;
changdi[xx][yy] = 2;
}
color (14);
gotoxy (x, y);
printf (" ");
gotoxy (xx, yy);
if (!dali) {
printf ("♀");
} else {
printf ("☆");
}
now = x * 27 + y;
x = xx;
y = yy;
fangx = nextfx;
} else {
if (x == 13 && y == 0 && fangx == 0) {
xx = x;
yy = 26;
} else if (x == 13 && y == 26 && fangx == 2) {
xx = x;
yy = 0;
} else {
xx = x + fxfx[fangx][0];
yy = y + fxfx[fangx][1];
}
if (changdi[xx][yy]) {
if (changdi[xx][yy] == 1) {
fenshu++;
changdi[xx][yy] = 2;
}
color (14);
gotoxy (x, y);
printf (" ");
gotoxy (xx, yy);
if (!dali) {
printf ("♀");
} else {
printf ("☆");
}
now = x * 27 + y;
x = xx;
y = yy;
}
}
color (7);
}

void move2 () {
int haha, minhaha, xx, yy, chi = 0;
if (g1) {
minhaha = 2147483647; //相当于INT_MAX
if (now1 % 27 == 0 | now1 % 27 == 26) {
haha = last1;
} else if (!dali) {
for (int i = 0; i dis[now1 + fx[i]][now]) {
minhaha = dis[now1 + fx[i]][now];
haha = i;
}
}
} else {
minhaha = -minhaha;
for (int i = 0; i <= 3; i++) {
if (changdi[(now1 + fx[i]) / 27][(now1 + fx[i]) % 27] && i != last1 &&
minhaha 25 | !changdi[x][k]) {
k–;
}
while (k 28 | !changdi[k][y]) {
k–;
}
while (k < 1 | !changdi[k][y]) {
k++;
}
}
if (fangx == 0 | fangx == 2) {
k += x * 27;
} else {
k = k * 27 + y;
}
if (now2 % 27 == 0 | now2 % 27 == 26) {
haha = last2;
}
else if (!dali) {
for (int i = 0; i dis[now2 + fx[i]][k]) {
minhaha = dis[now2 + fx[i]][k];
haha = i;
}
}
} else {
minhaha = -minhaha;
for (int i = 0; i <= 3; i++) {
if (changdi[(now2 + fx[i]) / 27][(now2 + fx[i]) % 27] && i != last2 &&
minhaha 25 | !changdi[x][k]) {
k–;
}
while (k 28 | !changdi[k][y]) {
k–;
}
while (k < 1 | !changdi[k][y]) {
k++;
}
}
if (fangx == 0 | fangx == 2) {
k += x * 27;
} else {
k = k * 27 + y;
}
if (now3 % 27 == 0 | now3 % 27 == 26) {
haha = last3;
} else if (!dali) {
for (int i = 0; i dis[now3 + fx[i]][k]) {
minhaha = dis[now3 + fx[i]][k];
haha = i;
}
}
} else {
minhaha = -minhaha;
for (int i = 0; i <= 3; i++) {
if (changdi[(now3 + fx[i]) / 27][(now3 + fx[i]) % 27] && i != last3 &&
minhaha = 0; i–) {
if (i==0) {
color (11);
}
gotoxy (13, 13);
cout < 0 && now + fx[fangx] < n) {
move1 ();
}
if (T2 % t2 == 0) {
if (guaitimer = 30) {
g3 = 1;
}
move2 ();
}
if (fenshu == guozi) {
f=2;
}
}
if (f == 2) {
Sleep (3000);
system (“cls”);
gotoxy (10, 20);
color (3);
string str = “恭喜您吃完了所有豆子!”;
for (int i = 0; i < str.size (); i++) {
Sleep (80);
cout << str[i];
}
Sleep (2000);
gotoxy (12, 20);
str = "您一共被怪物吃掉了";
for (int i = 0; i < str.size (); i++) {
Sleep (80);
cout << str[i];
}
Sleep (80);
cout << beichi;
Sleep (80);
cout << "次";
Sleep (80);
cout << "!";
gotoxy (14, 20);
Sleep (2000);
}
}

5.俄罗斯方块

#include
#include
#include
#include
#include
#include

using namespace std;

int block00[4][4] = { { 10, 0, 0, 0 }, { 1, 1, 1, 1 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } };
int block01[4][4] = { { 11, 0, 1, 0 }, { 0, 0, 1, 0 }, { 0, 0, 1, 0 }, { 0, 0, 1, 0 } };
int block02[4][4] = { { 12, 0, 0, 0 }, { 0, 0, 0, 0 }, { 1, 1, 1, 0 }, { 0, 1, 0, 0 } };
int block03[4][4] = { { 13, 0, 0, 0 }, { 0, 1, 0, 0 }, { 1, 1, 0, 0 }, { 0, 1, 0, 0 } };
int block04[4][4] = { { 14, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 1, 0, 0 }, { 1, 1, 1, 0 } };
int block05[4][4] = { { 15, 0, 0, 0 }, { 0, 1, 0, 0 }, { 0, 1, 1, 0 }, { 0, 1, 0, 0 } };
int block06[4][4] = { { 16, 0, 0, 0 }, { 0, 0, 0, 0 }, { 1, 1, 1, 0 }, { 1, 0, 0, 0 } };
int block07[4][4] = { { 17, 0, 0, 0 }, { 1, 1, 0, 0 }, { 0, 1, 0, 0 }, { 0, 1, 0, 0 } };
int block08[4][4] = { { 18, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 1, 0 }, { 1, 1, 1, 0 } };
int block09[4][4] = { { 19, 0, 0, 0 }, { 0, 1, 0, 0 }, { 0, 1, 0, 0 }, { 0, 1, 1, 0 } };
int block10[4][4] = { { 20, 0, 0, 0 }, { 0, 0, 0, 0 }, { 1, 1, 1, 0 }, { 0, 0, 1, 0 } };
int block11[4][4] = { { 21, 0, 0, 0 }, { 0, 1, 0, 0 }, { 0, 1, 0, 0 }, { 1, 1, 0, 0 } };
int block12[4][4] = { { 22, 0, 0, 0 }, { 0, 0, 0, 0 }, { 1, 0, 0, 0 }, { 1, 1, 1, 0 } };
int block13[4][4] = { { 23, 0, 0, 0 }, { 0, 1, 1, 0 }, { 0, 1, 0, 0 }, { 0, 1, 0, 0 } };
int block14[4][4] = { { 24, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 1, 1, 0 }, { 1, 1, 0, 0 } };
int block15[4][4] = { { 25, 0, 0, 0 }, { 1, 0, 0, 0 }, { 1, 1, 0, 0 }, { 0, 1, 0, 0 } };
int block16[4][4] = { { 26, 0, 0, 0 }, { 0, 0, 0, 0 }, { 1, 1, 0, 0 }, { 0, 1, 1, 0 } };
int block17[4][4] = { { 27, 0, 0, 0 }, { 0, 0, 1, 0 }, { 0, 1, 1, 0 }, { 0, 1, 0, 0 } };
int block18[4][4] = { { 28, 0, 0, 0 }, { 0, 0, 0, 0 }, { 1, 1, 0, 0 }, { 1, 1, 0, 0 } };
void initialWindow (HANDLE hOut);//初始化窗口
void initialPrint (HANDLE hOut);//初始化界面
void gotoXY (HANDLE hOut, int x, int y);//移动光标
void roundBlock (HANDLE hOut, int block[4][4]);//随机生成方块并打印到下一个方块位置
bool collisionDetection (int block[4][4], int map[21][12], int x, int y);//检测碰撞
void printBlock (HANDLE hOut, int block[4][4], int x, int y);//打印方块
void clearBlock (HANDLE hOut, int block[4][4], int x, int y);//消除方块
void myLeft (HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//左移
void myRight (HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//右移
void myUp (HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//顺时针旋转90度
int myDown (HANDLE hOut, int block[4][4], int map[21][12], int &x, int y);//加速下落
void myStop (HANDLE hOut, int block[4][4]);//游戏暂停
void gameOver (HANDLE hOut, int block[4][4], int map[21][12]);//游戏结束
//判断是否能消行并更新分值
void eliminateRow (HANDLE hOut, int map[21][12], int &val, int &fraction, int &checkpoint);
int main () {
MessageBox (NULL, “欢迎来到俄罗斯方块游戏!”, “温馨提示”, MB_OK);
system (“mode coon cols=200 lines=100”);
system (“mode con cols=70 lines=35”);
int map[21][12];
int blockA[4][4];//候选区的方块
int blockB[4][4];//下落中的方块
int positionX, positionY;//方块左上角的坐标
bool check;//检查方块还能不能下落
char key;//用来存储按键
int val;//用来控制下落速度
int fraction;//用来存储得分
int checkpoint;//用来存储关卡
int times;
HANDLE hOut = GetStdHandle (STD_OUTPUT_HANDLE);//获取标准输出设备句柄
initialWindow (hOut);
initial:
gotoXY (hOut, 0, 0);
initialPrint (hOut);
check = true;
val = 50;
fraction = 0;
checkpoint = 1;
times = val;
for (int i = 0; i < 20; i++) {
for (int j = 1; j < 11; j++) {
map[i][j] = 0;
}
}
for (int i = 0; i < 20; i++) {
map[i][0] = map[i][11] = 1;
}
for (int i = 0; i < 12; i++) {
map[20][i] = 1;
}
srand ((unsigned) time (NULL));
roundBlock (hOut, blockA);
while (true) {
if (check) {
eliminateRow (hOut, map, val, fraction, checkpoint);
check = false;
positionX = -3;
positionY = 4;
if (collisionDetection (blockA, map, positionX, positionY)) {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
blockB[i][j] = blockA[i][j];
}
}
roundBlock (hOut, blockA);
} else {
gameOver (hOut, blockA, map);
goto initial;
}
}
printBlock (hOut, blockB, positionX, positionY);
if (_kbhit ()) {
key = _getch ();
switch (key) {
case 72:
myUp (hOut, blockB, map, positionX, positionY);
break;
case 75:
myLeft (hOut, blockB, map, positionX, positionY);
break;
case 77:
myRight (hOut, blockB, map, positionX, positionY);
break;
case 80:
switch (myDown (hOut, blockB, map, positionX, positionY)) {
case 0:
check = false;
break;
case 1:
check = true;
break;
case 2:
gameOver (hOut, blockB, map);
goto initial;
default:
break;
}
break;
case 32:
myStop (hOut, blockA);
break;
case 27:
exit (0);
default:
break;
}
}
Sleep (20);
if (–times == 0) {
switch (myDown (hOut, blockB, map, positionX, positionY)) {
case 0:
check = false;
break;
case 1:
check = true;
break;
case 2:
gameOver (hOut, blockB, map);
goto initial;
default:
break;
}
times = val;
}
}
cin.get ();
return 0;
}

void initialWindow (HANDLE hOut) {
SetConsoleTitle ("俄罗斯方块");
COORD size = { 80, 25 };
SetConsoleScreenBufferSize (hOut, size);
SMALL_RECT rc = { 0, 0, 79, 24 };
SetConsoleWindowInfo (hOut, true, &rc);
CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
SetConsoleCursorInfo (hOut, &cursor_info);
}

void initialPrint(HANDLE hOut) {
SetConsoleTextAttribute (hOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
for (int i = 0; i < 20; i++) {
cout << "■ ■☆ ☆" << endl;
}
gotoXY (hOut, 26, 0);
cout << "☆☆☆☆☆☆☆☆☆☆☆";
gotoXY (hOut, 0, 20);
cout << "■■■■■■■■■■■■☆☆☆☆☆☆☆☆☆☆☆☆☆";
gotoXY (hOut, 26, 1);
cout << "分 数: ";
gotoXY (hOut, 26, 2);
cout << "关 卡: ";
gotoXY (hOut, 26, 4);
cout << "下一方块:";
gotoXY (hOut, 26, 9);
cout << "操作方法:";
gotoXY (hOut, 30, 11);
cout << "↑:旋转 ↓:速降";
gotoXY (hOut, 30, 12);
cout << "→:右移 ←:左移";
gotoXY (hOut, 30, 13);
cout << "空格键:开始/暂停";
gotoXY (hOut, 30, 14);
cout << "Esc 键:退出";
gotoXY (hOut, 26, 16);
cout << "关 于:";
gotoXY (hOut, 30, 18);
cout << "俄罗斯方块V1.0";
gotoXY (hOut, 35, 19);
}
void gotoXY (HANDLE hOut, int x, int y) {
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition (hOut, pos);
}
void roundBlock(HANDLE hOut, int block[4][4]) {
clearBlock (hOut, block, 5, 15);
switch (rand() % 19) {
case 0:
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block00[i][j];
}
}
break;
case 1:
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block01[i][j];
}
}
break;
case 2:
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block02[i][j];
}
}
break;
case 3:
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block03[i][j];
}
}
break;
case 4:
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block04[i][j];
}
}
break;
case 5:
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block05[i][j];
}
}
break;
case 6:
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block06[i][j];
}
}
break;
case 7:
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block07[i][j];
}
}
break;
case 8:
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block08[i][j];
}
}
break;
case 9:
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++)
{
block[i][j] = block09[i][j];
}
}
break;
case 10:
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block10[i][j];
}
}
break;
case 11:
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block11[i][j];
}
}
break;
case 12:
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block12[i][j];
}
}
break;
case 13:
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block13[i][j];
}
}
break;
case 14:
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block14[i][j];
}
}
break;
case 15:
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block15[i][j];
}
}
break;
case 16:
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block16[i][j];
}
}
break;
case 17:
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block17[i][j];
}
}
break;
case 18:
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block18[i][j];
}
}
break;
default:
break;
}
printBlock(hOut, block, 5, 15);
}
bool collisionDetection (int block[4][4], int map[21][12], int x, int y) {
for (int i = 0; i < 4; i++) {
for (int j = 0; j = 0 && y + j >= 0 && map[x + i][y + j] == 1 && block[i][j] == 1) {
return false;
}
}
}
return true;
}
void printBlock (HANDLE hOut, int block[4][4], int x, int y) {
switch (block[0][0]) {
case 10:
case 11:
SetConsoleTextAttribute (hOut, FOREGROUND_GREEN);
break;
case 12:
case 13:
case 14:
case 15:
SetConsoleTextAttribute (hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
break;
case 16:
case 17:
case 18:
case 19:
SetConsoleTextAttribute (hOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
break;
case 20:
case 21:
case 22:
case 23:
SetConsoleTextAttribute (hOut, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
break;
case 24:
case 25:
SetConsoleTextAttribute (hOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
break;
case 26:
case 27:
SetConsoleTextAttribute (hOut, FOREGROUND_BLUE | FOREGROUND_INTENSITY);
break;
case 28:
SetConsoleTextAttribute (hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
break;
default:
break;
}
for (int i = 0; i = 0) {
for (int j = 0; j < 4; j++) {
if (block[i][j] == 1) {
gotoXY (hOut, 2 * (y + j), x + i);
cout << "■";
}
}
}
}
}
void clearBlock (HANDLE hOut, int block[4][4], int x, int y) {
for (int i = 0; i = 0) {
for (int j = 0; j < 4; j++) {
if (block[i][j] == 1) {
gotoXY (hOut, 2 * (y + j), x + i);
cout << " ";
}
}
}
}
}
void gameOver (HANDLE hOut, int block[4][4], int map[21][12]) {
SetConsoleTextAttribute (hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
gotoXY (hOut, 9, 8);
string s = "GAME OVER";
for (int i = 0; i < s.size (); i++) {
Sleep (80);
cout << s[i];
}
gotoXY (hOut, 8, 9);
s = "空格键:重来";
for (int i = 0; i < s.size (); i++) {
Sleep (80);
cout << s[i];
}
cout << endl;
gotoXY (hOut, 8, 10);
s = "ESC键:退出";
MessageBox (NULL, "很遗憾,您输了!", "温馨提示", MB_OK);
for (int i = 0; i < s.size (); i++) {
Sleep (80);
cout << s[i];
}
char key;
while (true) {
key = _getch ();
if (key == 32) {
return;
} else if (key == 27) {
exit(0);
}
}
}
int myDown (HANDLE hOut, int block[4][4], int map[21][12], int &x, int y) {
if (collisionDetection(block, map, x + 1, y)) {
clearBlock (hOut, block, x, y);
++x;
return 0;
}
if (x < 0) {
return 2;
}
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (block[i][j] == 1) {
map[x + i][y + j] = 1;
SetConsoleTextAttribute (hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);
gotoXY (hOut, 2 * (y + j), x + i);
cout << "■";
}
}
}
return 1;
}
void myLeft (HANDLE hOut, int block[4][4], int map[21][12], int x, int &y) {
if (collisionDetection (block, map, x, y – 1)) {
clearBlock (hOut, block, x, y);
–y;
}
}
void myRight (HANDLE hOut, int block[4][4], int map[21][12], int x, int &y) {
if (collisionDetection (block, map, x, y + 1)) {
clearBlock (hOut, block, x, y);
++y;
}
}
void myUp (HANDLE hOut, int block[4][4], int map[21][12], int x, int &y) {
switch (block[0][0]) {
case 10:
if (collisionDetection (block01, map, x, y)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block01[i][j];
}
}
}
break;
case 11:
if (collisionDetection (block00, map, x, y)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block00[i][j];
}
}
} else if (collisionDetection (block00, map, x, y – 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block00[i][j];
}
}
–y;
} else if (collisionDetection (block00, map, x, y + 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block00[i][j];
}
}
++y;
} else if (collisionDetection (block00, map, x, y – 2)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block00[i][j];
}
}
y -= 2;
} else if (collisionDetection (block00, map, x, y + 2)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block00[i][j];
}
}
y += 2;
}
break;
case 12:
if (collisionDetection (block03, map, x, y)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block03[i][j];
}
}
} else if (collisionDetection (block03, map, x, y – 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block03[i][j];
}
}
–y;
} else if (collisionDetection (block03, map, x, y + 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block03[i][j];
}
}
++y;
}
break;
case 13:
if (collisionDetection (block04, map, x, y)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block04[i][j];
}
}
} else if (collisionDetection (block04, map, x, y – 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block04[i][j];
}
}
–y;
} else if (collisionDetection (block04, map, x, y + 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block04[i][j];
}
}
++y;
}
break;
case 14:
if (collisionDetection (block05, map, x, y)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block05[i][j];
}
}
} else if (collisionDetection (block05, map, x, y – 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block05[i][j];
}
}
–y;
} else if (collisionDetection (block05, map, x, y + 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block05[i][j];
}
}
++y;
}
break;
case 15:
if (collisionDetection (block02, map, x, y)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block02[i][j];
}
}
} else if (collisionDetection (block02, map, x, y – 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block02[i][j];
}
}
–y;
} else if (collisionDetection (block02, map, x, y + 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block02[i][j];
}
}
++y;
}
break;
case 16:
if (collisionDetection (block07, map, x, y)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block07[i][j];
}
}
} else if (collisionDetection (block07, map, x, y – 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block07[i][j];
}
}
–y;
} else if (collisionDetection (block07, map, x, y + 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block07[i][j];
}
}
++y;
}
break;
case 17:
if (collisionDetection (block08, map, x, y)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block08[i][j];
}
}
} else if (collisionDetection (block08, map, x, y – 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block08[i][j];
}
}
–y;
} else if (collisionDetection (block08, map, x, y + 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block08[i][j];
}
}
++y;
}
break;
case 18:
if (collisionDetection (block09, map, x, y)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block09[i][j];
}
}
} else if (collisionDetection (block09, map, x, y – 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block09[i][j];
}
}
–y;
} else if (collisionDetection (block09, map, x, y + 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block09[i][j];
}
}
++y;
}
break;
case 19:
if (collisionDetection (block06, map, x, y)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block06[i][j];
}
}
} else if (collisionDetection (block06, map, x, y – 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block06[i][j];
}
}
–y;
} else if (collisionDetection(block06, map, x, y + 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block06[i][j];
}
}
++y;
}
break;
case 20:
if (collisionDetection (block11, map, x, y)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block11[i][j];
}
}
} else if (collisionDetection (block11, map, x, y – 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block11[i][j];
}
}
–y;
} else if (collisionDetection (block11, map, x, y + 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block11[i][j];
}
}
++y;
}
break;
case 21:
if (collisionDetection (block12, map, x, y)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block12[i][j];
}
}
} else if (collisionDetection(block12, map, x, y – 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block12[i][j];
}
}
–y;
} else if (collisionDetection (block12, map, x, y + 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block12[i][j];
}
}
++y;
}
break;
case 22:
if (collisionDetection (block13, map, x, y)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block13[i][j];
}
}
} else if (collisionDetection (block13, map, x, y – 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block13[i][j];
}
}
–y;
} else if (collisionDetection (block13, map, x, y + 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block13[i][j];
}
}
++y;
}
break;
case 23:
if (collisionDetection (block10, map, x, y)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block10[i][j];
}
}
} else if (collisionDetection (block10, map, x, y – 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block10[i][j];
}
}
–y;
} else if (collisionDetection (block10, map, x, y + 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block10[i][j];
}
}
++y;
}
break;
case 24:
if (collisionDetection (block15, map, x, y)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block15[i][j];
}
}
} else if (collisionDetection (block15, map, x, y – 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block15[i][j];
}
}
–y;
} else if (collisionDetection (block15, map, x, y + 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block15[i][j];
}
}
++y;
}
break;
case 25:
if (collisionDetection (block14, map, x, y)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block14[i][j];
}
}
} else if (collisionDetection (block14, map, x, y – 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block14[i][j];
}
}
–y;
} else if (collisionDetection (block14, map, x, y + 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block14[i][j];
}
}
++y;
}
break;
case 26:
if (collisionDetection (block17, map, x, y)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block17[i][j];
}
}
} else if (collisionDetection (block17, map, x, y – 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block17[i][j];
}
}
–y;
} else if (collisionDetection (block17, map, x, y + 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block17[i][j];
}
}
++y;
}
break;
case 27:
if (collisionDetection (block16, map, x, y)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block16[i][j];
}
}
} else if (collisionDetection (block16, map, x, y – 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block16[i][j];
}
}
–y;
} else if (collisionDetection (block16, map, x, y + 1)) {
clearBlock (hOut, block, x, y);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
block[i][j] = block16[i][j];
}
}
++y;
}
break;
default:
break;
}
}
void myStop (HANDLE hOut, int block[4][4]) {
clearBlock (hOut, block, 5, 15);
SetConsoleTextAttribute (hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
gotoXY (hOut, 30, 7);
cout << "游戏暂停";
char key;
while (true) {
key = _getch ();
if (key == 32) {
gotoXY (hOut, 30, 7);
cout <= 0; i–) {
int x = 0;
for (int j = 1; j 1 && fraction / 1000 + 1 != checkpoint) {
checkpoint = fraction / 1000 + 1;
val -= 5;
}
for (int m = i; m > 0; m–) {
for (int n = 1; n < 11; n++) {
map[m][n] = map[m – 1][n];
gotoXY (hOut, 2 * n, m);
if (map[m][n] == 1) {
cout << "■";
} else {
cout << " ";
}
}
}
i++;
}
}
gotoXY (hOut, 36, 1);
cout << fraction;
gotoXY (hOut, 36, 2);
cout << checkpoint;
}

6.五子棋

#include
#include

#include

using namespace std;

const int N = 15;//棋盘大小
const char ChessBoardFlag = ‘ ‘;
const char flag1 = ‘O’;
const char flag2 = ‘X’;

typedef struct Coordinate
{
int x;
int y;
}ChessCoordi;

class FiveChess
{
public:
FiveChess()
{
InitChessBoard();
}

void Play()
{
ChessCoordi Pos1;
ChessCoordi Pos2;
while (1){
int mode = ChoseMode();
while (1){
if (mode == 1){//玩家VS电脑
static size_t count = 1;
PalyerGo(Pos1, 1, flag1);
if (count++ >= 9 && GetWiner(Pos1, 1, flag1))
break;
ComputerGo(Pos2, flag2);
if (count++ >= 10 && GetWiner(Pos2, 0, flag2))
break;
}
else if (mode == 2){//玩家VS玩家
static size_t count = 1;
PalyerGo(Pos1, 1, flag1);
if (count++ >= 9 && GetWiner(Pos1,1, flag1))
break;
PalyerGo(Pos2,2 ,flag2);
if (count++ >= 10 && GetWiner(Pos2,2, flag2))
break;
}
}
cout << "再来一局 y or no" <> chose;
if (chose == ‘n’)
break;
}
}

void PrintChessBoard()
{
system(“cls”);
for (size_t i = 0; i < N + 1; ++i)
{
for (size_t j = 0; j < N + 1; ++j)
{
if (i == 0){
if (j != 0)
printf("%d ", j);
else if (j == 0)
printf(" ");
}
else if (j == 0){
if (i != 0)
printf("%2d", i);
}
else{
printf("%c |", ChessBoard[i][j]);
}

}
cout << endl;
cout << " ";
for (size_t i = 1; i < N + 1; ++i){
cout << "—+";
}
cout << endl;
}
}

void InitChessBoard()
{
for (size_t i = 0; i < N + 1; ++i){
for (size_t j = 0; j < N + 1; ++j){
ChessBoard[i][j] = ChessBoardFlag;
}
}
}

protected:

int ChoseMode()
{
system("cls");
InitChessBoard();
cout << "请选择 1.玩家VS电脑 2.玩家VS玩家 3.退出" <> chose;
while (1){
if (chose == 1)
return chose;
else if (chose == 2)
return chose;
else if (chose == 3)
exit(1);
else
cout << "对不起 您的输入有误。。" << endl;
}
}

void PalyerGo(ChessCoordi& Pos, int player, char flag)
{
PrintChessBoard();
int x = 0;
int y = 0;
while (1){
cout << "请玩家" << player << "下一步棋" <> Pos.x >> Pos.y;
if (JudgePos(Pos))
break;
else
cout << "玩家输入错误 ! 请重新输入" < 0 ? begin = Pos.y – 4 : begin = 1;
(Pos.y + 4) < N ? end = Pos.y + 4 : end = N;
for (size_t i = Pos.x, j = begin; j + 4 0 ? begin = Pos.x – 4 : begin = 1;
(Pos.x + 4) > N ? end = Pos.x + 4 : end = N;
for (size_t j = Pos.y, i = begin; i + 4 Pos.y) ? len = Pos.y – 1 : len = Pos.x – 1;
if (len > 4)//找落子点到上 左两边的垂直距离较短的地方 如果其大于4 取4 不大于4 取其本身
len = 4;
begin = Pos.x – len;//向上 左移动适当距离找可能的五连子的起始位置
beginl = Pos.y – len;
(Pos.x > Pos.y) ? len = N – Pos.x : len = N – Pos.y;
if (len > 4)
len = 4;
end = Pos.x + len;//向下 右移动适当距离找可能的五连子的终止位置
endl = Pos.y + len;
for (size_t i = begin, j = beginl; i + 4 <= end && j + 4 N – Pos.y) ? len = N – Pos.y : Pos.x – 1;
if (len > 4)//找落子点到右 下两边的垂直距离较短的地方 如果其大于4 取4 不大于4 取其本身
len = 4;
begin = Pos.x – len;//向上 右移动适当距离找可能的五连子的起始位置
beginl = Pos.y + len;
(N – Pos.x > Pos.y – 1) ? len = Pos.y – 1 : len = N – Pos.x;
end = Pos.x + len;//向下 左移动适当距离找可能的五连子的最终位置
endl = Pos.y – len;
for (size_t i = begin, j = beginl; i + 4 = endl; ++i, ++j)
{
if (flag == ChessBoard[i][j] && flag == ChessBoard[i + 1][j – 1] && \
flag == ChessBoard[i + 2][j – 2] && flag == ChessBoard[i + 3][j – 3] && \
flag == ChessBoard[i + 4][j – 4])
return 1;
}
//检查棋盘是否已满
for (size_t i = 1; i < N + 1; ++i){
for (size_t j = 1; j < N + 1; ++j){
if (ChessBoard[i][j] == ChessBoardFlag)
return 0;//表示棋盘没满
}
}
//和棋
return -1;
}

bool GetWiner(ChessCoordi& Pos, int player, char flag)//判断是谁赢了
{
int n = 0;
n = GetVictory(Pos, flag);
PrintChessBoard();
if (1 == n){
if (0 == player)
cout << "玩家1获胜" << endl;
else if (1 == player)
cout << "玩家1获胜" << endl;
else
cout << "电脑获胜"<<endl;
return true;
}
else if (-1 == n){
cout << "和棋" << endl;
return true;
}
else{
//还未分出胜负
return false;
}

}

bool JudgePos(const ChessCoordi& Pos)
{
if (Pos.x 0 && Pos.y 0\
&& ChessBoard[Pos.x][Pos.y] == ChessBoardFlag)
return true;

return false;
}

private:
char ChessBoard[N + 1][N + 1];
};

//#include”FiveChess.cpp”
int main()
{
//char a[] = “exit”;
//for (size_t i = 0; i < sizeof(a) / sizeof(char);++i)
//printf(":%d", a[i]);
FiveChess a;
a.InitChessBoard();
a.PrintChessBoard();
a.Play();
system("pause");
return 0;
}

7.飞机大战

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

/*=============== all the structures ===============*/

typedef struct Frame
{
COORD position[2];
int flag;
}Frame;

/*=============== all the functions ===============*/

void SetPos(COORD a)// set cursor
{
HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(out, a);
}

void SetPos(int i, int j)// set cursor
{
COORD pos={i, j};
SetPos(pos);
}

void HideCursor()
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}

//把第y行,[x1, x2) 之间的坐标填充为 ch
void drawRow(int y, int x1, int x2, char ch)
{
SetPos(x1,y);
for(int i = 0; i <= (x2-x1); i++)
cout<<ch;
}

//在a, b 纵坐标相同的前提下,把坐标 [a, b] 之间填充为 ch
void drawRow(COORD a, COORD b, char ch)
{
if(a.Y == b.Y)
drawRow(a.Y, a.X, b.X, ch);
else
{
SetPos(0, 25);
cout<<"error code 01:无法填充行,因为两个坐标的纵坐标(x)不相等";
system("pause");
}
}

//把第x列,[y1, y2] 之间的坐标填充为 ch
void drawCol(int x, int y1, int y2, char ch)
{
int y=y1;
while(y!=y2+1)
{
SetPos(x, y);
cout<<ch;
y++;
}
}

//在a, b 横坐标相同的前提下,把坐标 [a, b] 之间填充为 ch
void drawCol(COORD a, COORD b, char ch)
{
if(a.X == b.X)
drawCol(a.X, a.Y, b.Y, ch);
else
{
SetPos(0, 25);
cout<<"error code 02:无法填充列,因为两个坐标的横坐标(y)不相等";
system("pause");
}
}

//左上角坐标、右下角坐标、用row填充行、用col填充列
void drawFrame(COORD a, COORD b, char row, char col)
{
drawRow(a.Y, a.X+1, b.X-1, row);
drawRow(b.Y, a.X+1, b.X-1, row);
drawCol(a.X, a.Y+1, b.Y-1, col);
drawCol(b.X, a.Y+1, b.Y-1, col);
}

void drawFrame(int x1, int y1, int x2, int y2, char row, char col)
{
COORD a={x1, y1};
COORD b={x2, y2};
drawFrame(a, b, row, col);
}

void drawFrame(Frame frame, char row, char col)
{
COORD a = frame.position[0];
COORD b = frame.position[1];
drawFrame(a, b, row, col);
}

void drawPlaying()
{
drawFrame(0, 0, 48, 24, '=', '|');// draw map frame;
drawFrame(49, 0, 79, 4, '-', '|');// draw output frame
drawFrame(49, 4, 79, 9, '-', '|');// draw score frame
drawFrame(49, 9, 79, 20, '-', '|');// draw operate frame
drawFrame(49, 20, 79, 24, '-', '|');// draw other message frame
SetPos(52, 6);
cout<<"得分:";
SetPos(52, 7);
cout<<"称号:";
SetPos(52,10);
cout<<"操作方式:";
SetPos(52,12);
cout<<" a,s,d,w 控制战机移动。";
SetPos(52,14);
cout<<" p 暂停游戏。";
SetPos(52,16);
cout<=frame.position[0].X)
if(spot.X=frame.position[0].Y)
if(spot.Y<=frame.position[0].Y)
return true;
return false;
}

void printCoord(COORD a)
{
cout <<"( "<<a.X<<" , "<<a.Y<<" )";
}

void printFrameCoord(Frame a)
{
printCoord(a.position[0]);
cout <<" – ";
printCoord(a.position[1]);
}

int drawMenu()
{
SetPos(30, 1);
cout<<"P l a n e W a r";
drawRow(3, 0, 79, '-');
drawRow(5, 0, 79, '-');
SetPos(28, 4);
cout<<"w 和 s 选择, k 确定";
SetPos(15, 11);
cout<<"1. 简单的敌人";
SetPos(15, 13);
cout<<"2. 冷酷的敌人";
drawRow(20, 0, 79, '-');
drawRow(22, 0, 79, '-');
SetPos(47, 11);
cout<<"简单的敌人:";
SetPos(51, 13);
cout<<"简单敌人有着较慢的移动速度。";
SetPos(24, 21);
cout<<"制作:LJF神犇";
int j=11;
SetPos(12, j);
cout<>”;

//drawFrame(45, 9, 79, 17, ‘=’, ‘|’);

while(1)
{ if( _kbhit() )
{
char x=_getch();
switch (x)
{
case ‘w’ :
{
if( j == 13)
{
SetPos(12, j);
cout<<" ";
j = 11;
SetPos(12, j);
cout<>”;
SetPos(51, 13);
cout<<"            ";
SetPos(47, 11);
cout<<"简单的敌人:";
SetPos(51, 13);
cout<<"简单敌人有着较慢的移动速度,容易对付。";
}
break;
}
case 's' :
{
if( j == 11 )
{
SetPos(12, j);
cout<<" ";
j = 13;
SetPos(12, j);
cout<>”;
SetPos(51, 13);
cout<<"              ";
SetPos(47, 11);
cout<<"冷酷的敌人:";
SetPos(51, 13);
cout<<"冷酷的敌人移动速度较快,难对付哟!!!";
}
break;
}
case 'k' :
{
if (j == 8) return 1;
else return 2;
}
}
}
}
}

/*
DWORD WINAPI MusicFun(LPVOID lpParamte)
{
//DWORD OBJ;
sndPlaySound(TEXT("bgm.wav"), SND_FILENAME|SND_ASYNC);
return 0;
}
*/

/*================== the Game Class ==================*/

class Game
{
public:
COORD position[10];
COORD bullet[10];
Frame enemy[8];
int score;
int rank;
int rankf;
string title;
int flag_rank;

Game ();

//初始化所有
void initPlane();
void initBullet();
void initEnemy();

//初始化其中一个
//void initThisBullet( COORD );
//void initThisEnemy( Frame );

void planeMove(char);
void bulletMove();
void enemyMove();

//填充所有
void drawPlane();
void drawPlaneToNull();
void drawBullet();
void drawBulletToNull();
void drawEnemy();
void drawEnemyToNull();

//填充其中一个
void drawThisBulletToNull( COORD );
void drawThisEnemyToNull( Frame );

void Pause();
void Playing();
void judgePlane();
void judgeEnemy();

void Shoot();

void GameOver();
void printScore();
};

Game::Game()
{
initPlane();
initBullet();
initEnemy();
score = 0;
rank = 25;
rankf = 0;
flag_rank = 0;
}

void Game::initPlane()
{
COORD centren={39, 22};
position[0].X=position[5].X=position[7].X=position[9].X=centren.X;
position[1].X=centren.X-2;
position[2].X=position[6].X=centren.X-1;
position[3].X=position[8].X=centren.X+1;
position[4].X=centren.X+2;
for(int i=0; i<=4; i++)
position[i].Y=centren.Y;
for(int i=6; i<=8; i++)
position[i].Y=centren.Y+1;
position[5].Y=centren.Y-1;
position[9].Y=centren.Y-2;
}

void Game::drawPlane()
{
for(int i=0; i<9; i++)
{
SetPos(position[i]);
if(i!=5)
cout<<"O";
else if(i==5)
cout<<"|";
}
}

void Game::drawPlaneToNull()
{
for(int i=0; i<9; i++)
{
SetPos(position[i]);
cout<<" ";
}
}

void Game::initBullet()
{
for(int i=0; i<10; i++)
bullet[i].Y = 30;
}

void Game::drawBullet()
{
for(int i=0; i<10; i++)
{
if( bullet[i].Y != 30)
{
SetPos(bullet[i]);
cout<<"^";
}
}
}

void Game::drawBulletToNull()
{
for(int i=0; i<10; i++)
if( bullet[i].Y != 30 )
{
COORD pos={bullet[i].X, bullet[i].Y+1};
SetPos(pos);
cout<<" ";
}
}

void Game::initEnemy()
{
COORD a={1, 1};
COORD b={45, 15};
for(int i=0; i<8; i++)
{
enemy[i].position[0] = random(a, b);
enemy[i].position[1].X = enemy[i].position[0].X + 3;
enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
}
}

void Game::drawEnemy()
{
for(int i=0; i<8; i++)
drawFrame(enemy[i].position[0], enemy[i].position[1], '-', '|');
}

void Game::drawEnemyToNull()
{
for(int i=0; i<8; i++)
{
drawFrame(enemy[i].position[0], enemy[i].position[1], ' ', ' ');
}
}

void Game::Pause()
{
SetPos(61,2);
cout<<" ";
SetPos(61,2);
cout<<"暂停中…";
char c=_getch();
while(c!='p')
c=_getch();
SetPos(61,2);
cout<<" ";
}

void Game::planeMove(char x)
{
if(x == 'a')
if(position[1].X != 1)
for(int i=0; i<=9; i++)
position[i].X -= 2;

if(x == 's')
if(position[7].Y != 23)
for(int i=0; i<=9; i++)
position[i].Y += 1;

if(x == 'd')
if(position[4].X != 47)
for(int i=0; i<=9; i++)
position[i].X += 2;

if(x == 'w')
if(position[5].Y != 3)
for(int i=0; i<=9; i++)
position[i].Y -= 1;
}

void Game::bulletMove()
{
for(int i=0; i<10; i++)
{
if( bullet[i].Y != 30)
{
bullet[i].Y -= 1;
if( bullet[i].Y == 1 )
{
COORD pos={bullet[i].X, bullet[i].Y+1};
drawThisBulletToNull( pos );
bullet[i].Y=30;
}

}
}
}

void Game::enemyMove()
{
for(int i=0; i<8; i++)
{
for(int j=0; j<2; j++)
enemy[i].position[j].Y++;

if(24 == enemy[i].position[1].Y)
{
COORD a={1, 1};
COORD b={45, 3};
enemy[i].position[0] = random(a, b);
enemy[i].position[1].X = enemy[i].position[0].X + 3;
enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
}
}
}

void Game::judgePlane()
{
for(int i = 0; i < 8; i++)
for(int j=0; j<9; j++)
if(judgeCoordInFrame(enemy[i], position[j]))
{
SetPos(62, 1);
cout<<"坠毁";
drawFrame(enemy[i], '+', '+');
Sleep(1000);
GameOver();
break;
}
}

void Game::drawThisBulletToNull( COORD c)
{
SetPos(c);
cout<<" ";
}

void Game::drawThisEnemyToNull( Frame f )
{
drawFrame(f, ' ', ' ');
}

void Game::judgeEnemy()
{
for(int i = 0; i < 8; i++)
for(int j = 0; j < 10; j++)
if( judgeCoordInFrame(enemy[i], bullet[j]) )
{
score += 5;
drawThisEnemyToNull( enemy[i] );
COORD a={1, 1};
COORD b={45, 3};
enemy[i].position[0] = random(a, b);
enemy[i].position[1].X = enemy[i].position[0].X + 3;
enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
drawThisBulletToNull( bullet[j] );
bullet[j].Y = 30;
}
}

void Game::Shoot()
{
for(int i=0; i<10; i++)
if(bullet[i].Y == 30)
{
bullet[i].X = position[5].X;
bullet[i].Y = position[5].Y-1;
break;
}
}

void Game::printScore()
{
if(score == 120 && flag_rank == 0)
{
rank -= 3;
flag_rank = 1;
}

else if( score == 360 && flag_rank == 1)
{
rank -= 5;
flag_rank = 2;
}
else if( score == 480 && flag_rank == 2)
{
rank -= 5;
flag_rank = 3;
}
int x=rank/5;
SetPos(60, 6);
cout<<score;

if( rank!=rankf )
{
SetPos(60, 7);
if( x == 5)
title="初级飞行员";
else if( x == 4)
title="中级飞行员";
else if( x == 3)
title="高级飞行员";
else if( x == 2 )
title="王牌飞行员";
cout<= rank )<br /> flag_enemy = 0;</p> <p> /* 输出得分 */<br /> printScore();<br /> }<br /> }</p> <p> void Game::GameOver()<br /> {<br /> system(“cls”);<br /> COORD p1={28,9};<br /> COORD p2={53,15};<br /> drawFrame(p1, p2, ‘=’, ‘|’);<br /> SetPos(36,12);<br /> string str=”Game Over!”;<br /> for(int i=0; i<str.size(); i++)<br /> {<br /> Sleep(80);<br /> cout<<str[i];<br /> }<br /> Sleep(1000);<br /> system("cls");<br /> drawFrame(p1, p2, '=', '|');<br /> SetPos(31, 11);<br /> cout<<"击落敌机:"<<score/5<<" 架";<br /> SetPos(31, 12);<br /> cout<<"得  分:"<<score;<br /> SetPos(31, 13);<br /> cout<<"获得称号:"<<title;<br /> SetPos(30, 16);<br /> Sleep(1000);<br /> cout<<"继续? 是(y)| 否(n)制作:最牛的LJF";<br /> as:<br /> char x=_getch();<br /> if (x == 'n')<br /> exit(0);<br /> else if (x == 'y')<br /> {<br /> system("cls");<br /> Game game;<br /> int a = drawMenu();<br /> if(a == 2)<br /> game.rank = 20;<br /> system("cls");<br /> drawPlaying();<br /> game.Playing();<br /> }<br /> else goto as;<br /> }</p> <p> /*================== the main function ==================*/<br /> int main()<br /> {<br /> //游戏准备<br /> srand((int)time(0)); //随机种子<br /> HideCursor(); //隐藏光标</p> <p> Game game;<br /> int a = drawMenu();<br /> if(a == 2)<br /> game.rank = 20;<br /> system("cls");<br /> drawPlaying();<br /> game.Playing();<br /> }</p> <p>8.迷宫(我自己做的)</p> <p> #include<br /> #include<br /> #include<br /> using namespace std;<br /> const long long n=29,jg=25;<br /> string p=” *!|-=.1234567890@$%?&_~”;<br /> long long r=1;<br /> char f=’y’;<br /> void print(string a[n])<br /> {<br /> system(“cls”);<br /> for(long long i=0;i<n;i++)<br /> cout<<a[i]<<endl;<br /> }<br /> void tc()<br /> {<br /> system("cls");<br /> cout<<"\n\n\n\n\n 欢迎下次再玩,拜拜!!!\n";<br /> cout<<" 制作:饼干\n";<br /> cout<<" (按空格结束)";<br /> long long ok='\0';<br /> while(ok=getch(),ok!=' ');<br /> system("cls");<br /> return ;<br /> }<br /> void hf()<br /> {<br /> char t='\0';<br /> while(t!=' ')<br /> {<br /> system("cls");<br /> cout<<"\n\n\n\n A D键换皮肤 空格确定\n\n";<br /> cout<<"\n\n\n\n "<<p[r]<<"\n";<br /> t=getch();<br /> if(t=='a')r–;<br /> else<br /> if(t=='d')r++;<br /> if(rjg)r=1;<br /> }<br /> system(“cls”);<br /> return ;<br /> }<br /> void sm()<br /> {<br /> system(“cls”);<br /> cout<<"\n\n 说明:\n\n\n";<br /> cout<<" 按空格开始游戏后\n";<br /> cout<<" W\n";<br /> cout<<" A S D\n";<br /> cout<<" 移动\n";<br /> cout<<" 按R键返回起点\n";<br /> cout<<" 按P键返回主界面\n";<br /> cout<<" 按Q键设立传送点\n";<br /> cout<<" 按E键返回传送点\n";<br /> cout<<" +号处为终点\n\n\n";<br /> cout<<" 按空格继续···";<br /> long long ok='\0';<br /> while(ok=getch(),ok!=' ');<br /> system("cls");<br /> return ;<br /> }<br /> int main()<br /> {<br /> while(1)<br /> {<br /> long long xx=1,yy=1;<br /> system("cls");<br /> f='y';<br /> cout<<"\n\n\n\n\n\n\n\n\n\n\n";<br /> cout<<" 迷宫游戏\n";<br /> cout<<" 按空格开始游戏\n";<br /> cout<<" 按0退出游戏\n";<br /> cout<<" 按1换皮肤\n";<br /> cout<<" 按2游戏说明\n";<br /> cout<<"\n\n\n\n\n\n\n";<br /> cout<<" 制作:饼干";<br /> long long ok=getch();<br /> while(ok!='0'&&ok!='1'&&ok!='2'&&ok!=' ')ok=getch();<br /> switch(ok)<br /> {<br /> case ' ':<br /> break;<br /> case '0':<br /> tc();<br /> return 0;<br /> break;<br /> case '1':<br /> hf();<br /> f='n';<br /> break;<br /> case '2':<br /> sm();<br /> f='n';<br /> break;<br /> }<br /> while(f=='y')<br /> {<br /> system("cls");<br /> string a[n];<br /> long long x,y,qx,qy;<br /> long long ch;<br /> srand(time(0));<br /> long long s=rand()%6+1;<br /> switch(s)<br /> {<br /> case 1:<br /> qx=1;<br /> qy=1;<br /> a[0]="###########";<br /> a[1]="# # # #";<br /> a[2]="# # # #";<br /> a[3]="# ##### ###";<br /> a[4]="# # ###+#";<br /> a[5]="# # #";<br /> a[6]="###########";<br /> break;<br /> case 2:<br /> qx=8;<br /> qy=12;<br /> a[0]="####################";<br /> a[1]="#+ # # #";<br /> a[2]="# ## #### ### # #";<br /> a[3]="# #### ##### #";<br /> a[4]="### # # ## #";<br /> a[5]="##### ########## # #";<br /> a[6]="# ## ### ## #";<br /> a[7]="## ### ### # ## ##";<br /> a[8]="# # # #";<br /> a[9]="####################";<br /> break;<br /> case 3:<br /> qx=1;<br /> qy=1;<br /> a[0]="###################";<br /> a[1]="# # # # # #";<br /> a[2]="# # # # # # # # # #";<br /> a[3]="# # # # # # # # # #";<br /> a[4]="# # # # # # # # # #";<br /> a[5]="# # # # # # # # # #";<br /> a[6]="# # # # # # # # # #";<br /> a[7]="# # # # # # # # # #";<br /> a[8]="# # # # # # # # # #";<br /> a[9]="# # # # # # # # # #";<br /> a[10]="# # # # #+#";<br /> a[11]="####################";<br /> break;<br /> case 4:<br /> qx=1;<br /> qy=1;<br /> a[0]="########################################";<br /> a[1]="# #";<br /> a[2]="# #################################### #";<br /> a[3]="# # # #";<br /> a[4]="# # ###################### ##### #######";<br /> a[5]="# # #+ # # # ### #";<br /> a[6]="# # # # # ######### # #### ## #### ## #";<br /> a[7]="# # # # # ## # ## ## # # #";<br /> a[8]="# # # ### ## # # ########### ## ## # #";<br /> a[9]="# # # # # # # # # # # # #";<br /> a[10]="# # ### ###### ### # ######## ##### ## #";<br /> a[11]="# # # # # # # #";<br /> a[12]="# # # ######## ############## ##### # #";<br /> a[13]="# # # # #";<br /> a[14]="# # ################################## #";<br /> a[15]="# # # #";<br /> a[16]="# #################################### #";<br /> a[17]="# #";<br /> a[18]="########################################";<br /> break;<br /> case 5:<br /> qx=1;<br /> qy=1;<br /> a[0]="########################################";<br /> a[1]="# # #";<br /> a[2]="# ########### ################# ###### #";<br /> a[3]="# # # # # ## # #";<br /> a[4]="# # # #### ## # ## # #### ##### ## # # #";<br /> a[5]="# # # # # # # # # # # #";<br /> a[6]="# # # #### ###### ############### # #";<br /> a[7]="# # ## # # # # # #";<br /> a[8]="# # #### ######## ################# # #";<br /> a[9]="# ## # # # # ##### # # #";<br /> a[10]="# ########## # # # ### # #";<br /> a[11]="### # # # # ##### # # #";<br /> a[12]="# ######################## # # # #";<br /> a[13]="# # # # ## # ###";<br /> a[14]="# ### #### ####### ########### #### ## #";<br /> a[15]="# # # # +#";<br /> a[16]="########################################";<br /> break;<br /> case 6:<br /> qx=1;<br /> qy=1;<br /> a[0]="##################################################################################################################";<br /> a[1]="# #";<br /> a[2]="# # ############################################################################################################ #";<br /> a[3]="# # ### ############# ### #";<br /> a[4]="# ## ## ###### +# ######################################################################### # # ### # #";<br /> a[5]="# ### # ################### # # # # # # # # # # #";<br /> a[6]="# #### # ############################################################# # # # # # #";<br /> a[7]="# ##################################### ################## ## # ##### # # #";<br /> a[8]="# ###### # ##### ########## + ########################### ## ## # # #";<br /> a[9]="# # ######### ############## ###### # ## # ##################### ############ ######### # #";<br /> a[10]="# # ##### # ###### # # ####### ######## # ### # # #";<br /> a[11]="# # # ###### # #### ##### ########## # # # ##### ############## ###################### # ###";<br /> a[12]="# ##### # # ## # #### ## # ##### ############# ####### # # # # #";<br /> a[13]="# # # # # ## # ## # ############ ## # # # # ############# ###### ################ # # #";<br /> a[14]="# # # # ##### ## # ## ## # # # # ## # # # ###### # ######### # ############# ######## ### #";<br /> a[15]="# # # # ## # # # # # # ##### # # # # ############### # # #";<br /> a[16]="# ### ########## # # #################################### # ##################################### ############# #";<br /> a[17]="# # # ## # #### #";<br /> a[18]="# # ####################### ################################################################# ################## #";<br /> a[19]="# # # +#";<br /> a[20]="##################################################################################################################";<br /> break;<br /> }<br /> xx=x=qx,yy=y=qy;<br /> a[x][y]=p[r];<br /> print(a);<br /> while(a[x][y]!='+')<br /> {<br /> ch=getch();<br /> if(ch=='q')<br /> {<br /> xx=x;<br /> yy=y;<br /> }<br /> if(ch=='e')<br /> {<br /> a[x][y]=' ';<br /> a[xx][yy]=p[r];<br /> x=xx;<br /> y=yy;<br /> }<br /> if(ch=='r')<br /> {<br /> a[x][y]=' ';<br /> a[qx][qy]=p[r];<br /> x=qx;<br /> y=qy;<br /> }<br /> if(ch=='p')<br /> {<br /> f='n';<br /> break;<br /> }<br /> if((ch=='a'&&a[x][y-1]=='+')||(ch=='d'&&a[x][y+1]=='+')||(ch=='s'&&a[x+1][y]=='+')||(ch=='w'&&a[x-1][y]=='+'))<br /> {<br /> break;<br /> }<br /> if(ch==27)break;<br /> if(ch==97&&a[x][y-1]==' '||a[x][y-1]=='|')<br /> {<br /> a[x][y]=' ';<br /> y–;<br /> a[x][y]=p[r];<br /> }<br /> if(ch==100&&a[x][y+1]==' '||a[x][y+1]=='|')<br /> {<br /> a[x][y]=' ';<br /> y++;<br /> a[x][y]=p[r];<br /> }<br /> if(ch==115&&a[x+1][y]==' '||a[x+1][y]=='|')<br /> {<br /> a[x][y]=' ';<br /> x++;<br /> a[x][y]=p[r];<br /> }<br /> if(ch==119&&a[x-1][y]==' '||a[x-1][y]=='|')<br /> {<br /> a[x][y]=' ';<br /> x–;<br /> a[x][y]=p[r];<br /> }<br /> print(a);<br /> }<br /> system("cls");<br /> if(f=='n')break;<br /> cout<<"you win!!!"<<endl;<br /> cout<<"按空格继续···";<br /> ok='\0';<br /> while(ok=getch(),ok!=' ');<br /> system("cls");<br /> cout<<"是否继续(y/n)";<br /> while(f=getch(),f!='y'&&f!='n');<br /> }<br /> }<br /> return 0;<br /> } </p> </div> <div class="postmetadata"> </div> </div> </div> <!-- #content --> </div> <!-- #container --> </div> <!-- #main --> <div data-rocket-location-hash="ca617b87662306c44a07771edd57e78e" id="footer" class="clearfix"> <p> © 2024 玉汝于成 </p> </div> <script>var rocket_beacon_data = {"ajax_url":"https:\/\/aiolia.org\/wp-admin\/admin-ajax.php","nonce":"eec733f32d","url":"https:\/\/aiolia.org\/%E4%B8%8D%E9%94%99%E7%9A%84%E4%B8%80%E4%B8%AA%E6%B8%B8%E6%88%8F%E9%93%BE%E6%8E%A5%EF%BC%88c%E6%BA%90%E4%BB%A3%E7%A0%81%EF%BC%89","is_mobile":false,"width_threshold":1600,"height_threshold":700,"delay":500,"debug":null,"status":{"atf":true,"lrc":true},"elements":"img, video, picture, p, main, div, li, svg, section, header, span","lrc_threshold":1800}</script><script src="https://aiolia.org/wp-content/cache/min/3/bb4277bf6b1b164dc2b4245e4365d0f2.js" data-minify="1" data-rocket-defer defer></script></body> </html> <!-- This website is like a Rocket, isn't it? Performance optimized by WP Rocket. Learn more: https://wp-rocket.me - Debug: cached@1729329051 -->