C++控制台编程“坦克大战”

新手C++ 坦克大战

本人新手写的比较杂乱,不喜勿喷,

1、首先,先用图片介绍下代码运行逻辑,

代码逻辑

2、这是控制台的界面,展示一下各个功能的界面

开始界面
菜单
单人模式界面
单人模式
双人模式界面
双人模式
自定义地图
自定义地图

3、以下是代码展示

这是菜单类

#include "Menu.h"
#include <windows.h>
#include "Game.h"
//显示欢迎界面
void Menu::Show_Welcome()
{
	Map::Colors(白色);
	Map::WriteChar(2,8,"I -         2600              HI -             20000");
	Map::Colors(紫色);
	Map::WriteChar(5, 10,   "▓▓▓▓▓        ▓       ▓▓▓▓▓  ▓▓▓▓▓  ▓        ▓▓▓▓▓");
	Sleep(100);
	Map::WriteChar(6, 10,   "▓       ▓     ▓  ▓         ▓          ▓      ▓        ▓        ");
	Sleep(100);
	Map::WriteChar(7, 10,   "▓       ▓    ▓    ▓        ▓          ▓      ▓        ▓        ");
	Sleep(100);
	Map::WriteChar(8, 10,   "▓▓▓▓▓    ▓      ▓       ▓          ▓      ▓        ▓▓▓▓▓");
	Sleep(100);
	Map::WriteChar(9, 10,   "▓       ▓  ▓▓▓▓▓▓      ▓          ▓      ▓        ▓        ");
	Sleep(100);
	Map::WriteChar(10, 10,  "▓       ▓  ▓        ▓      ▓          ▓      ▓        ▓        ");
	Sleep(100);
	Map::WriteChar(11, 10,  "▓▓▓▓▓   ▓        ▓      ▓          ▓      ▓▓▓▓  ▓▓▓▓▓");
	Sleep(100);
	Map::WriteChar(13, 14,  "    ▓▓▓▓       ▓▓▓▓▓   ▓▓▓▓▓    ▓      ▓ ");
	Sleep(100);
	Map::WriteChar(14, 14,  "  ▓▓      ▓         ▓           ▓        ▓      ▓ ");
	Sleep(100);
	Map::WriteChar(15, 14,  " ▓▓                  ▓           ▓         ▓    ▓  ");
	Sleep(100);
	Map::WriteChar(16, 14,  "▓                     ▓           ▓          ▓▓▓   ");
	Sleep(100);
	Map::WriteChar(17, 14,  " ▓▓                  ▓           ▓            ▓     ");
	Sleep(100);
	Map::WriteChar(18, 14,  "  ▓▓      ▓         ▓           ▓            ▓     ");
	Sleep(100);
	Map::WriteChar(19, 14,  "    ▓▓▓▓       ▓▓▓▓▓       ▓            ▓     ");
	Sleep(200);
}
//静态菜单信息
void Menu::Show_Menu()
{
	Map::Colors(白色);	
	Map::WriteChar(38,22, "@  1990  1980  NAMCO  LTD.");
	Map::WriteChar(39,24, "ALL RIGHTS  RESERVED");
}
//自定义地图赋值及打印
int tool::Init_Map[41][41];
void tool::Init_Info()
{
    int i,j;
    for (i = 0; i < HIGHT; i++)
    {
        for (j = 0; j < WIDTH; j++)
        {
            Init_Map[41][41];


            //初始化边框
            if (Init_Map[i][j] == 边框)
            {
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN
					| FOREGROUND_RED | FOREGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE);
                Map::WriteChar(i, j, "■");
            }
            
            if (Init_Map[i][j] == 黄土墙)//被击中变成红土墙
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_RED | BACKGROUND_GREEN | BACKGROUND_RED);
                Map::WriteChar(i, j, "▓");
            }
            if (Init_Map[i][j] == 红土墙)
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | BACKGROUND_GREEN | BACKGROUND_RED);
                Map::WriteChar(i, j, "▓");
            }
            if (Init_Map[i][j] == 水流)
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | BACKGROUND_BLUE | FOREGROUND_BLUE | FOREGROUND_GREEN);
                Map::WriteChar(i, j, "~");
            }
            if (Init_Map[i][j] == 钢墙)
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN
                    | FOREGROUND_RED | FOREGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE);
                Map::WriteChar(i, j, "■");
            }
            if (Init_Map[i][j] == 老家)
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN);
                Map::Map::WriteChar(37, 19, "◣★◢");
                Map::WriteChar(38, 19, "███");
                Map::WriteChar(39, 19, "◢█◣");

            }
            Map::Colors(黑色);
        }
    }
}
void tool::menu()
{
	COORD Coord[3];
	const char mu[3][16] =
	{
		"               ",
		 "1  PLAYER",
		 "2  PLAYERS",
	};
	for (int i = 0; i < 3; i++)
	{
		Coord[i].Y = 24;
	}
	Coord[0].X = 23;
	Coord[1].X = 25;
	Coord[2].X = 27;

	for (int i = 0; i < 3; i++)
	{
		Map::WriteChar(Coord[i].X, Coord[i].Y, mu[i]);
	}
	Map::Colors(绿色);
	Map::WriteChar(Coord[1].X, Coord[1].Y, mu[1]);
	int Select = 1;
	while (1)
	{
		if (GetAsyncKeyState('W') & 0x8001)
		{
			Map::Colors(白色);
			Map::WriteChar(Coord[Select].X, Coord[Select].Y, mu[Select]);
			if (Select == 1)
				Select = 2;
			else
				Select--;
			Map::Colors(绿色);
			Map::WriteChar(Coord[Select].X, Coord[Select].Y, mu[Select]);
		}
		else if (GetAsyncKeyState('S') & 0x8001)
		{
			Map::Colors(白色);
			Map::WriteChar(Coord[Select].X, Coord[Select].Y, mu[Select]);
			if (Select == 2)
				Select = 1;
			else
				Select++;
			Map::Colors(绿色);
			Map::WriteChar(Coord[Select].X, Coord[Select].Y, mu[Select]);
		}
		else if (GetAsyncKeyState(0xD) & 0x8001)//回车键
		{
			switch (Select)
			{
			case 1:Game::play = 1; break;
			case 2:Game::play = 2; break;
			default:
				break;
			}
			return;
		}
		Sleep(200);
	}
}

坦克类

#include "Tank.h"
#include "Map.h"
#pragma comment(lib,"winmm.lib")
//坦克mode模型的三维数组
const char* tank_figure[6][3][4] =
{
	{
	{"█┃ █", "█┳ █", "███", "███"},
	{"█●█", "█●█", "━ ●┫", "┣ ●━"},
	{"█┻ █", "█┃ █", "███", "███"}
  },
  {
	{"◢┃ ◣", "◢━ ◣", "◢┳ ◣", "◢┳ ◣"},
	{"┣ ●┫", "┣ ●┫", "━ ●┃", "┃ ●━"},
	{"◥━ ◤", "◥┃ ◤", "◥┻ ◤", "◥┻ ◤"}
  },
  {
	{"┏ ┃ ┓", "┏ ┳ ┓", "┏ ┳ ┓", "┏ ┳ ┓"},
	{"┣ ●┫", "┣ ●┫", "━ ●┫", "┣ ●━"},
	{"┗ ┻ ┛", "┗ ┃ ┛", "┗ ┻ ┛", "┗ ┻ ┛"}
  },
  {
	{"┏ ┃ ┓", "◢━ ◣", "┏ ┳ ◣", "◢┳ ┓"},
	{"┣ ●┫", "┣ ●┫", "━ ●┃", "┃ ●━"},
	{"◥━ ◤", "┗ ┃ ┛", "┗ ┻ ◤", "◥┻ ┛"}
  },
  {
	{"╔ ┃ ╗", "╔ ╦ ╗", "╔ ╦ ╗", "╔ ╦ ╗"},
	{"╠ █╣", "╠ █╣", "━ █╣", "╠ █━"},
	{"╚ ╩ ╝", "╚ ┃ ╝", "╚ ╩ ╝", "╚ ╩ ╝"}
  },
 {
	{"  ■  ", "■  ■", "  ■■", "■■  "},
	{"■●■", "■●■", "■●  ", "  ●■"},
	{"■  ■", "  ▉  ", "  ■■", "■■  "}
 }
};
//坦克构造
Tank::Tank(COORD pos, DIR dir,int mode,int team)
{
	//坐标
	this->pos = pos;
	//方向
	this->dir = dir;
	//图案模型
	this->mode = mode;
	//阵营
	this->team = team;
	//时间坦克移动
	this->CD = 150;
	this->end_time = clock();
	this->music = clock();
	//坦克分数
	this->score = 0;
	//打印坦克
	Show_Tank();
}
//打印坦克
void Tank::Show_Tank()
{
	const char* (*tankModel)[4] = tank_figure[mode];
	for (int i = 0; i < 3; i++)
	{
		//敌方坦克需要彩色,来区别
		if (team == 3)
		{
			Map::Colors(rand()%7+2);
		}
		else
		{
			Map::Colors(紫色);
		}
		Map::WriteChar(pos.X-1+i,pos.Y-1,tankModel[i][dir]);
		Map::dynamic[pos.X - 1 + i][pos.Y - 1] = 坦克;
		Map::dynamic[pos.X - 1 + i][pos.Y ] = 坦克;
		Map::dynamic[pos.X - 1 + i][pos.Y+1] = 坦克;

	}
}
//清理坦克
void Tank::Clear_Tank()
{
	for (int i = 0; i < 3; i++)
	{		
		Map::WriteChar(pos.X - 1 + i, pos.Y - 1, "      ");
		Map::dynamic[pos.X - 1 + i][pos.Y - 1] = 空地;
		Map::dynamic[pos.X - 1 + i][pos.Y] = 空地;
		Map::dynamic[pos.X - 1 + i][pos.Y + 1] = 空地;
	}
}
//坦克移动
void Tank::Move_Tank(DIR dir)
{
	//移动坦克之前检查CD是否冷却
	if (Check_End_Time())
	{
		//清理坦克
		Clear_Tank();
		//检查方向是否一致
		if (this->dir != dir)
		{
			this->dir = dir;
			Show_Tank();
			return;
		}
		else
		{
			//检查是否可以移动
			if (if_Move_Tank())
			{
				switch (dir)
				{
				case:pos.X--;
					break;
				case:pos.X++;
					break;
				case:pos.Y--;
					break;
				case:pos.Y++;
					break;
				default:
					break;
				}
			}
		}
		Show_Tank();
	}
}
//坦克移动判断
bool Tank::if_Move_Tank()
{
	if (dir ==)
	{
		return Collide_Check({ pos.X - 2,pos.Y - 1 }) && Collide_Check({ pos.X - 2,pos.Y }) && Collide_Check({pos.X-2,pos.Y+1});
	}
	if (dir ==)
	{
		return Collide_Check({ pos.X + 2,pos.Y - 1 }) && Collide_Check({ pos.X + 2,pos.Y }) && Collide_Check({ pos.X + 2,pos.Y + 1 });
	}
	if (dir ==)
	{
		return Collide_Check({ pos.X -1,pos.Y - 2 }) && Collide_Check({ pos.X  ,pos.Y -2}) && Collide_Check({ pos.X + 1,pos.Y - 2 });
	}
	if (dir ==)
	{
		return Collide_Check({ pos.X + 1,pos.Y + 2 }) && Collide_Check({ pos.X,pos.Y + 2}) && Collide_Check({ pos.X - 1,pos.Y + 2 });
	}
	return false;
}
//辅助坦克移动判断检测
bool Tank::Collide_Check(COORD pos)
{
	if (Map::static_Map[pos.X][pos.Y] == 空地 && Map::dynamic[pos.X][pos.Y] != 坦克)
	{
		return true;
	}

	return false;
}
//CD检测
bool Tank::Check_End_Time()
{
	if (clock() - end_time > this->CD)
	{
		end_time = clock();
		return true;
	}
	return false;
}
//坦克开火
void Tank::Play_Bullet(std::vector<Bullet*>& bull)
{
	/*if (pos.X == 2)
	{
		return;
	}*/
	Sleep(100);
	//播放发子弹音乐D:\Project\TEST_ONE\Music
	Bullet* bullet = new Bullet(this->pos,this-> dir,this->team);
	bull.push_back(bullet);
		//PlaySoundA("D:\\Project\\TEST_ONE\\Music\\boom.wav", NULL, SND_ASYNC | SND_FILENAME);
}

子弹类

#include "Bullet.h"
#include "Game.h"
#include <conio.h>
#pragma comment(lib,"winmm.lib")
//如果子弹遇到水流后loc=1,
int loc;
//子弹类构造函数
Bullet::Bullet(COORD pos,DIR dir,int team)
{
	//子弹坐标初始化
	this->pos = pos;
	//子弹方向初始化
	this->dir = dir;
	//子弹存活
	this->alive = true;

	//子弹阵营
	this->team = team;

	//检查子弹赋值前的地方是否为边框

		if (dir ==)
		{
			if (Map::static_Map[this->pos.X - 2][this->pos.Y] == 边框)
			{

				alive = false;
			}
		}
		else if (dir ==)
		{
			if (Map::static_Map[this->pos.X + 2][this->pos.Y] == 边框)
			{

				alive = false;
			}
		}
		else if (dir ==)
		{
			if (Map::static_Map[this->pos.X][this->pos.Y - 2] == 边框)
			{

				alive = false;

			}
		}
		else if (dir ==)
		{
			if (Map::static_Map[this->pos.X][this->pos.Y + 2] == 边框)
			{

				alive = false;
			}
		}
		if (alive == true)
		{
			if (Gps_Bullet_1())
			{
				switch (dir)
				{
				case:this->pos.X -= 2;
					break;
				case:this->pos.X += 2;
					break;
				case:this->pos.Y -= 2;
					break;
				case:this->pos.Y += 2;
					break;
				default:
					break;
				}
				//Show_bullet();
			}

		}
	
}
//子弹移动
void Bullet::Move()
{	//清理子弹
		Clear_Bullet();
		//检测能否移动
		if (Gps_Bullet())
		{//如果经过水流
			if (loc >= 1)
			{
				for (int x = 0; x < 41; x++)
				{
					for (size_t i = 0; i < 41; i++)
					{
						if (Map::static_Map[x][i] == 水流)
						{
							SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | BACKGROUND_BLUE | FOREGROUND_BLUE | FOREGROUND_GREEN);
							Map::WriteChar(x, i, "~");
						}
					}
				}
				loc--;
			}
			switch (dir)
			{
			case:this->pos.X -= 1;
				break;
			case:this->pos.X += 1;
				break;
			case:this->pos.Y -= 1;
				break;
			case:this->pos.Y += 1;
				break;
			default:
				break;
			}
			Show_bullet();
		}
		else
		{
			alive = false;
		}
}
//子弹坐标设置
bool Bullet::Gps_Bullet_1()
{
	if (dir ==)
	{
		return check({ this->pos.X - 2,this->pos.Y });
	}
	if (dir ==)
	{
		return check({ this->pos.X + 2,this->pos.Y });
	}
	if (dir ==)
	{
		return check({ this->pos.X ,this->pos.Y - 2 });
	}
	if (dir ==)
	{
		return check({ this->pos.X ,this->pos.Y + 2 });
	}
	return false;
}
bool Bullet::Gps_Bullet()
{
	if (dir ==)
	{
		return check({ this->pos.X - 1,this->pos.Y });
	}
	if (dir ==)
	{
		return check({ this->pos.X + 1,this->pos.Y });
	}
	if (dir ==)
	{
		return check({ this->pos.X ,this->pos.Y - 1 });
	}
	if (dir ==)
	{
		return check({ this->pos.X ,this->pos.Y + 1 });
	}
	return false;
}
//碰撞检测
bool Bullet::check(COORD pos)
{
	播放发子弹音乐D:\Project\TEST_ONE\Music
	//PlaySoundA("D:\\Project\\TEST_ONE\\Music\\hit.wav", NULL, SND_ASYNC |SND_NODEFAULT);
	if (Map::static_Map[pos.X][pos.Y] == 老家)
	{
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_INTENSITY);
		Map::WriteChar(37, 19, "◢  ◣");
		Map::WriteChar(38, 19, "  █  ");
		Map::WriteChar(39, 19, "◥  ◤");
		Sleep(1000);
		//清理地图
		Map::Clear_Map();
		//改变标记
		this->Home = false;
		//将标记传入输赢检测
		vin(this->Home);
		//输出老家被毁
		Map::Clear_Map();
		Map::Colors(红色);
		Map::WriteChar(20, 20, "老家被毁");
		Sleep(1000);
		return false;
	}
	if (Map::static_Map[pos.X][pos.Y] == 边框)
	{
		return false;
	}
	if (Map::dynamic[pos.X][pos.Y] == 坦克)
	{	
		//由于判断体较长,所以封装陈函数
		Over_Tank({pos.X,pos.Y});
		//检测输入,看哪一方先死全
		vin();
		return false;
	}
	if (Map::dynamic[pos.X][pos.Y] == 子弹)
	{
		for (int x = 0; x < Game::bull.size(); x++)
		{
			if (Game::bull[x]->pos.X == pos.X && Game::bull[x]->pos.Y == pos.Y)
			{
				Game::bull[x]->Clear_Bullet();
				Game::bull[x]->alive = false;
			}
		}
		return false;
	}
	if (Map::static_Map[pos.X][pos.Y] == 空地 && Map::dynamic[pos.X][pos.Y] == 空地)
	{
		return true;
	}
	else if (Map::static_Map[pos.X][pos.Y] == 黄土墙)
	{
		Map::static_Map[pos.X][pos.Y] = 红土墙;
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | BACKGROUND_GREEN | BACKGROUND_RED);
		Map:: WriteChar(pos.X, pos.Y, "▓");
		return false;
	}
	else if (Map::static_Map[pos.X][pos.Y] == 水流)
	{
		loc = 2;
		return true;
	}
	else if (Map::static_Map[pos.X][pos.Y] == 红土墙)
	{
		if (dir ==|| dir ==)
		{
			if (Map::static_Map[pos.X - 1][pos.Y] == 红土墙)
			{
				Map::static_Map[pos.X - 1][pos.Y] = 空地;
				Map::WriteChar(pos.X - 1, pos.Y, "  ");
			}
			if (Map::static_Map[pos.X + 1][pos.Y] == 红土墙)
			{
				Map::static_Map[pos.X + 1][pos.Y] = 空地;
				Map::WriteChar(pos.X + 1, pos.Y, "  ");
			}
			Map::static_Map[pos.X][pos.Y] = 空地;
			Map::WriteChar(pos.X, pos.Y, "  ");
		}
		if (dir ==|| dir ==)
		{
			if (Map::static_Map[pos.X][pos.Y - 1] == 红土墙)
			{
				Map::static_Map[pos.X][pos.Y - 1] = 空地;
				Map::WriteChar(pos.X, pos.Y - 1, "  ");
			}
			if (Map::static_Map[pos.X][pos.Y + 1] == 红土墙) {
				Map::static_Map[pos.X][pos.Y + 1] = 空地;
				Map::WriteChar(pos.X, pos.Y + 1, "  ");
			}
			Map::static_Map[pos.X][pos.Y] = 空地;
			Map::WriteChar(pos.X, pos.Y, "  ");
		}		
		return false;
	}
	return false;
}
//打印子弹
void Bullet::Show_bullet()
{
	Map::Colors(绿色);
	Map::WriteChar(pos.X, pos.Y, "⊙");
	Map::dynamic[pos.X][pos.Y] = 子弹;
}
//清理子弹
void Bullet::Clear_Bullet()
{
	Sleep(30);
	Map::WriteChar(pos.X,pos.Y,"  ");
	Map::dynamic[pos.X][pos.Y] = 空地;
}
//清理坦克(死亡)
void Bullet::Clear_Tank(COORD pos)
{
	for (int i = 0; i < 3; i++)
	{
		Map::WriteChar(pos.X - 1 + i, pos.Y - 1, "  ");
		Map::WriteChar(pos.X - 1 + i, pos.Y , "  ");
		Map::WriteChar(pos.X - 1 + i, pos.Y + 1, "  ");

		Map::dynamic[pos.X - 1 + i][pos.Y - 1] = 空地;
		Map::dynamic[pos.X - 1 + i][pos.Y] = 空地;
		Map::dynamic[pos.X - 1 + i][pos.Y + 1] = 空地;
	}
}
//坦克得分
void Bullet::Show_Score(int n1,int n2)
{
	if (n1 == 0 && n1 ==0)
	{
		if (team == 1)
		{
			Game::user1->score += 100;
			Map::WriteInt(7, 52, Game::user1->score);
		}
		if (team == 2)
		{
			Game::user2->score += 100;
			Map::WriteInt(10, 52, Game::user2->score);
		}
	}
	if(n1 != 0||n2 !=0)
	{
		system("cls");
		if (Game::play == 1)
		{		
			Map::WriteChar(20, 22, "1P 总得分:");
			Map::WriteInt(20, 28, n1);
			system("pause");
		}
		if (Game::play==2)
		{
			Map::WriteChar(20,22,"1P 总得分:");
			Map::WriteChar(22, 22, "2P 总得分:");
			Map::WriteInt(20, 28, n1);
			Map::WriteInt(22, 28,n2);
			system("pause");
		}
	}
}
//剩余坦克复活次数
void Bullet::Show_Revive()
{
	if (Game::play == 1)
	{
		Map::WriteInt(8, 52, Game::Revive_User1);
	}
	else if (Game::play == 2)
	{
		Map::WriteInt(8, 52, Game::Revive_User1);
		Map::WriteInt(11, 52, Game::Revive_User2);
	}
}
//坦克死亡
bool Bullet::Over_Tank(COORD pos)
{	
	//判断子弹碰到的坦克是AI1,AI2,AI3,user1,user2
	for (int i = 0; i < 3; i++)
	{
		//判断克能AI剩余数为0,对象是否被销毁
		if (Game::AI1 != nullptr)
		{
			if (//如果是AI1
				pos.X == Game::AI1->pos.X - 1 + i && pos.Y == Game::AI1->pos.Y - 1 ||
				pos.X == Game::AI1->pos.X - 1 + i && pos.Y == Game::AI1->pos.Y ||
				pos.X == Game::AI1->pos.X - 1 + i && pos.Y == Game::AI1->pos.Y + 1
				)
			{		//判断击中AI1的子弹是不是同一个阵营
				if (team == Game::AI1->team)
				{//如果是,则直接返回
					return false;
				}
				else
				{//如果不是就在屏幕上擦除
					Clear_Tank({ Game::AI1->pos.X, Game::AI1->pos.Y });

					//让AI1回到起始位置
					if (Game::AI_Tank_Num > 0)
					{
						Show_Score();
						Game::AI1->mode = rand() % 4 + 2;
						Game::AI1->pos = { 2,2 };
						Game::AI_Tank_Num--;
						Map::WriteChar(5, 51, "    ");
						Map::WriteInt(5, 52, Game::AI_Tank_Num);
					}
					else
					{
						Show_Score();
						delete Game::AI1;
						Game::AI1 = nullptr;
					}
				}
			}
		}
		//判断克能AI剩余数为0,对象是否被销毁
		if (Game::AI2 != nullptr)
		{
			if (
				pos.X == Game::AI2->pos.X - 1 + i && pos.Y == Game::AI2->pos.Y - 1 ||
				pos.X == Game::AI2->pos.X - 1 + i && pos.Y == Game::AI2->pos.Y ||
				pos.X == Game::AI2->pos.X - 1 + i && pos.Y == Game::AI2->pos.Y + 1
				)
			{
				if (team == Game::AI2->team)
				{
					return false;
				}
				else
				{
					Clear_Tank({ Game::AI2->pos.X, Game::AI2->pos.Y });

					if (Game::AI_Tank_Num > 0)
					{
						Show_Score();
						Game::AI2->mode = rand() % 4 + 2;
						Game::AI2->pos.X = 2;
						Game::AI2->pos.Y = 20;
						Game::AI_Tank_Num--;
						Map::WriteChar(5, 52, "    ");
						Map::WriteInt(5, 52, Game::AI_Tank_Num);
					}
					else
					{
						Show_Score();
						delete Game::AI2;
						Game::AI2 = nullptr;
					}
				}
			}
		}
		//判断克能AI剩余数为0,对象是否被销毁
		if (Game::AI3 != nullptr)
		{
			if (
				pos.X == Game::AI3->pos.X - 1 + i && pos.Y == Game::AI3->pos.Y - 1 ||
				pos.X == Game::AI3->pos.X - 1 + i && pos.Y == Game::AI3->pos.Y ||
				pos.X == Game::AI3->pos.X - 1 + i && pos.Y == Game::AI3->pos.Y + 1
				)
			{
				if (team == Game::AI3->team)
				{
					return false;
				}
				else
				{
					Clear_Tank({ Game::AI3->pos.X, Game::AI3->pos.Y });

					if (Game::AI_Tank_Num > 0)
					{
						Show_Score();
						Game::AI2->mode = rand() % 4 + 2;
						Game::AI3->pos.X = 2;
						Game::AI3->pos.Y = 38;
						Game::AI_Tank_Num--;
						Map::WriteChar(5, 52, "         ");
						Map::WriteInt(50, 52, Game::AI_Tank_Num);
					}
					else
					{
						Show_Score();
						delete Game::AI3;
						Game::AI3 = nullptr;
					}
				}
			}
		}
		if (Game::user1 != nullptr)
		{
			if (//如果是user1
				pos.X == Game::user1->pos.X - 1 + i && pos.Y == Game::user1->pos.Y - 1 ||
				pos.X == Game::user1->pos.X - 1 + i && pos.Y == Game::user1->pos.Y ||
				pos.X == Game::user1->pos.X - 1 + i && pos.Y == Game::user1->pos.Y + 1
				)
			{		//判断击中AI1的子弹是不是同一个阵营
				if (team == Game::user1->team)
				{//如果是,则直接返回
					return false;
				}
				else
				{//如果是就在屏幕上擦除
					Clear_Tank({ Game::user1->pos.X, Game::user1->pos.Y });
					if (Game::Revive_User1 == 0)
					{
						//Show_Score(Game::user1->score);
						delete Game::user1;
						Game::user1 = nullptr;
					}
					else
					{
						Show_Revive();
						//玩家1复活次数减1
						Game::Revive_User1--;
						Show_Revive();
						//让user1回到起始位置
						Game::user1->pos = { 38,14 };
						for (int i = 0; i < 3; i++)
						{
							Map::Colors(紫色);
							Map::WriteChar(37 + i, 13, Map::tank_user1[i]);
						}
					}

				}

		}
}
		if (Game::play == 2)
		{
			if (Game::user2 != nullptr)
			{
				if (//如果是user2
					pos.X == Game::user2->pos.X - 1 + i && pos.Y == Game::user2->pos.Y - 1 ||
					pos.X == Game::user2->pos.X - 1 + i && pos.Y == Game::user2->pos.Y ||
					pos.X == Game::user2->pos.X - 1 + i && pos.Y == Game::user2->pos.Y + 1
					)
				{		//判断击中user2的子弹是不是同一个阵营
					//由于可能出现玩家死亡,所以不能使用空指针,直接使用值1
					if (team == Game::user2->team || team==1)
					{//如果是,则直接返回
						return false;
					}
					else
					{
						//如果是就在屏幕上擦除
						Clear_Tank({ Game::user2->pos.X, Game::user2->pos.Y });
						if (Game::Revive_User2 == 0)
						{
							delete Game::user2;
							Game::user2 = nullptr;
						}
						else
						{
							//玩家2复活次数减1
							Game::Revive_User2--;
							Show_Revive();
							//让user2回到起始位置
							Game::user2->pos = { 38,26 };
							for (int i = 0; i < 3; i++)
							{
								Map::Colors(紫色);
								Map::WriteChar(37 + i, 25, Map::tank_user2[i]);
							}
						}
					}
				}
			}			
		}
	}
	
}
//检测输赢
void Bullet::vin(bool Home)
{
	if (Game::AI1 == nullptr && Game::AI2 == nullptr && Game::AI3 == nullptr)
	{
		Map::Clear_Map();
		//说明全部通关
		if (Map::Level == 8)
		{
			Map::WriteChar(20, 15, "恭喜,全部通关\n");
			Sleep(3000);
		}
		else
		{
			Map::WriteChar(20, 15, "玩家胜利,即将进入下一关卡\n");
			Map::dynamic[41][41] = { 0 };
			Game::Level_Loc = true;
			if (Game::play == 1)
			{
				Clear_Tank({ Game::user1->pos.X, Game::user1->pos.Y });
			}
			else
			{
				Clear_Tank({ Game::user1->pos.X, Game::user1->pos.Y });
				Clear_Tank({ Game::user2->pos.X, Game::user2->pos.Y });
			}
			Sleep(1500);
		}
		
	}
	if (Game::play == 2)
	{			//如果都等于空,说明玩家死亡,游戏结束		
		if (Game::user1 == nullptr && Game::user2 == nullptr|| Home==false)
		{
			//所有数据清空,并返回主菜单
			//需要重新进入欢迎界面标记
			Game::Over = true;
			//如果有AI没死,我们就让他死掉重新初始化
			if (Game::AI1 != nullptr)
			{
				delete Game::AI1;
				Game::AI1 = nullptr;
			}
			if (Game::AI2 != nullptr)
			{
				delete Game::AI2;
				Game::AI2 = nullptr;
			}
			if (Game::AI3 != nullptr)
			{
				delete Game::AI3;
				Game::AI3 = nullptr;
			}
			//把动态地图清空
			for (int x = 0; x < 41; x++)
			{
				for (int i = 0; i < 41; i++)
				{
					Map::dynamic[x][i] = 0;
				}
			}
		}
	}
	else if (Game::play == 1)
	{
		if (Game::user1 == nullptr || Home == false)
		{
			//所有数据清空,并返回主菜单
			Game::Over = true;
			if (Game::AI1 != nullptr)
			{
				delete Game::AI1;
				Game::AI1 = nullptr;
			}
			if (Game::AI2 != nullptr)
			{
				delete Game::AI2;
				Game::AI2 = nullptr;
			}
			if (Game::AI3 != nullptr)
			{
				delete Game::AI3;
				Game::AI3 = nullptr;
			}
			for (int x = 0; x < 41; x++)
			{
				for (int i = 0; i < 41; i++)
				{
					Map::dynamic[x][i] = 0;
				}
			}
		}
	}
}

地图类(略长)

#include "Map.h"
#include "Game.h"
int Map::static_Map[HIGHT][HIGHT] = {};
int Map::dynamic[HIGHT][WIDTH] = {};
char Map::Type;
//关卡地图初始化
int Map::Level = 1;
//用于副屏幕模型显示
const char* Map::tank_user1[3] =
{
     { "█┃ █"},
     { "█●█"},
     { "█┻ █"}
};
const char* Map::tank_user2[3]{
    {"◢┃ ◣" },
    {"┣ ●┫"},
    {"◥━ ◤" }
};
void Map::Init_Map()
{
    int i, j;
    int Map[9][41][41] =
    {
         {//钢墙白色■值为6,,土墙黄色▓值为2   ,土墙红▓值为1,海蓝色~值为5 ,普通白(老家)值为9
    {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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}
    },
    {//钢墙白色■值为6,,土墙黄色▓值为2   ,土墙红▓值为1,海蓝色~值为5 ,普通白(老家)值为9
    {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,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 < HIGHT; i++)
    {
        for (j = 0; j < WIDTH; j++)
        {
            static_Map[i][j] = Map[Level][i][j];


            //初始化边框
            if (static_Map[i][j] == 边框)
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN
                    | FOREGROUND_RED | FOREGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE);
                WriteChar(i, j, "■");
            }
            Colors(绿色);
            if (static_Map[i][j] == 黄土墙)//被击中变成红土墙
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_RED | BACKGROUND_GREEN | BACKGROUND_RED);
                WriteChar(i, j, "▓");
            }
            if (static_Map[i][j] == 红土墙)
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | BACKGROUND_GREEN | BACKGROUND_RED);
                WriteChar(i, j, "▓");
            }
            if (static_Map[i][j] == 水流)
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | BACKGROUND_BLUE | FOREGROUND_BLUE | FOREGROUND_GREEN);
                WriteChar(i, j, "~");
            }
            if (static_Map[i][j] == 钢墙)
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN
                    | FOREGROUND_RED | FOREGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE);
                WriteChar(i, j, "■");
            }
            if (static_Map[i][j] == 老家)
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN);
                WriteChar(37,19,"◣★◢");
                WriteChar(38, 19, "███");
                WriteChar(39, 19, "◢█◣");

            }
            Colors(黑色);
        }
    }
}
//在屏幕输出字符
void Map::WriteChar(short x, short y, const char* chr)
{
	//获取屏幕输出句柄
	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	//获取输出坐标
	SetConsoleCursorPosition(hOut, { y * 2  , x } );
	
	//输出相应的字符
	printf(chr);
}
//在屏幕输出变量
void Map::WriteInt(short x, short y, int i)
{
    //获取屏幕输出句柄
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    //获取输出坐标
    SetConsoleCursorPosition(hOut, { y * 2  , x });

    //输出相应的字符
    printf("%d",i);
}
//颜色选择函数
void Map::Colors(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 Map::Init_Info()
{
    Colors(白色);
    //关卡
    WriteChar(2, 46, " ◣");
    WriteChar(3,44,"关卡 |");
    if(Level !=0)
    WriteInt(3,50,Level);
    else{WriteChar(3, 50, "自定义地图 "); }
    WriteChar(5, 44, "剩余敌方坦克: ");  
    WriteInt(5,52,Game::AI_Tank_Num);
    if (Game::play == 1)
    {
        WriteChar(7,44,"1P PLAY 得分:  0");
        WriteChar(8,44,"生命数: ");
        WriteInt(8, 52, Game::Revive_User1);
        WriteChar(26, 44, "模式:单人模式");
        WriteChar(28, 44, "1P PLAY");
        WriteChar(30, 44, "游戏键位");
        WriteChar(33, 46, "W");
        WriteChar(34, 44, "A   S   D        J");
    }
    else
    {
        WriteChar(7, 44, "1P PLAY 得分:  0");
        WriteChar(10, 44, "2P PLAY 得分:  0");
        WriteChar(8, 44, "生命数:");
        WriteInt(8, 52, Game::Revive_User1);
        WriteChar(11, 44, "生命数:");
        WriteInt(11, 52, Game::Revive_User2);
        WriteChar(25, 44, "游戏键位");
        WriteChar(23, 44, "模式:双人模式");
        WriteChar(27, 44, "1P PLAY");
        WriteChar(30, 46, "W");
        WriteChar(31, 44, "A   S   D       J");
        WriteChar(33, 44, "2P PLAY");
        WriteChar(36, 45, " ↑");
        WriteChar(37, 43, "←   ↓   →    Insert");
    }
    for (int i = 0; i < 3; i++)
    {
        Colors(紫色);
        if (Game::play == 1)
            WriteChar(28 + i, 50, tank_user1[i]);
        else if (Game::play == 2)
        {
            WriteChar( 27+ i, 50, tank_user1[i]);
            WriteChar(33 + i, 50, tank_user2[i]);
        }
    }
    WriteChar(17, 44, "正在游戏中。。。");
    WriteChar(19, 44, "SPACE空格暂停");
}
//选择坦克模型与颜色
void Map::print_Tank_Mode()
{
    for (int i = 0; i < 3; i++)
    {
        
        Colors(紫色);
        if (Game::play == 1)
            WriteChar(37 + i, 13, tank_user1[i]);
        else if (Game::play == 2)
        {
            WriteChar(37 + i, 13, tank_user1[i]);
            WriteChar(37 + i, 25, tank_user2[i]);
        }
    }
}
//自己写一个清理主地图函数
void Map::Clear_Map()
{
    for (int x=1;x<41;x++)
    {
        for (int i = 0; i < 41; i++)
        {
            WriteChar(x,i,"  ");
        }
    }
    
}
//打印副屏幕框架
void Map::fu_map()
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN
        | FOREGROUND_RED | FOREGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE);
    
    WriteChar(0,42,"■■■■■■■■■■■■■");
    WriteChar(13, 42, "■■■■■■■■■■■■■");
    WriteChar(21, 42, "■■■■■■■■■■■■■");
    WriteChar(40, 42, "■■■■■■■■■■■■■");
    for (int x=0;x<41;x++)
    {
        WriteChar( x,41, "■");
        WriteChar( x,55, "■");
    }
}
//自定义地图信息显示
void Map::Show_Diy_Info()
{
    Colors(白色);
    WriteChar(2, 47, "红土墙");
    WriteChar(8, 47, "黄土墙");
    WriteChar(14, 47, "钢墙");
    WriteChar(20, 47, "水流");
    WriteChar(26, 46, "空地/删除");
    WriteChar(34, 44, "保存地图并开始游戏");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | BACKGROUND_GREEN | BACKGROUND_RED);
    WriteChar(3,44,"▓▓▓▓▓▓▓▓▓");
    WriteChar(4, 44, "▓▓▓▓▓▓▓▓▓");
    WriteChar(5, 44, "▓▓▓▓▓▓▓▓▓");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_RED | BACKGROUND_GREEN | BACKGROUND_RED);
    WriteChar(9, 44, "▓▓▓▓▓▓▓▓▓");
    WriteChar(10, 44, "▓▓▓▓▓▓▓▓▓");
    WriteChar(11, 44, "▓▓▓▓▓▓▓▓▓");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN
        | FOREGROUND_RED | FOREGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE);
    WriteChar(15, 44, "■■■■■■■■■");
    WriteChar(16, 44, "■■■■■■■■■");
    WriteChar(17, 44, "■■■■■■■■■");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | BACKGROUND_BLUE | FOREGROUND_BLUE | FOREGROUND_GREEN);
    WriteChar(21, 44, "~~~~~~~~~");
    WriteChar(22, 44, "~~~~~~~~~");
    WriteChar(23, 44, "~~~~~~~~~");

    Colors(绿色);
    WriteChar(27, 44, "------------------");
    WriteChar(28, 44, "|                |");
    WriteChar(29, 44, "|                |");
    WriteChar(30, 44, "------------------");
    
    WriteChar(39, 44, "注意:‘右击模块选择’");
    WriteChar(40, 44, "          ‘左击释放’");
    Colors(白色);
    WriteChar(35, 44, "■■■■■■■■■");
    WriteChar(36, 44, "■■■■■■■■■");
    WriteChar(37, 44, "■■■■■■■■■");
}

游戏控制类Game(巨长)

#include "Game.h"
std::vector<Bullet*>Game::bull;

Tank* Game::user1;
Tank* Game::user2;
Tank* Game::AI1;
Tank* Game::AI2;
Tank* Game::AI3;
//用于区别单人模式和双人模式做一个记号,值为1代表单人,2为双人
int Game::play;
//是否进入下一关卡
bool Game::Level_Loc=false;
//剩余敌方坦克数量,总值为20,因首次初始化敌方坦克数量3
int  Game::AI_Tank_Num=0;
//玩家剩余复活次数2次
int Game::Revive_User1=2;
int Game::Revive_User2=2;
//游戏结束标记
bool Game::Over=false;
//结束鼠标接收标记
bool Game::end = true;
//检测输入,AI随机
void Game::Input()
{
/*---------------------------------------------------------------------*/
	100分之30的几率改变,不能太频繁,否则AI跟疯了是的,也会造成负荷
	
		if (AI1 != nullptr)
		{
			//4/10几率改变
			AI1->dir = (DIR)(rand() % 7);
			switch (AI1->dir)
			{
			case 0:AI1->Move_Tank(); break;
			case 1:case 4:case 5:case 6:AI1->Move_Tank(); break;
			case 2:AI1->Move_Tank(); break;
			case 3:AI1->Move_Tank(); break;
			default:
				break;
			}
			//地方坦克开火有20分之1的几率开炮,测试了几次开炮不能过于频繁
			if (AI1->frie = rand() % 25 == 1)
			{
				AI1->Play_Bullet(bull);
			}
		}	

		if (AI2 != nullptr)
		{
			AI2->dir = (DIR)(rand() % 7);
			switch (AI2->dir)
			{
			case 0:AI2->Move_Tank(); break;
			case 1:case 4:case 5:case 6:AI2->Move_Tank(); break;//增大向下走的概率
			case 2:AI2->Move_Tank(); break;
			case 3:AI2->Move_Tank(); break;
			default:
				break;
			}
			if (AI2->frie = rand() % 25 == 1)
			{
				AI2->Play_Bullet(bull);
			}
		}
		
		if (AI3 != nullptr)
		{
			AI3->dir = (DIR)(rand() % 7);
			switch (AI3->dir)
			{
			case 0:AI3->Move_Tank(); break;
			case 1:case 4:case 5:case 6:AI3->Move_Tank(); break;
			case 2:AI3->Move_Tank(); break;
			case 3:AI3->Move_Tank(); break;
			default:
				break;
			}
			if (AI3->frie = rand() % 25 == 1)
			{
				AI3->Play_Bullet(bull);
			}
		}	

	if (play == 1)
	{
		if (user1 != nullptr)
		{
			if (GetAsyncKeyState('W') & 0x8001)
				user1->Move_Tank();
			if (GetAsyncKeyState('S') & 0x8001)
				user1->Move_Tank();
			if (GetAsyncKeyState('A') & 0x8001)
				user1->Move_Tank();
			if (GetAsyncKeyState('D') & 0x8001)
				user1->Move_Tank();
			if (GetAsyncKeyState('J') & 0x8001)
				user1->Play_Bullet(bull);
			if (GetAsyncKeyState(VK_SPACE) & 0x8000)
				Game_Stop();

		}
	}

	else if(play==2)
	{
		if (user1 != nullptr)
		{ 
			if (GetAsyncKeyState('W') & 0x8001)
				user1->Move_Tank();
			if (GetAsyncKeyState('S') & 0x8001)
				user1->Move_Tank();
			if (GetAsyncKeyState('A') & 0x8001)
				user1->Move_Tank();
			if (GetAsyncKeyState('D') & 0x8001)
				user1->Move_Tank();
			if (GetAsyncKeyState('J') & 0x8001)
				user1->Play_Bullet(bull);
			if (GetAsyncKeyState(VK_SPACE) & 0x8001)
				Game_Stop();
		}
			
		if (user2 != nullptr)
		{
			if (GetAsyncKeyState(VK_UP) & 0x8001)
				user2->Move_Tank();
			if (GetAsyncKeyState(VK_DOWN) & 0x8001)
				user2->Move_Tank();
			if (GetAsyncKeyState(VK_LEFT) & 0x8001)
				user2->Move_Tank();
			if (GetAsyncKeyState(VK_RIGHT) & 0x8001)
				user2->Move_Tank();
			if (GetAsyncKeyState(VK_INSERT) & 0x8001)
				user2->Play_Bullet(bull);
		}			
	}
}
//调用子弹移动,且存储子弹和删除
void Game::Move_Bullet()
{
	for (unsigned int i = 0; i < bull.size(); i++)
	{
		if (bull[i]->alive == true)
		{
			bull[i]->Move();		
		}
		else
		{
			bull.erase(bull.begin()+i);
			i--;
		}
	}
}
//菜单输出控制
void Game::Input_Menu()
{
	for (int i = 0; i < 6; i++)
	{
		menu.Coord[i].Y = 24;
	}
	menu.Coord[0].X = 23;
	menu.Coord[1].X = 25;
	menu.Coord[2].X=  27;
	menu.Coord[3].X = 29;
	menu.Coord[4].X = 31;
	menu.Coord[5].X = 33;
	menu.Show_Menu();
	for (int i = 0; i < 6; i++)
	{
		Map::WriteChar(menu.Coord[i].X, menu.Coord[i].Y, menu.mu[i]);
	}
	Map::Colors(绿色);
	Map::WriteChar( menu.Coord[1].X,menu.Coord[1].Y, menu.mu[1]);
	int Select = 1;
	while (1)
	{
		if (GetAsyncKeyState('W') & 0x8001)
		{
			Map::Colors(白色);
			Map::WriteChar( menu.Coord[Select].X,menu.Coord[Select].Y, menu.mu[Select]);
			if (Select == 1)
				Select = 5;
			else
			{
				Select--;播放发子弹音乐D:\Project\TEST_ONE\Music
				PlaySoundA("D:\\Project\\TEST_ONE\\Music\\hit.wav", NULL, SND_ASYNC | SND_NODEFAULT);
			}	
			Map::Colors(绿色);
			Map::WriteChar(menu.Coord[Select].X,  menu.Coord[Select].Y,menu.mu[Select]);
		}
		else if (GetAsyncKeyState('S') & 0x8001)
		{
			Map::Colors(白色);
			Map::WriteChar(menu.Coord[Select].X, menu.Coord[Select].Y, menu.mu[Select]);
			if (Select == 5)
				Select = 1;
			else
			{
				Select++;播放发子弹音乐D:\Project\TEST_ONE\Music
				PlaySoundA("D:\\Project\\TEST_ONE\\Music\\hit.wav", NULL, SND_ASYNC | SND_NODEFAULT);
			}
			Map::Colors(绿色);
			Map::WriteChar( menu.Coord[Select].X,menu.Coord[Select].Y, menu.mu[Select]);
		}
		else if (GetAsyncKeyState(0xD) & 0x8001)//回车键
		{
			
			switch (Select)
			{
			case 1:start_user1(); break;
			case 2:start_user2(); break;
			case 3:Load_Game(); break;
			case 4:Diy_Map(); break;
			case 5:exit(0); break;
			default:
				break;
			}
		}
		Sleep(200);
	}
}
//隐藏光标
void Game::HIdeCur()
{
	CONSOLE_CURSOR_INFO cci;
	cci.bVisible = false;
	cci.dwSize = 1;
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cci);
}
//下一关初始化
void Game::Pass()
{
	Sleep(1000);
	//清理地图
	Map::Clear_Map();
	播放发子弹音乐D:\Project\TEST_ONE\Music
	PlaySoundA("D:\\Project\\TEST_ONE\\Music\\background.wav", NULL, SND_ASYNC | SND_NODEFAULT);
	//关闭进入下一关标记
	Level_Loc = false;
	//地图升级
	Map::Level ++;
	//在副屏幕打印关卡等级
	Map::WriteInt(3, 50, Map::Level);
	//初始化剩余坦克数量
	AI_Tank_Num = 17;
	//显示剩余坦克数量
	Map::WriteInt(5, 52, AI_Tank_Num);
	//创建敌方坦克
	AI1 = new Tank({ 2,2 },, rand() % 4 + 2, 3);
	AI2 = new Tank({ 2,20 },, rand() % 4 + 2, 3);
	AI3 = new Tank({ 2,38 },, rand() % 4 + 2, 3);
	//如果当前为单人模式
	if(play==1)
	user1->pos = { 38,14 };
	else//否则双人模式
	{
		user1->pos = { 38,14 };
		user2->pos = { 38,26 };
	}
	Map::print_Tank_Mode();//打印坦克
	Map::Init_Map();//初始化地图
}

//游戏暂停
void Game::Game_Stop()
{
	while (true)
	{
//打印位置11-23之间,我们还需要一个框架所以最少前后空出1
		Map::Colors(白色);
		Map::WriteChar(16,44,"游戏暂停中。。。");
		Map::WriteChar(17, 44, "输入BACK继续游戏");
		Map::WriteChar(18, 44, "输入Esc返回菜单");
		Map::WriteChar(19, 44, "回车保存并退出");
		//Map::WriteChar(20, 44, "SPACE关闭游戏");
		if (GetAsyncKeyState(VK_BACK) & 0x8001)//空格VK_BACK  
		{
			Map::WriteChar(16,44,"正在游戏中。。。");
			Map::WriteChar(17, 44, "                  ");
			Map::WriteChar(18, 44, "                  ");
			Map::WriteChar(19, 44, "SPACE空格暂停");
		//	Map::WriteChar(20, 44, "                  ");
			break;
		}
		else if(GetAsyncKeyState(VK_RETURN) & 0x8001)//VK_SPACE
		{
			SaveInfo();
			Init_Null();
			Sleep(1000);
			main();
		}
		else if(GetAsyncKeyState(0x1B) & 0x8001)//esc键
		{
			Init_Null();
			main();
		}
		//else if (GetAsyncKeyState(VK_SPACE) & 0x8001)//空格键
		//{
		//	exit(0);
		//	Sleep(200);
		//}
	}
}
//当游戏结束,所有值清空
void Game::Init_Null()
{
	if (Game::play == 2)
	{		
		if (Game::user1 != nullptr)
		{
			delete Game::user1;
			Game::user1 = nullptr;
		}
		if (Game::user2 != nullptr)
		{
			delete Game::user2;
			Game::user2 = nullptr;
		}
		if (Game::AI3 != nullptr)
		{
			delete Game::AI3;
			Game::AI3 = nullptr;
		}
		if (Game::AI2 != nullptr)
		{
			delete Game::AI2;
			Game::AI2 = nullptr;
		}
		if (Game::AI3 != nullptr)
		{
			delete Game::AI3;
			Game::AI3 = nullptr;
		}
		//把动态地图清空
		for (int x = 0; x < 41; x++)
		{
			for (int i = 0; i < 41; i++)
			{
				Map::dynamic[x][i] = 0;
			}
		}
		//关卡置0
		Map::Level = 1;
		//敌方坦克复活
		AI_Tank_Num = 17;
		Revive_User1 = 2;
		Revive_User2 = 2;
	}
	else if (Game::play == 1)
	{	
		if (Game::user1 != nullptr)
		{
			delete Game::user1;
			Game::user1 = nullptr;
		}
		if (Game::AI3 != nullptr)
		{
			delete Game::AI3;
			Game::AI3 = nullptr;
		}
		if (Game::AI2 != nullptr)
		{
			delete Game::AI2;
			Game::AI2 = nullptr;
		}
		if (Game::AI3 != nullptr)
		{
			delete Game::AI3;
			Game::AI3 = nullptr;
		}
		for (int x = 0; x < 41; x++)
		{
			for (int i = 0; i < 41; i++)
			{
				Map::dynamic[x][i] = 0;
			}
		}
		//关卡置0
		Map::Level = 1;
		//敌方坦克复活
		AI_Tank_Num = 17;
		Revive_User1 = 2;
	}
}
//鼠标事件
void Game::Mouse(MOUSE_EVENT_RECORD event, std::vector<COORD>& pos)
{
	//鼠标事件类型
	switch (event.dwEventFlags)
	{
	case 0:
		//如果按键的类型为左键被按下
		if (event.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED)
		{
			COORD temp = {event.dwMousePosition.X/2,event.dwMousePosition.Y };
			pos.push_back(temp);
			Map::WriteChar( temp.Y, temp.X, "■");
		}
		break;
	case DOUBLE_CLICK:
	default:
		break;
	}
}
//自定义地图,接受鼠标事件
void Game::DIY_Map(//std::vector<COORD>& pos
)
{
	system("cls");
	//进入自定义地图的模式
	//打印地图边框及说明
	Map::Level = 0;
	Map::Init_Map();
	Map::Show_Diy_Info();
	int type_mode=0;
	//接收用户自定义事件
	INPUT_RECORD in = {};//定义事件结构体
	DWORD read = 0;//存储读取记录
	COORD pos = {};//存储鼠标位置
	MOUSE_EVENT_RECORD mer;//鼠标事件
	HANDLE hOut = GetStdHandle(STD_INPUT_HANDLE);
	SetConsoleMode(hOut,ENABLE_MOUSE_INPUT|ENABLE_WINDOW_INPUT);
	while (end)
	{
		//等待事件
		ReadConsoleInput(hOut, &in, 1, &read);		
			//如果是鼠标事件
		if (in.EventType == MOUSE_EVENT)
		{
			//Mouse(in.Event.MouseEvent,pos);
			mer = in.Event.MouseEvent;
			//鼠标左单击
			if (mer.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED)
			{
				if (mer.dwMousePosition.X >= 2 && mer.dwMousePosition.X <= 78 && mer.dwMousePosition.Y >= 1 && mer.dwMousePosition.Y <= 39)
				{
					switch (type_mode)
					{
					case 红土墙:
						SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | BACKGROUND_GREEN | BACKGROUND_RED);
						Map::WriteChar(mer.dwMousePosition.Y, mer.dwMousePosition.X / 2, "▓"); break;
					case 黄土墙:
						SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_RED | BACKGROUND_GREEN | BACKGROUND_RED);
						Map::WriteChar(mer.dwMousePosition.Y, mer.dwMousePosition.X / 2, "▓"); break;
					case 钢墙:
						SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN
							| FOREGROUND_RED | FOREGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE);
						Map::WriteChar(mer.dwMousePosition.Y, mer.dwMousePosition.X / 2, "■"); break;
					case 空地:
						Map::Colors(白色);
						Map::WriteChar(mer.dwMousePosition.Y, mer.dwMousePosition.X / 2, "  "); break;
					case 水流:
						SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | BACKGROUND_BLUE | FOREGROUND_BLUE | FOREGROUND_GREEN);
						Map::WriteChar(mer.dwMousePosition.Y, mer.dwMousePosition.X / 2, "~"); break;
					default:
						break;
					}
					Map::static_Map[mer.dwMousePosition.Y][mer.dwMousePosition.X / 2] = type_mode;
					for (int x = 0; x < 41; x++)
					{
						for (int i = 0; i < 41; i++)
						{
							tool::Init_Map[x][i] = Map::static_Map[x][i];
						}
					}
				}
			}
			//鼠标右击
			else if (mer.dwButtonState == RIGHTMOST_BUTTON_PRESSED)
			{
				if (mer.dwMousePosition.X >= 44*2&& mer.dwMousePosition.X <= 51 * 2, mer.dwMousePosition.Y >= 3&& mer.dwMousePosition.Y <= 5)
				{
					
					type_mode = 红土墙;
				}
				else if( mer.dwMousePosition.X >=44*2&& mer.dwMousePosition.X <= 51 * 2, mer.dwMousePosition.Y >=9&& mer.dwMousePosition.Y <= 11)
				{
					type_mode = 黄土墙;
				}
				else if(mer.dwMousePosition.X >= 44*2&& mer.dwMousePosition.X <= 51 * 2, mer.dwMousePosition.Y >= 15&& mer.dwMousePosition.Y <= 17)
				{
					type_mode = 钢墙;
				}
				else if (mer.dwMousePosition.X >= 44*2&& mer.dwMousePosition.X == 51 * 2, mer.dwMousePosition.Y >= 21&& mer.dwMousePosition.Y <= 23)
				{
					type_mode = 水流;
				}
				else if (mer.dwMousePosition.X >= 44 * 2 && mer.dwMousePosition.X == 51 * 2, mer.dwMousePosition.Y >= 27 && mer.dwMousePosition.Y <= 30)
				{
					type_mode = 空地;
				}
				else if (mer.dwMousePosition.X >= 44 * 2 && mer.dwMousePosition.X == 51 * 2, mer.dwMousePosition.Y >= 35&& mer.dwMousePosition.Y <= 37)
				{
					//由于用户需要选择单双人模式
					return;
				}
				//printf("%d %d\n", mer.dwMousePosition.X, mer.dwMousePosition.Y);
			}
		}
	}
	CloseHandle(hOut);
}

有什么写的不好的地方,请大家键盘留情。

  • 19
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答1: C/C++控制台串口通讯编程是一种通过使用C/C++语言来实现与串口设备进行通信的编程技术。 在控制台串口通讯编程中,我们可以使用C/C++语言提供的相关库函数来访问和操作串口设备。其中,包括了打开串口、设置串口属性、读写串口数据等功能。 首先,我们需要使用C/C++的库函数来打开串口设备。通过指定串口的名称和访问权限,我们可以从操作系统中获得对串口设备的访问句柄。然后,我们可以使用该句柄来设置串口的属性,如波特率、数据位数、停止位等。设置好属性后,我们就可以通过该串口进行数据的收发。 在串口通讯中,数据的读写是通过调用读写函数来实现的。通常,我们可以使用读函数来从串口中读取数据,并将其存储到缓冲区中。而写函数则用于将数据从缓冲区中写入到串口中。通过读写函数的调用,我们可以实现与外部设备之间的数据交互。 此外,对于串口通讯编程,还需要注意处理错误和异常情况。在进行串口操作时,可能会出现一些错误,如无法打开串口、读写超时等。为了确保程序的可靠性,我们需要在代码中添加适当的错误处理机制,以便及时发现和处理异常情况。 总而言之,C/C++控制台串口通讯编程是一种实现与串口设备进行通信的编程技术。通过使用相关的库函数,我们可以打开串口、设置属性、读写数据,并处理可能出现的错误情况,以实现与外部设备的数据交互。 ### 回答2: C/C++ 控制台串口通讯编程是一种通过串口与外部设备进行数据通讯的编程技术。在控制台应用程序中,通过使用C/C++ 编程语言来实现与串口通讯的功能。 首先,需要了解操作系统提供的相关串口通讯 API 接口。在Windows系统中,可以使用Windows API函数来访问串口,如CreateFile()、ReadFile() 和 WriteFile() 等函数。在Linux系统中,可以通过打开文件描述符的方式来访问串口设备文件,并使用read() 和 write() 函数进行数据的读写。 其次,需要设置串口的参数,包括波特率、数据位、停止位、校验位等。这些参数需要根据外部设备的通讯规范进行设置,以确保正确的数据传输。 然后,可以通过编写串口数据发送和接收的函数来实现数据的收发。发送数据时,可以使用WriteFile() 或 write() 函数将数据写入串口缓冲区,并等待数据的发送完成。接收数据时,可以使用ReadFile() 或 read() 函数从串口缓冲区中读取数据。 此外,需要注意在编程过程中处理异常情况。例如,当串口无法打开、写入数据超时或读取数据错误时,应设置相应的错误处理机制,例如打印错误信息或重新尝试等。 最后,可以在控制台应用程序中实现用户交互界面,通过命令行参数或菜单选项来控制串口通讯的功能,例如设置参数、发送数据、接收数据等。 总之,C/C++ 控制台串口通讯编程需要理解串口通讯的原理和外部设备的通讯规范,熟悉操作系统提供的串口访问函数,并编写相应的发送和接收函数来实现数据的传输。 ### 回答3: C/C++控制台串口通讯编程是指使用C/C++编程语言,在控制台环境中通过串口与外部设备进行通讯的编程过程。 串口通讯是一种常见的硬件通讯接口,用于计算机与外围设备的数据传输。C/C++是一种常见的程序设计语言,提供了丰富的库函数和语法特性,可以方便地进行串口通讯编程。 在进行C/C++控制台串口通讯编程时,首先需要引入相关的库文件,如Windows.h或者Linux的unistd.h header文件,这些文件包含了一些API函数,用于读取和写入串口数据。然后,通过打开相应的串口端口,设置通讯参数(如波特率、数据位、停止位等),可以使用相关API函数进行数据的发送和接收。 例如,通过使用C/C++的读取或写入文件的API函数来读取或写入串口数据,可以实现串口的数据发送和接收操作。可以通过`CreateFile()`函数来打开串口设备,通过`ReadFile()`和`WriteFile()`函数来读取和写入数据。 在进行C/C++串口通讯编程时,需要注意一些细节,比如在读取数据时需要保证数据的完整性,可以使用缓冲区来存储接收到的数据。另外,还需考虑相关的错误处理和异常情况,以确保程序的可靠性。 总之,C/C++控制台串口通讯编程是一种利用C/C++编程语言,在控制台环境下通过串口与外部设备进行数据传输的编程过程。通过合理使用相关的API函数和语言特性,可以实现串口通讯的功能,满足不同场景对数据传输的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值