C++好玩代码(摘录)

Fyacee 2024-10-06 16:05:01 阅读 64

标题1:贪吃蛇。

<code>#include <iostream>

#include <cstdio>

#include <cstdlib>

#include <ctime>

#include <conio.h>

#include <cmath>

#include <windows.h>

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 << "$";

return true;

}

/*** 蛇的前进 ***/

bool go_ahead()

{

node temp;

bool e=false;

temp=snake[snake_length-1];

for (int i=snake_length-1;i>=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 || n<10 || m>25 || n>40)

{

cout << "ERROR" << endl;

system("pause");

return 0;

}

int hard;

cin >> hard;

if (hard<=0 || hard>100)

{

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 << "Now length: ";

/*** 开始游戏 ***/

while (1)

{

/*** 难度随长度增加而提高 ***/

hard_len=(double)snake_length/(double) (m*n);

/*** 调节时间,单位是ms ***/

a=clock();

while (1)

{

b=clock();

if (b-a>=(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 <stdio.h>

#include <windows.h>

#include <time.h>

//里规格:长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 < MAX_LIFE)

BuildMyTank( &my_tank );

}

Sleep(5);

}

return 0;

}

/*//这里的多线程暂时不用 //x键用于子弹发射,x键的冷却时间不能和上下左右一同设置,那样就太快了

DWORD WINAPI InputX(LPVOID lpParameter) //如果不用多线程运行,那么在x键冷却时间内程序会因Sleep将会挂起,暂停运行

{ //因为只有一个变量改变,而且变量改变先后顺序是显而易见的,所以不必设置缓冲区

for(;;)

{

if(GetAsyncKeyState( 88 )& 0x8000) //88为x键键值,当摁下x并且x键处于可输入状态

{

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

Sleep(600); // 子线程Sleep中,x就不能被"读入",主线程每操作完一次子弹发射,key_x会归零

}

Sleep(10);

}

return 0;

}*/

void keyboard ()

{ // kbhit() getch() 用法可用但是不好用

/*

函数功能:该函数判断在此函数被调用时,某个键是处于UP状态还是处于DOWN状态,及前次调用GetAsyncKeyState函数后,

是否按过此键.如果返回值的最高位被置位,那么该键处于DOWN状态;如果最低位被置位,那么在前一次调用此函数后,此键被按过,

否则表示该键没被按过.

这里GetAsyncKeyState比 kbhit() + getch() 好用,操作更顺畅. GetAsyncKeyState的返回值表示两个内容,

一个是最高位bit的值,代表这个键是否被按下。一个是最低位bit的值,代表上次调用GetAsyncKeyState后,这个键是否被按下。

&为与操作,&0x8000就是判断这个返回值的高位字节。如果high-order bit是1,则是按下状态,否则是弹起状态,为0

*/

int count=0;

if (GetAsyncKeyState(VK_UP)& 0x8000)

MoveMyTank( UP );

else if (GetAsyncKeyState(VK_DOWN)& 0x8000)

MoveMyTank( DOWN );

else if (GetAsyncKeyState(VK_LEFT)& 0x8000)

MoveMyTank( LEFT );

else if (GetAsyncKeyState(VK_RIGHT)& 0x8000)

MoveMyTank( RIGHT );

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

exit(0); //退出程序函数

else if (GetAsyncKeyState( 0x20 )& 0x8000) //空格

Stop();

else if (count++%7==0) //这里添加计数器是为了防止按键粘连不能达到微调效果

{

if (speed>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 (speed<20 && GetAsyncKeyState( 0x6D )& 0x8000) // - 键

{

speed++;

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

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

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

}

}

if(my_tank.CD==7)

{

if(GetAsyncKeyState( 88 )& 0x8000)

{

BuildBullet(my_tank);

my_tank.CD=0;

}

}

else

my_tank.CD++;

}

void BuildAIBullet(Tank *tank) //AI子弹发射(建立)含有对my_tank的读取

{

if(tank->CD==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 < 20) //在老家左边

{

if(tank->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 < tank->y)

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

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

if(my_tank.y < tank->y)

{

big=tank->y;

smal=my_tank.y;

}

for(i=smal+2;i<=big-2;i++) //判断AI炮口的直线上两坦克间有无障碍

if(map[i][tank->x]!=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 < tank->x)

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

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

if(my_tank.x < tank->x)

{

big=tank->x;

smal=my_tank.x;

}

for(i=smal+2;i<=big-2;i++) //判断AI炮口的直线上两坦克间有无障碍

if(map[tank->y][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; j< BULLET_NUM ; j++) //子弹间的碰撞判断,若是我方子弹和敌方子弹碰撞则都删除,若为两敌方子弹则无视

if(bullet [j].exist && j!=i && (bullet[i].my || bullet[j].my) && bullet[i].x==bullet[j].x && bullet[i].y==bullet[j].y)

{ //同样的两颗我方子弹不可能产生碰撞

bullet [j].exist=0;

bullet [i].exist=0;

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

break;

}

}

}

}

void BulletHit(Bullet* bullet) //含有Tank全局变量的修改,子弹间的碰撞不在本函数,子弹间碰撞已在BulletShoot中检测并处理

{ //∵每次打中的坦克都不一样,不可能把所有坦克放在参数表中

int x=bullet->x; //∴这里的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 ; i<=1 ; i++)

if(map[y][x+i]==1 || map[y][x+i]==2) //如果子弹打中砖块两旁为砖块,则删除砖,若不是(一旁为坦克或其他地形)则忽略

{

map[y][x+i]=0; //砖块碎

GoToxy(2*x+2*i,y);

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED); //背景黑色

printf(" ");

}

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

for(i = -1 ; i<=1 ; i++)

if(map[y+i][x]==1 || map[y+i][x]==2)

{

map[y+i][x]=0;

GoToxy(2*x,y+i);

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED); //背景黑色

printf(" ");

}

bullet->exist=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]<104 ) //若我的子弹碰到了敌方坦克

{

int num = map[y][x]%100; //map[y][x]%100 等同于 tank.num ,可通过map值读取该坦克信息

if(AI_tank[num].model==3 && AI_tank[num].color==2) //若为firm tank,且color==2。该坦克为绿色,表明没有受到伤害

AI_tank[num].color=3; //则变成黄色,color=3为黄色

else if (AI_tank[num].model==3 && AI_tank[num].color==3)

AI_tank[num].color=4; //4为红色

else //其他类型的坦克或者firm tank为红色的情况

{

AI_tank[num].alive=0;

ClearTank(AI_tank[num].x , AI_tank[num].y); //清除该坦克

}

bullet->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]<104) //敌方子弹击中敌方坦克,可以设置两种子弹运行方式,这种暂时不用

// bullet->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)+1<=n

if(AIPositionCheak(*position)) //若此位置无障碍,可生成。position参数详见AIPositionCheak函数定义

{

AI_tank->x= 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;j<3;j++)

if( map[y+j-1][x+i-1]!=0) //如果遍历的九宫格里有障碍物

return 0; //则返回0,表示此生成位置有阻碍

return 1; //否则生成1,表示此生成位置无阻碍

}

void MoveAITank(Tank* AI_tank) //AI专用函数,该函数主要为AI加强

{

if(AI_tank->alive) //如果坦克活着

{

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;j<=4;j++)

if(TankCheak ( *AI_tank , j )) //循环判断坦克四周有无障碍,此函数返值1为可通过

break;

if(j==5) //j==5说明此坦克四周都有障碍物,无法通行

{

PrintTank(*AI_tank);

return; //则跳过下面的while循环以防程序卡死

}

while(TankCheak ( *AI_tank , AI_tank->direction) == 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(level<=MAX_LEVEL)

while(1)

{

if(timing++%10==0)

{

ColorChoose(color); //颜色选择

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

printf("恭喜过关!");

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

printf("等待下关");

GoToxy(87,17);

printf("请按回车键进入下一关!");

GoToxy(88,18);

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

if(++color==8)

color=1;

}

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

{

GoToxy(88,17); //抹除副屏幕中的提示

printf(" ");

GoToxy(88,18);

printf(" ");

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

Initialize(); //初始化从下一关开始,level已++

break;

}

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

exit(0);

Sleep(20);

}

else //level>8 通关

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<=0 && !AI_tank[0].alive && !AI_tank[1].alive && !AI_tank[2].alive && !AI_tank[3].alive )

NextLevel(); //进入下一关

if(my_tank.revive>=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("正在游戏");

}

标题3:狼人杀。

#include <iostream>//C++输入输出流库

#include <cstdlib>//使用srand函数要用到这个库

#include <ctime>//使用time函数要用到这个库

#include <Windows.h>

#include <conio.h>

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<<" 你选择杀掉"<<endl;

long long a;

cin>>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<<" 你选择预言谁的身份"<<endl;

long long a;

cin>>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<<"(法师)"<<endl;

m[a]=0;

c--;

break;//

}

else if(s[i]==2)

{

if(flag==0||m[flag]==0)

{

long long a;

do

{

a=rand()%15+1;

}

while(a==i||m[a]==0);

if(s[a]==1)

yy[a]=1;

else if(s[a]==3)

yy[a]=3;

}

}

else if(s[i]==4)

{

f=0;

while(f==0)

{

long long a;

a=rand()%3+1;

if(a==3)break;

if(a==1)

{

if(sy>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<<" 游戏结束"<<endl;

return ;

}

break;//

}

}

else if(a==2&&day>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.* 啥都不做 *"<<endl;

long long a,f=0;

while(f==0)

{

cin>>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<<endl;

long long b;

cin>>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<<">>毒药<<不足"<<endl;

}

}

else if(a==2)

{

if(wj>0)

{

wj--;

f=1;

cout<<"你选择了复活"<<endl;

cout<<"阵亡名单:"<<endl;

for(long long i=1;i<=15;i++)

if(m[i]==0)

cout<<i<<"号,身份:"<<s[i]<<" "<<endl;;

long long b;

cin>>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<<" 你选择投几号"<<endl;

long long a=99;

while(a==99)

{

cin>>a;

if(a==99)

for(long long i=1;i<=15;i++)

if(m[i]==1)

cout<<" "<<i<<"."<<s[i]<<endl;

}

if(s[i]==3&&day>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;i<=15;i++)

{

if(p[i]>max)

{

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<<" 游戏结束"<<endl;

return ;

}

}

while(m[n]==1&&c>1);

if(sr==n&&m[n]==1)

{

cout<<"你杀掉了所有人!!!"<<endl;

}

cout<<" 游戏结束"<<endl;

return ;

}

int main()

{

srand((int)time(0));

char a='1';code>

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';code>

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;

}

标题4:吃豆人。

#include <stdio.h>

#include <iostream>

#include <time.h>

#include <conio.h>

#include <windows.h>

#include <stdlib.h>

#include <string.h>

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 <= 3; j++) {

if (i + fx[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 <= n; j++) {

if (changdi[j]) {

if (dis[i][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 <= 3; i++) {

if (changdi[(now1 + fx[i]) / 27][(now1 + fx[i]) % 27] && i != last1 &&

minhaha > 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 < dis[now1 + fx[i]][now]) {

minhaha = dis[now1 + fx[i]][now];

haha = i;

}

}

}

xx = now1 / 27;

yy = now1 % 27;

gotoxy (xx, yy);

if (changdi[xx][yy] == 1) {

printf ("·");

} else {

printf (" ");

}

now1 += fx[haha];

last1 = (haha + 2) % 4;

xx = now1 / 27;

yy = now1 % 27;

gotoxy (xx, yy);

color (4);

printf ("◆");

color (7);

if (xx == x && yy == y) {

if (!dali) {

chi++;

} else {

guozi += 50;

fenshu += 50;

last1 = 0;

gotoxy (now1 / 27, now1 % 27);

if (changdi[now1 / 27][now1 % 27] == 1) {

printf ("·");

} else {

printf (" ");

}

now1 = 389;

}

}

}

if (g2) {

int k;

minhaha = 2147483647;

if (fangx == 0 | fangx == 2) {

k = y + (fxfx[fangx][1]) * 3;

while (k > 25 | !changdi[x][k]) {

k--;

}

while (k < 1 | !changdi[x][k]) {

k++;

}

} else {

k = x + (fxfx[fangx][0]) * 3;

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 <= 3; i++) {

if (changdi[(now2 + fx[i]) / 27][(now2 + fx[i]) % 27] && i != last2 &&

minhaha > 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 < dis[now2 + fx[i]][k]) {

minhaha = dis[now2 + fx[i]][k];

haha = i;

}

}

}

xx = now2 / 27;

yy = now2 % 27;

gotoxy (xx, yy);

if (changdi[xx][yy] == 1) {

printf ("·");

} else {

printf (" ");

}

now2 += fx[haha];

last2 = (haha + 2) % 4;

gotoxy (18, 30);

xx = now2 / 27;

yy = now2 % 27;

gotoxy (xx, yy);

color (5);

printf ("◆");

color (7);

if (xx == x && yy == y) {

if (!dali) {

chi++;

} else {

guozi += 50;

fenshu += 50;

last2 = 0;

gotoxy (now2 / 27, now2 % 27);

if (changdi[now2 / 27][now2 % 27] == 1) {

printf ("·");

} else {

printf (" ");

}

now2 = 390;

}

}

}

if (g3) {

int k;

minhaha = 2147483647;

if (fangx == 0 | fangx == 2) {

k = y + (fxfx[(fangx + 1) % 4][1]) * 3;

while (k > 25 | !changdi[x][k]) {

k--;

}

while (k < 1 | !changdi[x][k]) {

k++;

}

} else {

k = x + (fxfx[(fangx + 1) % 4][0]) * 3;

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 <= 3; i++) {

if (changdi[(now3 + fx[i]) / 27][(now3 + fx[i]) % 27] && i != last3 &&

minhaha > 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 < dis[now3 + fx[i]][k]) {

minhaha = dis[now3 + fx[i]][k];

haha = i;

}

}

}

xx = now3 / 27;

yy = now3 % 27;

gotoxy (xx, yy);

if (changdi[xx][yy] == 1) {

printf ("·");

} else {

printf (" ");

}

now3 += fx[haha];

last3 = (haha + 2) % 4;

gotoxy (18, 30);

xx = now3 / 27;

yy = now3 % 27;

gotoxy (xx, yy);

color (3);

printf ("◆");

color (7);

if (xx == x && yy == y) {

if (!dali) {

chi++;

} else {

guozi += 50;

fenshu += 50;

last3 = 0;

gotoxy (now3 / 27, now3 % 27);

if (changdi[now3 / 27][now3 % 27] == 1) {

printf ("·");

} else {

printf (" ");

}

now3 = 341;

}

}

}

if (chi) {

beichi++;

}

}

int main () {

MessageBox (NULL, "欢迎来到吃豆人游戏!", "温馨提示", MB_OK);

begin ();

int jixu = 1;

reset ();

string bb[4] = {"●", "①", "②" ,"③"};

color (7);

gotoxy (12, 12);

printf ("倒计时");

color (12);

for (int i = 3; i >= 0; i--) {

if (i==0) {

color (11);

}

gotoxy (13, 13);

cout << bb[i];

Sleep (1000);

}

gotoxy (12, 12);

printf (" ");

gotoxy (13, 13);

printf (" ");

while (!f) {

Sleep (1);

gotoxy (7, 30);

color (3);

printf ("得分:%d ", fenshu);

gotoxy (3, 30);

printf ("怪物速度:%d ", 300 - t2);

gotoxy (5, 30);

printf ("你的速度:%d ", 300 - t1);

gotoxy (9, 30);

printf ("被吃次数:%d ", beichi);

gotoxy (11, 30);

printf ("控制小人行走:方向键");

gotoxy (13, 30);

printf ("复活次数:无限次");

gotoxy (15, 30);

printf ("小人加速/减速:'+'/'-'");

gotoxy (17, 30);

printf ("大力丸(怪物们不会主动吃您):$键");

gotoxy (20, 10);

color (4);

if (kbhit ()) {

shuru ();

}

if (stopped) {

continue;

}

T1 = (T1 + 1) % t1;

T2 = (T2 + 1) % t2;

if (T1 % t1 == 0 && now + fx[fangx] > 0 && now + fx[fangx] < n) {

move1 ();

}

if (T2 % t2 == 0) {

if (guaitimer <= 8) {

if (guaitimer==0) {

g1 = 1;

}

if (guaitimer == 8) {

g2 = 1;

}

guaitimer++;

}

if (!g3 && fenshu >= 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);

}

}



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。