C++坦克大战源代码

  源码:

#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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/73725.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

visual studio 2017 运行的程序关闭后不能再运行?(visual studio建立项目之后退出,如何再次完整打开项目?)

在你储存项目的文件夹里面应该是这样的 里面.vcxproj后缀名的就是原来创建的项目&#xff0c;直接打开这个头文件源文件就会一起出来了&#xff01; 真的管用&#xff0c;亲测有效。

openGauss学习笔记-44 openGauss 高级数据管理-存储过程

文章目录 openGauss学习笔记-44 openGauss 高级数据管理-存储过程44.1 语法格式44.2 参数说明44.3 示例 openGauss学习笔记-44 openGauss 高级数据管理-存储过程 存储过程是能够完成特定功能的SQL语句集。用户可以进行反复调用&#xff0c;从而减少SQL语句的重复编写数量&…

目标检测(Object Detection)

文章目录 1. 目标检测1.1 目标检测简要概述及名词解释1.2 IOU1.3 TP TN FP FN1.4 precision&#xff08;精确度&#xff09;和recall&#xff08;召回率&#xff09; 2. 边框回归Bounding-Box regression3. Faster R-CNN3.1 Faster-RCNN&#xff1a;conv layer3.2 Faster-RCNN&…

Azure存储访问层

blob数据的热访问层&#xff0c;冷访问层和存档访问层 Azure Blob 存储是一种托管对象存储服务&#xff0c;可用于存储和访问大量非结构化数据&#xff0c;如文本和二进制数据。Azure Blob 存储提供了三个不同层级的访问方式&#xff0c;以适应不同数据的使用模式和成本效益需…

【福建事业单位-综合基础知识】03行政法

【福建事业单位-综合基础知识】03行政法 1.行政法概述&#xff08;原则重点&#xff09;行政主体范围 行政行为总结 二.行政处罚2.1行政处罚的种类总结 行政法框架 1.行政法概述&#xff08;原则重点&#xff09; 行政法的首要原则是合法&#xff1b;自由裁量——合理行政&…

《Go 语言第一课》课程学习笔记(八)

基本数据类型 Go 原生支持的数值类型有哪些&#xff1f; Go 语言的类型大体可分为基本数据类型、复合数据类型和接口类型这三种。 其中&#xff0c;我们日常 Go 编码中使用最多的就是基本数据类型&#xff0c;而基本数据类型中使用占比最大的又是数值类型。 整型 Go 语言的…

stack、queue 和 priority_queue 相关的练习

目录 一、stack 相关的练习 1.1 - 最小栈 1.2 - 栈的压入、弹出序列 1.3 - 逆波兰表达式求值 1.4 - 用栈实现队列 二、queue 相关的练习 2.1 - 二叉树的层序遍历 2.2 - 二叉树的层序遍历 II 2.3 - 用队列实现栈 三、priority_queue 相关的练习 3.1 - 数组中的第K个最…

8.14 ARM

1.练习一 .text 文本段 .global _start 声明一个_start函数入口 _start: _start标签&#xff0c;相当于C语言中函数mov r0,#0x2mov r1,#0x3cmp r0,r1beq stopsubhi r0,r0,r1subcc r1,r1,r0stop: stop标签&#xff0c;相当于C语言中函数b stop 跳转到stop标签下的第一条…

Oracle-如何判断字符串包含中文字符串(汉字),删除中文内容及保留中文内容

今天遇见一个问题需要将字段中包含中文字符串的筛选出来 --建表 CREATE TABLE HADOOP1.AAA ( ID VARCHAR2(255) ); --添加字段INSERT INTO HADOOP1.AAA(ID)VALUES(理解);....--查询表内容SELECT * FROM HADOOP1.AAA;在网上查找了一下有以下三种方式&#xff1a; 第一种&#…

Java SpringBoot Vue ERP系统

系统介绍 该ERP系统基于SpringBoot框架和SaaS模式&#xff0c;支持多租户&#xff0c;专注进销存财务生产功能。主要模块有零售管理、采购管理、销售管理、仓库管理、财务管理、报表查询、系统管理等。支持预付款、收入支出、仓库调拨、组装拆卸、订单等特色功能。拥有商品库存…

【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡)

微服务技术一 技术栈图一、注册中心Eureka概念&#xff1a;搭建EurekaServer服务注册服务发现&#xff08;消费者对提供者的远程调用&#xff09; 二、Ribbon负载均衡负载均衡的原理&#xff1a;LoadBalanced负载均衡的策略&#xff1a;IRule懒加载 三、Nacos注册中心Nacos的安…

【数据结构OJ题】有效的括号

原题链接&#xff1a;https://leetcode.cn/problems/valid-parentheses/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 这道题目主要考查了栈的特性&#xff1a; 题目的意思主要是要做到3点匹配&#xff1a;类型、顺序、数量。 题目给的例子是比较…

Floyd(多源汇最短路)

Floyd求最短路 给定一个 n 个点 m 条边的有向图&#xff0c;图中可能存在重边和自环&#xff0c;边权可能为负数。 再给定 k 个询问&#xff0c;每个询问包含两个整数 x 和 y&#xff0c;表示查询从点 x 到点 y 的最短距离&#xff0c;如果路径不存在&#xff0c;则输出 impo…

Elasticsearch:如何在 Ubuntu 上安装多个节点的 Elasticsearch 集群 - 8.x

Elasticsearch 是一个强大且可扩展的搜索和分析引擎&#xff0c;可用于索引和搜索大量数据。 Elasticsearch 通常用于集群环境中&#xff0c;以提高性能、提供高可用性并实现数据冗余。 在本文中&#xff0c;我们将讨论如何在 Ubuntu 20.04 上安装和配置具有多节点集群的 Elast…

(二)结构型模式:4、组合模式(Composite Pattern)(C++实例)

目录 1、组合模式&#xff08;Composite Pattern&#xff09;含义 2、组合模式应用场景 3、组合模式的优缺点 4、组合模式的UML图学习 5、C实现组合模式的简单示例&#xff08;公司的OA系统&#xff09; 1、组合模式&#xff08;Composite Pattern&#xff09;含义 组合模…

207. 课程表

思路 首先要完全理解题意&#xff0c;这道题的[a,b]并不是b满足了a就可以真正的学习a这门课了&#xff0c;因为a还有可能需要其他选修课的条件。类似下图。   这题的思路在于使用合适的数据结构来存储&#xff0c;这里用hash表来存储如果1这门课可以修了之后&#xff0c;可以…

ElasticSearch 数据聚合、自动补全(自定义分词器)、数据同步

文章目录 数据聚合一、聚合的种类二、DSL实现聚合1、Bucket&#xff08;桶&#xff09;聚合2、Metrics&#xff08;度量&#xff09;聚合 三、RestAPI实现聚合 自动补全一、拼音分词器二、自定义分词器三、自动补全查询四、实现搜索款自动补全&#xff08;例酒店信息&#xff0…

AI问答:JSBridge / WebView 与 Native 通信

一、理解JSBridge JSBridge是一种连接JavaScript和Native代码的桥梁&#xff0c;它提供了一种方法&#xff0c;使得JavaScript可以直接调用Native的代码&#xff0c;同时使得Native的代码也能直接调用JavaScript的方法&#xff0c;从而实现了JavaScript和Native之间的相互调用和…

uniapp配置添加阿里巴巴图标icon流程步骤

文章目录 下载复制文件到项目文件夹里项目配置目录结构显示图标 下载 阿里巴巴icon官网 https://www.iconfont.cn/ 复制文件到项目文件夹里 项目配置目录结构 显示图标

【【STM32之GPIO】】

STM32之GPIO 学完了正点原子自带的视频课之后感觉仍然一知半解现在更新一下来自其他版本的STM32学习 GPIO 就是 General Purpose Input Output 中文名叫通用输入输出口 可配置8种输入输出模式 引脚电平 0V~3.3V 部分引脚可容忍5V 输出模式下可控制端口输出高低电平&#xff…