这是效果截图:

部分源码:
#include <iostream> #include <time.h> #include <windows.h> #define W 1 //上
#define S 2 //下 #define A 3 //左 #define D 4 //右 #define L 4 // 坦克有4条命 void
HideCursor() { //隐藏光标 CONSOLE_CURSOR_INFO cursor_info = { 1,0 };
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info); } void
GoToxy(int x, int y) { //光标移动,X、Y表示横、纵坐标 COORD coord = { x, y };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); } //全局变量 int
map[50][40];//地图二维数组 int B_num; //子弹编号 int Pos;
//敌方坦克生成位置,-1为左边,0为中间,1为右边,2为我的坦克位置 int Speed = 7; //游戏速度 int Enemy; //还未出现的敌人
const char* Tank_Model[3][4] ={ {"◢┃ ◣", "◢╦ ◣", "◢╦◣", "◢╦◣"}, {"╠ █╣", "╠
█╣", "━█╣", "╠█━"}, {"◥╩ ◤", "◥┃ ◤", "◥╩◤", "◥╩◤"} }; //坦克 class Tank{ public:
int x, y; //中心坐标 int Direction; //方向 int Model; //模型 int Revival; //复活次数 int
Num; //敌方坦克编号 bool Type; //我方坦克此参数为1 bool Exist; //存活为1,不存活为0 }AI_tank[6],
my_tank; //子弹 class Bullet{ public: int x, y; //坐标 int Direction; //方向 bool
Exist; //1为存在,0不存在 bool Type; //0为敌方子弹,1为我方子弹 }bullet[50] ; //基本函数 void
GoToxy(int x, int y); //光标移动 void HideCursor(); //隐藏光标 void Key(); //键盘输入 void
Init(); //初始化 void Pause(); //暂停 void Show(); //打印框架 void Print_Map(); //打印地图
void Cheak_Game(); //检测游戏胜负 void GameOver(); //游戏结束 //坦克 void Creat_AI_T(Tank*
AI_tank); //建立坦克 void Creat_My_T(Tank* my_tank); void Move_AI_T(Tank*
AI_tank);//坦克移动 void Move_My_T(int turn); void Clear_T(int x, int y); //清除坦克
void Print_T(Tank tank); //打印坦克 bool Cheak_T(Tank tank, int direction);
//检测障碍,1阻碍 //子弹 void Creat_AI_B(Tank* tank); //敌方坦克发射子弹 void Creat_My_B(Tank
tank);//我方坦克发射子弹 void Move_B(Bullet bullet[50]); //子弹移动 void Break_B(Bullet*
bullet); //子弹碰撞 void Print_B(int x, int y);//打印子弹 void Clear_B(int x, int y);
//清除子弹 int Cheak_B(int x, int y); //子弹前方情况 void Show() { //打印框架 std::cout << "
▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁"; std::cout <<
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n"; for (int i = 0; i < 48; i++) {
std::cout << "▕ ▏\n"; } std::cout << " ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔";
std::cout << "▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔\n"; } void Print_Map() { //
打印地图 int Map[50][40] = { //map里的值: 0为可通过陆地,1为砖,6为墙,100~105为敌方坦克,200为我的坦克, {
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,4
}, {
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,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 (int i = 0; i < 50; i++) for (int j = 0; j < 40; j++) map[i][j] =
Map[i][j]; for (int i = 0; i < 50; i++) for (int j = 0; j < 40; j++) if
(map[i][j] == 1) { GoToxy(2 * j, i); std::cout << "▓"; } else if (map[i][j] ==
6) { GoToxy(2 * j, i); std::cout << "■"; } GoToxy(38, 46); std::cout << " ◣◢";
GoToxy(38, 47); std::cout << "◣█ ◢"; GoToxy(38, 48); std::cout << "◢█ ◣"; }
void Cheak_Game() { //敌人坦克全部不存活 if (Enemy <= 0 && !AI_tank[0].Exist &&
!AI_tank[1].Exist && !AI_tank[2].Exist && !AI_tank[3].Exist &&
!AI_tank[4].Exist && !AI_tank[5].Exist) GameOver(); if (my_tank.Revival >=
L)//我复活次数用完 GameOver();//游戏结束 } void GameOver() { bool home = 1; while (home) {
GoToxy(37, 21); std::cout << "游戏结束!"; if (GetAsyncKeyState(0xD) & 0x8000) {
//回车键 system("cls"); //清屏 Show(); Init(); //初始化 break; } else if
(GetAsyncKeyState(0x1B) & 0x8000) //Esc键退出 exit(0); } } void Creat_My_T(Tank*
my_tank) {//建立我的坦克 my_tank->x = 15; my_tank->y = 47; my_tank->Direction = 1; //
my_tank->Model = 0; my_tank->Exist = 1; my_tank->Type = 1; Print_T(*my_tank);
//打印我的坦克 } void Move_My_T(int turn) {//turn为Key()函数传入的方向值 Clear_T(my_tank.x,
my_tank.y); my_tank.Direction = turn; if (Cheak_T(my_tank, my_tank.Direction))
//我方坦克当前方向上无障碍 switch (turn) { case W: my_tank.y--; break; //上 case S:
my_tank.y++; break; //下 case A: my_tank.x--; break; //左 case D: my_tank.x++;
break; //右 } Print_T(my_tank); } void Print_T(Tank tank) {//打印 for (int i = 0;
i < 3; i++) { GoToxy((tank.x - 1) * 2, tank.y - 1 + i);//在坦克中心坐标的左边,上中下三行打印
std::cout << Tank_Model[i][tank.Direction - 1]; //打印的是地址,地址既字符串 for (int j = 0;
j < 3; j++) if (tank.Type)//若为我的坦克 map[tank.y + j - 1][tank.x + i - 1] = 200;
//在map上敌方值为100~105,我方为200 else map[tank.y + j - 1][tank.x + i - 1] = 100
+tank.Num; //这样可以通过map值读取坦克编号 } } void Creat_AI_T(Tank* AI_tank) { AI_tank->x =
19 + 17 * (Pos); //pos为坦克生成位置,-1为左位置,0为中间,1为右,2为我的坦克位置 AI_tank->y = 2;
AI_tank->Direction = 2; //方向朝下 AI_tank->Revival++; //复活次数+1 AI_tank->Exist =
1;//存在 Pos++; Enemy--; if (Pos == 2) //循环重置(pos只能为-1,0,1) Pos = -1;
Print_T(*AI_tank); return; } void Move_AI_T(Tank* AI_tank) { if
(AI_tank->Exist) { //存在 Clear_T(AI_tank->x, AI_tank->y); if (Cheak_T(*AI_tank,
AI_tank->Direction))//前方无障碍 switch (AI_tank->Direction) { case W: AI_tank->y--;
break; //上 case S: AI_tank->y++; break; //下 case A: AI_tank->x--; break; //左
case D: AI_tank->x++; break; //右 } else {//前方有障碍 for (int i = rand() % 4 + 1; i
<= 4; i++) if (Cheak_T(*AI_tank, i)){ //循环判断,返1可通过 AI_tank->Direction = i;
break; } } Print_T(*AI_tank); //打印敌方坦克 } } bool Cheak_T(Tank tank, int
direction) { //检测坦克前方障碍,返1为可通过 switch (direction) { case W: 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 S: 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 A: 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 D: 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: return
0; } } void Clear_T(int x, int y) { //清除坦克 for (int i = 0; i <= 2; i++) for
(int j = 0; j <= 2; j++) {//将坦克占用的地图清零 map[y + j - 1][x + i - 1] = 0; GoToxy(2
* x + 2 * j - 2, y + i - 1); std::cout << " "; } } //键盘输入 void Key() { //上下左右键
if (GetAsyncKeyState('W') & 0x8000) Move_My_T(W); else if
(GetAsyncKeyState('S') & 0x8000) Move_My_T(S); else if (GetAsyncKeyState('A') &
0x8000) Move_My_T(A); else if (GetAsyncKeyState('D') & 0x8000) Move_My_T(D);
//子弹发射 else if (GetAsyncKeyState('P') & 0x8000) { Creat_My_B(my_tank); } else
if (GetAsyncKeyState(0x1B) & 0x8000)// Esc键退出 exit(0); else if
(GetAsyncKeyState(0x20) & 0x8000)//空格暂停 Pause(); } void Pause() { //暂停 while
(1) { if (GetAsyncKeyState(0xD) & 0x8000) { //回车键继续 break; } else if
(GetAsyncKeyState(0x1B) & 0x8000) //Esc键退出 exit(0); } } void Creat_AI_B(Tank*
tank){ //敌方发射子弹 if (!(rand() % 10)) { //在随后的每个游戏周期中有10分之一的可能发射子弹
Creat_My_B(*tank); } } void Creat_My_B(Tank tank) { switch (tank.Direction) {
case W: bullet[B_num].x = tank.x; bullet[B_num].y = tank.y - 2;
bullet[B_num].Direction = 1;//1表示向上 break; case S: bullet[B_num].x = tank.x;
bullet[B_num].y = tank.y + 2; bullet[B_num].Direction = 2;//2表示向下 break; case
A: bullet[B_num].x = tank.x - 2; bullet[B_num].y = tank.y;
bullet[B_num].Direction = 3;//3表示向左 break; case D: bullet[B_num].x = tank.x +
2; bullet[B_num].y = tank.y; bullet[B_num].Direction = 4;//4表示向右 break; }
bullet[B_num].Exist = 1; //子弹存在 bullet[B_num].Type = tank.Type;
//我方坦克发射的子弹bullet.Type=1 B_num++; if (B_num == 50) //如果子弹编号增长到50号,那么重头开始编号
B_num = 0; //考虑到地图上不可能同时存在50颗子弹,所以数组元素设置50个 } void Move_B(Bullet bullet[50]) {
//子弹移动 for (int i = 0; i < 50; i++) { if (bullet[i].Exist) {//如果子弹存在 if
(map[bullet[i].y][bullet[i].x] == 0) { Clear_B(bullet[i].x,
bullet[i].y);//子弹当前位置无障碍,抹除子弹图形 switch (bullet[i].Direction) {//子弹变到下一个坐标 case
W:(bullet[i].y)--; break; case S:(bullet[i].y)++; break; case
A:(bullet[i].x)--; break; case D:(bullet[i].x)++; break; } } //判断子弹当前位置情况 if
(map[bullet[i].y][bullet[i].x] == 0) //子弹坐标无障碍 Print_B(bullet[i].x,
bullet[i].y);//打印 else Break_B(&bullet[i]); //子弹碰撞 for (int j = 0; j < 50; j++)
//子弹间的碰撞判断,若是我方子弹和敌方子弹碰撞则都删除,若为两敌方子弹则无视 if (bullet[j].Exist && j != i &&
(bullet[i].Type || bullet[j].Type) && bullet[i].x == bullet[j].x && bullet[i].y
== bullet[j].y) { //同样的两颗我方子弹不可能产生碰撞 bullet[j].Exist = 0; bullet[i].Exist = 0;
Clear_B(bullet[j].x, bullet[j].y); break; } } } } void Break_B(Bullet* bullet)
{ int x = bullet->x; int y = bullet->y; //子弹坐标 int i; if (map[y][x] == 1) {
//子弹碰到砖块 if (bullet->Direction == A || bullet->Direction == D) //若子弹是横向的 for (i
= -1; i <= 1; i++) if (map[y + i][x] == 1) { map[y + i][x] = 0; GoToxy(2 * x, y
+ i); std::cout << " "; } if (bullet->Direction == W || bullet->Direction == S)
//子弹是向上或是向下移动的 for (i = -1; i <= 1; i++) if (map[y][x + i] == 1) {
//如果子弹打中砖块两旁为砖块,则删除砖,若不是则忽略 map[y][x + i] = 0; //砖块碎 GoToxy(2 * (x + i), y);
std::cout << " "; } bullet->Exist = 0; //子弹不存在 } else if (map[y][x] == 4 ||
map[y][x] == 6) //子弹碰到边框或者不可摧毁方块 bullet->Exist = 0; else if (bullet->Type ==1
&& map[y][x] >= 100 && map[y][x] <= 105) { //我方子弹碰到了敌方坦克 AI_tank[(int)map[y][x]
% 100].Exist = 0; bullet->Exist = 0; Clear_T(AI_tank[(int)map[y][x] % 100].x,
AI_tank[(int)map[y][x] % 100].y); //清除坦克 } else if (bullet->Type == 0 &&
map[y][x] == 200) { //若敌方子弹击中我的坦克 my_tank.Exist = 0; bullet->Exist = 0;
Clear_T(my_tank.x, my_tank.y); my_tank.Revival++; //我方坦克复活次数加1 } else if
(map[y][x] == 9) { //子弹碰到巢 bullet->Exist = 0; GoToxy(38, 46); std::cout << " ";
GoToxy(38, 47); std::cout << " "; GoToxy(38, 48); std::cout << "◢◣ ";
GameOver(); } } int Cheak_B(int x, int y) {//子弹当前位置情况 if (map[y][x] == 0)
return 1; else return 0; } void Print_B(int x, int y){ GoToxy(2 * x, y);
std::cout << "o"; } void Clear_B(int x, int y){ GoToxy(2 * x, y); if
(Cheak_B(x, y) == 1) {//子弹当前坐标在空地上 std::cout << " "; } } void Init() { //初始化
Enemy = 24; my_tank.Revival = 0; //我的坦克复活次数为0 Pos = 0; B_num = 0; Print_Map();
Creat_My_T(&my_tank); for (int i = 0; i < 50; i++) {//子弹 bullet[i].Exist = 0; }
for (int i = 0; i <= 5; i++) {//敌方坦克 AI_tank[i].Revival = 0; AI_tank[i].Exist =
0; //初始化坦克全是不存活的,用Creat_AI_T()建立不存活的坦克 AI_tank[i].Num = i; AI_tank[i].Type = 0;
} } int main() { int i; int gap[16] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 };
//间隔数组,用于控制速度 HideCursor(); //隐藏光标 Show(); //打印框架 Init(); //初始化 while(1) { if
(gap[0]++ % Speed == 0) { //速度调整, Cheak_Game(); //游戏胜负检测 for (i = 0; i <= 5;
i++) {//敌方坦克移动循环 if (gap[i + 7]++ % 3 == 0) Move_AI_T(&AI_tank[i]); } for (i =
0; i <= 5; i++)//建立敌方坦克 if (AI_tank[i].Exist == 0 && AI_tank[i].Revival < 4 &&
gap[i+1]++ % 50 == 0) { //一个敌方坦克每局只有4条命 //坦克死掉后间隔一段时间建立
Creat_AI_T(&AI_tank[i]); break; } for (i = 0; i <= 5; i++) if
(AI_tank[i].Exist) Creat_AI_B(&AI_tank[i]); if (my_tank.Exist && gap[14]++ % 2
== 0) Key(); if (my_tank.Exist == 0 && my_tank.Revival < L && gap[15]++ % 15 ==
0)//我方坦克复活 Creat_My_T(&my_tank); Move_B(bullet); } Sleep(5); } return 0; }

技术
今日推荐
PPT
阅读数 99
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:766591547
关注微信