效果截图:

源码

#include <iostream>
#include <time.h>
#include <windows.h>#define W 1       //上
#define S 2         //下
#define A 3         //左
#define D 4          //右
#define L 5       // 坦克有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;   //我方坦克此参数为1bool 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,我方为200elsemap[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++; //复活次数+1AI_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=1B_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;elsereturn 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;  //我的坦克复活次数为0Pos = 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;
}

制作不易,有问题请评论改正。

C++坦克大战源代码相关推荐

  1. c语言编写坦克大战设计报告,c语言编写坦克大战源代码

    <c语言编写坦克大战源代码>由会员分享,可在线阅读,更多相关<c语言编写坦克大战源代码(10页珍藏版)>请在人人文库网上搜索. 1.include tank.h#include ...

  2. android坦克大战源代码,android的坦克大战 - 源码下载|源代码 - 源码中国

    压缩包 : TankWar坦克大战.rar 列表 TankWar坦克大战\TankWar\.classpath TankWar坦克大战\TankWar\.project TankWar坦克大战\Tan ...

  3. c语言坦克大战源代码vc 6.0,坦克大战(VC6.0) - 源码下载|源代码 - 源码中国

    压缩包 : 坦克大战.rar 列表 坦克大战\BattleCity.aps 坦克大战\BattleCity.dsp 坦克大战\BattleCity.dsw 坦克大战\BattleCity.ncb 坦克 ...

  4. java坦克大战案例_JAVA实现经典坦克大战源代码

    [实例简介] 博客地址:http://blog.csdn.net/a1275302036/article/details/54232751 实现的主要功能有:界面绘制(草地.河流.鹰碉堡.坦克.子弹等 ...

  5. 玩游戏吗~Python教你实现 经典90坦克大战(支持单双人模式哦)| 附源代码

    源码在Python白嫖q群:733089476 获取 坦克大战是一个比较经典的小游戏,而 90 坦克大战是一个比较经典的版本,我们来看一下如何利用 Python 实现坦克大战,先睹为快. 游戏设定 ➢ ...

  6. 【跟我一起学Unity3D】做一个2D的90坦克大战之AI系统

    对于AI,我的初始想法非常easy,首先他要能动,而且是在地图里面动. 懂得撞墙后转弯,然后懂得射击,其它的没有了,基于这个想法,我首先创建了一个MyTank类,用于管理玩家的坦克的活动,然后创建AI ...

  7. 坦克大战java_java版坦克大战游戏源码

    [java]代码库package tankwar; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; imp ...

  8. Java坦克大战 (一) 之产生一个窗口

    本文来自:小易博客专栏.转载请注明出处:http://blog.csdn.net/oldinaction 在此小易将坦克大战这个项目分为几个版本,以此对J2SE的知识进行回顾和总结,希望这样也能给刚学 ...

  9. Unity3D_(游戏)2D坦克大战 像素版

    2D坦克大战    像素版 游戏规则: 玩家通过上.下.左.右移动坦克,空格键发射子弹 敌人AI出身时朝向己方大本营(未防止游戏快速结束,心脏上方三个单位障碍物设为刚体) 当玩家被击杀次数>=3 ...

  10. 用 Python 写个坦克大战

    坦克大战是一款策略类的平面射击游戏,于 1985 年由 Namco 游戏公司发布,尽管时至今日已经有了很多衍生类的游戏,但这款游戏仍然受到了相当一部分人的欢迎,本文我们看一下如何使用 Python 来 ...

最新文章

  1. Jmeter分布式压测方案
  2. 13个好习惯 教你健康一整年
  3. Delphi TScrollBar 用于滚动窗口、组件内容
  4. 2019 年 DevOps 实践中最有价值的8大技能
  5. Activity生命周期详解二
  6. 集合与数组,集合与集合之间的转换
  7. 人人商城-人人社区数据字典(数据表)
  8. 使用qq邮箱作为程序客户端自动发送邮件
  9. 直流电机驱动模块介绍
  10. 电流检测电路公式推导
  11. 51nod 1597 有限背包计数问题 DP 根号分治
  12. 学C语言中输入输出函数,一篇就够了
  13. 谷歌Google更改搜索地区
  14. 祝贺嘉华集团获得汽车经销商集团信息化管理大奖
  15. 情感驿站 | 为人处世的行为准则总结
  16. 图像融合论文及代码整理最全大合集
  17. 计算机英语课程设计,计算机英语立体化课程设计论文
  18. 以萨技术在科创板IPO终止:计划募资15亿元,实控人为李凡平
  19. 尚硅谷尚品汇学习笔记
  20. sqlserver 创建登录名报错:‘User, group, or role ‘arms‘ already exists in the current database‘

热门文章

  1. 数值分析第八章知识点总结——常微分方程数值解法
  2. 如何开启刷题,蓝桥杯练习系统
  3. 番茄花园xp开机音乐_抱歉,Windows XP的开机音乐骗了你20年
  4. 小白都不知道的互联网行业黑化大全
  5. REST Assured 55 - JSON Schema Validation In Rest Assured
  6. P1867 【Mc生存】经验值
  7. DirectX Repair V3.0
  8. wifi免密码登录认证流程
  9. 光纤的基本理论光纤的色散
  10. 中信建投软件测试,中信建投笔试经验-范例