本次更新了更多关卡

部分Windows版本需要开管理员权限才能读取与保存存档;商店选择物品的方法用A和D来操作,退出商店用ESC;移动也是用A和D,炮口的方向使用W和S来切换,使用物品用对应的数字键。

制作不易,点赞是对我最大的鼓励,谢谢!

#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
using namespace std;
struct asdfg{
    int x=10;
    int y=17;
    int h=100;
    int sp;    
    int par=1;
    bool dead=1;
    bool v;
    int coin=1000;
    int ammo=100;
    vector<int> bag;
    int bagnum=0;
    int enegy;
}play;
struct PlayerData {
    string name;
    string password;
    int coins = 1000;
    int highScore = 0;
    bool ci[20]; 
}playtext;
struct hjkl{
    int x;
    int y;
    int par;
    bool use;
    int dev;
    bool team;
}ammo[1001];
struct zxcv{
    int x;
    int y;
    int par;
    int h;
    int sp;
    int m=0,shot=0;
    bool dead=0;
    bool v;
    bool v2;
    bool v3;
}enemy[1001];
struct bnm{
    int x;
    int y;
    int par;
    int use;
}gift[100]; 
struct qwe{
    int x,y,par,h;
    bool u=0;
}boss;
struct iop{
    int x,y,par,h,t;
    bool u=0;
}bigboss; 
struct cnm{
    int x,y,h;
    int sx=0;
    int s[100];
    bool u=0;
}bplane[10];
struct zxc{
    int x1,x2,y;
    int h;
    int p;
    bool u=0;
}dun[100];
char thing[5][3][3]{
{{' ',' ','L'},
{' ','/',' '},
{'/',' ',' '}},
{{' ','O',' '},
{' ','*',' '},
{' ',' ',' '}},
{{'^','^','^'},
{'#','#','#'},
{'#','#','#'}},
{{' ','|',' '},
{' ','|',' '},
{' ','#',' '}},
{{' ','!',' '},
{'#','^','#'},
{'#','+','#'}},
};
char bigBoss[3][5][5] = {{
    { '[', 'O', 'O', 'O', ']' },
    { '|', ' ', 'X', ' ', '|' },
    { '=', '=', 'H', '=', '=' },
    { '>', '>', '|', '<', '<' },
    { ' ', ' ', '|', ' ', ' ' },
},{
    { '#', '^', '#', '^', '#' },
    { '[', '*', '*', '*', ']' },
    { '>', '>', '0', '<', '<' },
    { '|', '~', '|', '~', '|' },
    { ' ', ' ', '|', ' ', ' ' }
}};
void autodun(int y,int x1,int x2,int p);
void clear();
void xray(int x,int y,bool p,int dev,bool io,int h);
int price[10]{200,400,100,300,1000},cs[20]{3000,2500,5000,4000};
int mapx[60][20],am=0,randx[1000],ra=0,en=0,gi=0,tx=0,tx1,boss1n=0,bp=0,zt=0,mis=1,ci[20],du=0,speed=1;
bool boom=0,tell=0,zp=0,xrayx=0;
int color(int x){
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x);
}
// 保存存档
void savePlayerData(const PlayerData& data) {
    for(int i = 0; i < 20; i++) {
        playtext.ci[i] = ci[i];
    }
    std::ofstream outFile("player_data.dat", std::ios::binary);
    if (!outFile) {
        std::cerr << "无法打开文件保存数据" << std::endl;
        return;
    } 
    // 写入字符串长度和内容 
    //size_t nameLength = data.name.size();
    int nameLength=data.name.size();
    outFile.write(reinterpret_cast<const char*>(&nameLength), sizeof(nameLength));
    outFile.write(data.name.c_str(), nameLength);
    

    size_t passLength = data.password.size();
    outFile.write(reinterpret_cast<const char*>(&passLength), sizeof(passLength));
    outFile.write(data.password.c_str(), passLength);

    // 写入其他数据
    outFile.write(reinterpret_cast<const char*>(&data.coins), sizeof(data.coins));
    outFile.write(reinterpret_cast<const char*>(&data.highScore), sizeof(data.highScore));
    
    // 写入词条数据
    for(int i = 0; i < 20; i++) {
        outFile.write(reinterpret_cast<const char*>(&data.ci[i]), sizeof(bool));
    }

    outFile.close();
}

// 从文件加载玩家数据
bool loadPlayerData(PlayerData& data) {
    std::ifstream inFile("player_data.dat", std::ios::binary);
    if (!inFile) {
        std::cerr << "无法打开文件加载数据" << std::endl;
        return false;
    }

    // 读取名称
    size_t nameLength;
    inFile.read(reinterpret_cast<char*>(&nameLength), sizeof(nameLength));
    data.name.resize(nameLength);
    inFile.read(&data.name[0], nameLength);

    // 读取密码
    size_t passLength;
    inFile.read(reinterpret_cast<char*>(&passLength), sizeof(passLength));
    data.password.resize(passLength);
    inFile.read(&data.password[0], passLength);

    // 读取其他数据
    inFile.read(reinterpret_cast<char*>(&data.coins), sizeof(data.coins));
    inFile.read(reinterpret_cast<char*>(&data.highScore), sizeof(data.highScore));
    
    // 读取词条数据
    for(int i = 0; i < 20; i++) {
        inFile.read(reinterpret_cast<char*>(&data.ci[i]), sizeof(bool));
    }

    inFile.close();
    return true;
}
int dfp(int a1){
    if(a1==3){
        a1=13;
    }else if(a1==0){
        a1=10;
    }else if(a1==2){
        a1=12;
    }
    switch(a1){
        case(10):return ' ';break;
        case(13):return '*';break;
        case(101):return ' ';break;
        case(102):return '!';break;
        case(103):return ' ';break;
        case(104):return '/';break;
        case(105):return 'A';break;
        case(106):return '\\';break;
        case(107):return '|';break;
        case(108):return '+';break;
        case(109):return '|';break;
        case(111):return ' ';
        case(112):return '!';
        case(113):return ' ';
        case(114):return '#';
        case(115):return '^';
        case(116):return '#';
        case(117):return '#';
        case(118):return '+';
        case(119):return '#';
        case(120):return 'O';
        case(121):return '|';
        case(122):return '-';
        case(123):return 'V';
        case(124):return '[';
        case(125):return ']';
        case(200):return '.';break;
        case(201):return 'O';break;
        case(202):return '*';
        case(203):return '#';
        case(204):return '*';
        case(205):return '|';
        case(206):return '-';
        case(300):return 'A'; 
        case(301):return 'T';
        case(302):return 'O';
        case(400):return 'o';break;
        case(401):return 'o';break;
        case(402):return 'o';break;
        case(403):return 'o';break;
        case(404):return 'o';break;
        case(405):return 'o';break;
        case(410):return '=';
        case(12):return '#';break;
    }
}
void textcolor(int y, int x) {
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    WORD colorAttr = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE; // 默认白色
    
    // 获取当前单元格的字符值
    int cellValue = mapx[y][x];
    static DWORD lastTick = GetTickCount();
    DWORD currentTick = GetTickCount();
    bool blinkPhase = (currentTick % 400) < 200; // 闪烁周期
    
    // 根据不同的地图值设置颜色
    switch(cellValue) {
        // 玩家飞船 (多色设计)
        case 100: case 101: case 102: case 103: case 104: case 105: case 106: case 107: case 108: case 109:
        case 110: case 111: case 112: case 113: case 114: case 115: case 116: case 117: case 118: case 119:
            // 飞船主体 - 根据部位不同设置不同颜色
            if (cellValue == 105 || cellValue == 106) { // 机翼
                colorAttr = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY; // 青色
            } else if (cellValue == 107 || cellValue == 109) { // 引擎/推进器
                colorAttr = FOREGROUND_RED | FOREGROUND_INTENSITY; // 亮红色
            } else { // 机身
                colorAttr = FOREGROUND_BLUE | FOREGROUND_INTENSITY; // 亮蓝色
            }
            break;
            
        // 普通子弹 (白色带闪烁尾迹)
        case 200:
            colorAttr = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | 
                       (blinkPhase ? FOREGROUND_INTENSITY : 0);
            break;
            
        // 火箭子弹 (多色动态效果)
        case 201: {
            int colorShift = (currentTick / 100) % 3;
            switch(colorShift) {
                case 0: colorAttr = FOREGROUND_RED | FOREGROUND_INTENSITY; break;
                case 1: colorAttr = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY; break;
                case 2: colorAttr = FOREGROUND_GREEN | FOREGROUND_INTENSITY; break;
            }
            break;
        }
            
        // 火箭尾焰 (动态红色/橙色)
        case 202:
            colorAttr = FOREGROUND_RED | ((currentTick % 200 < 100) ? FOREGROUND_GREEN : 0) | FOREGROUND_INTENSITY;
            break;
            
        // 背景/太空 (黑色)
        case 0:
            colorAttr = 0;
            break;
            
        // 爆炸效果 (闪烁红色,无背景色)
        case 3:
            if (blinkPhase) {
                colorAttr = FOREGROUND_RED | FOREGROUND_INTENSITY;
            } else {
                colorAttr = FOREGROUND_RED | FOREGROUND_GREEN; // 橙色
            }
            break;
            
        // 岩石 (灰色带纹理效果)
        case 2: {
            int texture = (x + y + currentTick/300) % 3;
            switch(texture) {
                case 0: colorAttr = FOREGROUND_INTENSITY; break; // 亮灰
                case 1: colorAttr = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE; break; // 白色
                case 2: colorAttr = FOREGROUND_RED | FOREGROUND_GREEN; break; // 黄色(模拟矿物反光)
            }
            break;
        }
            
        // 敌人 (动态红色系)
        case 300: case 301: case 302: {
            int colorMode = (currentTick / 150 + x + y) % 4;
            switch(colorMode) {
                case 0: colorAttr = FOREGROUND_RED; break;
                case 1: colorAttr = FOREGROUND_RED | FOREGROUND_INTENSITY; break;
                case 2: colorAttr = FOREGROUND_RED | FOREGROUND_GREEN; break; // 橙色
                case 3: colorAttr = FOREGROUND_RED | FOREGROUND_BLUE; break; // 紫色
            }
            break;
        }
            
        // 道具 (闪烁绿色系)
        case 400: case 401: case 402: case 403: case 404: case 405:
            if (blinkPhase) {
                colorAttr = FOREGROUND_GREEN | FOREGROUND_INTENSITY;
            } else {
                colorAttr = FOREGROUND_GREEN | ((cellValue % 2) ? FOREGROUND_BLUE : 0);
            }
            break;
            
        // 特殊物品 (动态紫色)
        case 12: {
            int pulse = (currentTick / 50) % 8;
            if (pulse < 4) {
                colorAttr = FOREGROUND_RED | FOREGROUND_BLUE | (pulse % 2 ? FOREGROUND_INTENSITY : 0);
            } else {
                colorAttr = FOREGROUND_BLUE | ((pulse % 2) ? FOREGROUND_INTENSITY : 0);
            }
            break;
        }
    }
    
    // BOSS飞船多色渲染
    if (boss1n && (y == boss.y || y == boss.y+1) && (x >= boss.x-1 && x <= boss.x+1)) {
        if (boss.par == 0) { // 第一种BOSS形态
            if (y == boss.y && x == boss.x) { // 核心
                colorAttr = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY; // 黄色
            } else if (y == boss.y+1 && x == boss.x) { // 引擎
                colorAttr = FOREGROUND_RED | FOREGROUND_INTENSITY; // 亮红色
            } else { // 武器
                colorAttr = FOREGROUND_BLUE | FOREGROUND_INTENSITY; // 亮蓝色
            }
        } else { // 第二种BOSS形态
            int partColor = (x - boss.x + 1) + (y - boss.y) * 3;
            switch(partColor) {
                case 0: case 2: case 6: case 8: // 角落
                    colorAttr = FOREGROUND_RED | FOREGROUND_INTENSITY; break;
                case 1: case 3: case 5: case 7: // 边缘
                    colorAttr = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY; break;
                case 4: // 中心
                    colorAttr = FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY; break;
            }
        }
    }
    
    // BIGBOSS多部位多色渲染
    if (bigboss.u && (y >= bigboss.y-2 && y <= bigboss.y+2) && (x >= bigboss.x-2 && x <= bigboss.x+2)) {
        char bossChar = bigBoss[bigboss.par][y - (bigboss.y-2)][x - (bigboss.x-2)];
        switch(bossChar) {
            case 'O': // 核心部件 - 脉冲红色
                colorAttr = FOREGROUND_RED | ((currentTick % 200 < 100) ? FOREGROUND_INTENSITY : 0);
                break;
            case 'X': // 驾驶舱 - 闪烁青色
                colorAttr = FOREGROUND_GREEN | FOREGROUND_BLUE | 
                           (blinkPhase ? FOREGROUND_INTENSITY : 0);
                break;
            case 'H': // 武器基座 - 交替红黄
                colorAttr = (currentTick % 300 < 150) ? 
                    (FOREGROUND_RED | FOREGROUND_INTENSITY) : 
                    (FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
                break;
            case '|': // 主炮 - 强白色
                colorAttr = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY;
                break;
            case '>': case '<': // 副炮 - 橙色
                colorAttr = FOREGROUND_RED | FOREGROUND_GREEN | 
                          ((currentTick % 150 < 75) ? FOREGROUND_INTENSITY : 0);
                break;
            case '[': case ']': // 外壳框架 - 暗红色
                colorAttr = FOREGROUND_RED;
                break;
            case '=': // 装甲板 - 金属灰
                colorAttr = FOREGROUND_INTENSITY;
                break;
            default: // 其他部分
                colorAttr = FOREGROUND_RED | FOREGROUND_BLUE; // 紫色
                break;
        }
    }
    
    // 应用颜色
    COORD coord = {static_cast<SHORT>(x), static_cast<SHORT>(y)};
    DWORD written;
    WriteConsoleOutputAttribute(hConsole, &colorAttr, 1, coord, &written);
}

void fastcls() {
    static HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    static CONSOLE_CURSOR_INFO oldCursor;
    static bool firstRun = true;
    if(firstRun) {
        CONSOLE_CURSOR_INFO cursor = {100, FALSE};
        GetConsoleCursorInfo(hOut, &oldCursor);
        SetConsoleCursorInfo(hOut, &cursor);
        firstRun = false;
    }
    SetConsoleCursorPosition(hOut, COORD{0,0});
    for(int i=0; i<3; i++) { 
        WriteConsoleA(hOut, " \b", 2, NULL, NULL); 
    }
}
void screen(){
    fastcls();
    //clear();
    if(boss1n){
        if(boss.par==0){
            mapx[boss.y][boss.x]=108;
            mapx[boss.y][boss.x+1]=108;
            mapx[boss.y][boss.x-1]=108;
            mapx[boss.y+1][boss.x]=109;
        }
    }
    for(int i=0;i<27;i++){
        cout<<"#";
        for(int ii=0;ii<20;ii++){
            cout<<char(dfp(mapx[i][ii]));
            
        }
        cout<<"#";
        cout<<endl;
    }
    cout<<endl<<endl; 
     for(int i=0;i<20;i++){
         cout<<"--";
     }cout<<endl<<endl;
    for(int i=0;i<20;i++){
         cout<<"--";
     }cout<<endl;
}
void clear(){
    DWORD written;
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    for(int i=0;i<90;i++){
        COORD startPos = {0, i};
        SetConsoleCursorPosition(hConsole, startPos);
        FillConsoleOutputCharacter(hConsole, ' ', 100, startPos, &written);
    }
    COORD startPos = {0, 0};
    SetConsoleCursorPosition(hConsole, startPos);
}
void ClearScreen() {
    if(bigboss.u){
        int xn=0,yn=0;
        for(int i=bigboss.y-2;i<=bigboss.y+1;i++){
            xn=0;
            for(int ii=bigboss.x-2;ii<=bigboss.x+2;ii++){
                mapx[i][ii]=bigBoss[bigboss.par][yn][xn];
                xn++;
            }
            yn++;
        }
        mapx[bigboss.y+2][bigboss.x]='|';
    }
    if(boss1n){
        if(boss.par==0){
            mapx[boss.y][boss.x]=108;
            mapx[boss.y][boss.x+1]=108;
            mapx[boss.y][boss.x-1]=108;
            mapx[boss.y+1][boss.x]=109;
        }else if(boss.par==1){
            mapx[boss.y][boss.x]=105;
            mapx[boss.y][boss.x+1]=106;
            mapx[boss.y][boss.x-1]=104;
            mapx[boss.y+1][boss.x]=109;
        }
        else if(boss.par==2){
            mapx[boss.y][boss.x]=120;
            mapx[boss.y][boss.x+1]=121;
            mapx[boss.y][boss.x-1]=121;
            mapx[boss.y+1][boss.x]=121;
        }
        else if(boss.par==3){
            mapx[boss.y][boss.x]=120;
            mapx[boss.y][boss.x+1]=122;
            mapx[boss.y][boss.x-1]=122;
            mapx[boss.y+1][boss.x]=121;
        }else if(boss.par==4){
            mapx[boss.y][boss.x]=120;
            mapx[boss.y][boss.x+1]=124;
            mapx[boss.y][boss.x-1]=125;
            mapx[boss.y+1][boss.x]=123;
        }
        
    }
    int a1=0;
    for(int i=0;i<100;i++){
        if(a1==du){
            break;
        }
        if(dun[i].u){
            a1++;
            for(int ii=dun[i].x1;ii<=dun[i].x2;ii++){
                if(ii<0){
                    continue;
                }
                mapx[dun[i].y][ii]=410;
            }
        }
    }
    if(bp>0){
        for(int i=0;i<30;i++){
            if(bplane[i].u){
                mapx[bplane[i].y][bplane[i].x]=301;
            }
        }
    }
    int a2=0;if(play.dead==1){
    for(int i=play.y-1;i<=play.y+1;i++){
        for(int ii=play.x-1;ii<=play.x+1;ii++){
               if((i==play.y-1&&ii==play.x-1)||(i==play.y-1&&ii==play.x+1)){
                a2++;
                continue;
            }
            a2++;
            if(play.par==0){
                mapx[i][ii]=100+a2;
            }else if(play.par==1){
                mapx[i][ii]=110+a2;
            }
                    
        }
    }
    }else{
        for(int i=play.y-1;i<=play.y+1;i++){
        for(int ii=play.x-1;ii<=play.x+1;ii++){
            mapx[i][ii]=3;
        }
    }
    }
    if(gi>=0){
        for(int i=0;i<100;i++){
            if(gift[i].use==1){
                mapx[gift[i].y][gift[i].x]=gift[i].par+400;
            }
        }
    }
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    if (hConsole == INVALID_HANDLE_VALUE) {
        std::cerr << "无法获取控制台句柄" << std::endl;
        exit(0);
    }
    int ax;
    for(int i=0;i<26;i++){
        for(int ii=1;ii<=20;ii++){
                  SHORT y = i;  // 行号(从0开始)
                SHORT x = ii;  // 列号(从0开始)
                COORD coord = {x, y};
                 char buffer;
                 DWORD charsRead;
                BOOL success = ReadConsoleOutputCharacterA(hConsole, &buffer, 1, coord, &charsRead);  
                 if (!success || charsRead != 1) {
                   std::cerr << "读取失败,错误代码: " << GetLastError() << std::endl;
                    return ;
                 }
                 if(static_cast<int>(buffer)!=dfp(mapx[i][ii])){
                     HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
                    COORD startPos = {ii, i}; // 
                  DWORD written;
                  if(dfp(mapx[i][ii])>30&&dfp(mapx[i][ii])<128){
                      FillConsoleOutputCharacter(hConsole, dfp(mapx[i][ii]), 1, startPos, &written);
                      textcolor(i,ii);
                  }
                  if((bigboss.u&&bigboss.y-2<=i&&bigboss.y+1>=i&&bigboss.x-2<=ii&&bigboss.x+2>=ii)||(i==bigboss.y+2&ii==bigboss.x)){
                      FillConsoleOutputCharacter(hConsole, mapx[i][ii], 1, startPos, &written);
                      textcolor(i,ii);
                  }
                }
                
                 
        }
    }
    //HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
      COORD startPos = {24, 0}; // 
    DWORD written;
    SetConsoleCursorPosition(hConsole, startPos);
    FillConsoleOutputCharacter(hConsole, ' ', 20, startPos, &written);
    cout<<"炮向:"; 
    if(play.v){
        cout<<"前";
    }else{
        cout<<"后";
    }
    startPos = {24, 1};
    SetConsoleCursorPosition(hConsole, startPos);
    FillConsoleOutputCharacter(hConsole, ' ', 20, startPos, &written);
    cout<<"heart:"<<play.h;
    startPos = {24, 2};
    SetConsoleCursorPosition(hConsole, startPos);
    FillConsoleOutputCharacter(hConsole, ' ', 20, startPos, &written);
    cout<<"ammo:"<<play.ammo;
    startPos = {24, 6};
    SetConsoleCursorPosition(hConsole, startPos);
    FillConsoleOutputCharacter(hConsole, ' ', 20, startPos, &written);
    startPos = {24, 3};
    SetConsoleCursorPosition(hConsole, startPos);
    FillConsoleOutputCharacter(hConsole, ' ', 20, startPos, &written);
    cout<<"time:"<<tx1;
    startPos = {24, 4};
    SetConsoleCursorPosition(hConsole, startPos);
    FillConsoleOutputCharacter(hConsole, ' ', 20, startPos, &written);
    cout<<"coin:"<<play.coin;
    startPos = {24, 5};
    SetConsoleCursorPosition(hConsole, startPos);
    FillConsoleOutputCharacter(hConsole, ' ', 20, startPos, &written);
    if(boss1n){
    cout<<"boss:"<<boss.h;
    }
    if(bigboss.u==1){
        cout<<"bigboss:"<<bigboss.h;
    }
    startPos = {24, 6};
    SetConsoleCursorPosition(hConsole, startPos);
    FillConsoleOutputCharacter(hConsole, ' ', 20, startPos, &written);
    if(bigboss.u==1){
        cout<<"warning:"<<bigboss.t;
    }
    startPos = {24, 7};
    SetConsoleCursorPosition(hConsole, startPos);
    FillConsoleOutputCharacter(hConsole, ' ', 20, startPos, &written);
    if(mis==2){
        cout<<"energy:"<<play.enegy;
    }
    startPos = {24, 8};
    SetConsoleCursorPosition(hConsole, startPos);
    FillConsoleOutputCharacter(hConsole, ' ', 20, startPos, &written);
    //cout<<dun[0].h;
    for(int i=0;i<3;i++){
        startPos = {24, i+9};
        SetConsoleCursorPosition(hConsole, startPos);
        FillConsoleOutputCharacter(hConsole, ' ', 20, startPos, &written);
        cout<<i+1<<".";
        if(play.bag.size()<i+1){
            cout<<"nothing";
            continue;
        }
        if(play.bag[i]==1){
            cout<<"fix+";
        }
        else if(play.bag[i]==2){
            cout<<"rocket";
        }
        else if(play.bag[i]==3){
            cout<<"ammo+";
        }
        else if(play.bag[i]==4){
            cout<<"X-ray";
        }
        else if(play.bag[i]==5){
            cout<<"rush-Z";
        }
        else if(play.bag[i]==0||play.bag.begin()+i>play.bag.end()){
            cout<<"nothing";
        }
    }
    startPos = {0, 29};
    SetConsoleCursorPosition(hConsole, startPos);
}
void speak(bool a1,int a2){
    // ... 其他代码不变 ...
    if(a1==0){
        if(a2==-1){
            cout<<"游戏结束";
        }
        if(a2==0){
        cout<<"金币!";
        return;
        }
        if(a2==1){
        cout<<"修复!";
        return;
        }
        if(a2==2){
        cout<<"弹药!";
        return;
        }
        if(a2==3){
        cout<<"火箭支援!";
        return;
        }
        if(a2==4){
            cout<<"爆炸!";
            return;
        }
        if(a2==5){
        cout<<"敌人来袭!";
        return;
        }
        if(a2==6){
        cout<<"小心岩石!";
        return;
        }
        if(a2==7){
            cout<<"使用'A' 'D'键移动飞船";
            return;
        }
        if(a2==8){
            cout<<"开始战斗!";
            return;
        }
        if(a2==9){
            cout<<"使用空格键发射子弹";
            return;
        }
        if(a2==10){
            cout<<"使用'W' 'S'键改变飞船方向";
            return ;
        }
        if(a2==11){
            cout<<"使用'1' '2' '3'键使用购买的道具";
            return;
        }
        if(a2==12){
            cout<<"使用'A' 'D'键在商店中选择物品";
            return;
        }
        if(a2==13){
            cout<<"收集太空中的'O'符号获取道具";
            return;
        }
        if(a2==14){
            cout<<"你可以射击岩石和敌人";
            return;
        }
        if(a2==15){
            cout<<"噢伙计,我们今天能量不足";
            return;
        }
        if(a2==16){
            cout<<"我们可以通过射击获取能量...";
            return;
        }
        // ... 其他对话保持不变 ...
    }
}


void adicent(int x,int y){
    if(boss1n){
        if((x==boss.x-1||x==boss.x+1||x==boss.x)&&y==boss.y&&boss.y>5){
            boss.h-=10;
            if(boss.h<=0){
                boss.u=0;
                boss1n=0;
                for(int i=boss.x-1;i<=boss.x+1;i++){
                    for(int ii=boss.y-1;ii<=boss.y+1;ii++){
                        mapx[ii][i]=3;
                    }
                }
                boom=1;
            }
            return ;
        }
    }
    if(bigboss.u){
        for(int i=bigboss.y;i<=bigboss.y+1;i++){
            for(int ii=bigboss.x-2;ii<=bigboss.x+2;ii++){
                if(i==y&&ii==x){
                    bigboss.h-=10;
                    if(bigboss.h<=0){
                        for(int k=bigboss.y-2;k<=bigboss.y+2;k++){
                            for(int kk=bigboss.x-2;kk<=bigboss.x+2;kk++){
                                mapx[k][kk]=3;
                            }
                        }
                        boom=1;
                        play.coin+=1000;
                        bigboss.u=0; 
                    }
                    return;
                }
            }
        }
    }
int a1=0;
    for(int i=0;i<501;i++){
        if(a1>=en){
           return ;
        }
        if(enemy[i].dead==1){
            a1++;
            if(enemy[i].x==x&&enemy[i].y==y){
                enemy[i].h-=10;
                if(enemy[i].h>0) return;
            enemy[i].dead=0;
            for(int i=y-1;i<=y+1;i++){
                for(int ii=x-1;ii<=x+1;ii++){
                    mapx[i][ii]=3;
                }
                }           
                boom=1;
                play.enegy+=10;            
                return ;
            }
        }
        
    }
    /*}else{
        int a1=0;
        for(int i=0;i<1000;i++){
            if(ammo[i].use==1){
                a1++;
                if(ammo[i].x==x&&ammo[i].y==y){
                    ammo[i].use=0;
                    return 1;
                }
            }
        }
    }*/
    
}
bool adicent2(int x,int y,int p){
    //cout<<"xxxxxxxxxxxxxxxxxx";
    for(int i=0;i<100;i++){
        if(x>=min(dun[i].x1,dun[i].x2)&&x<=max(dun[i].x1,dun[i].x2)&&y==dun[i].y&&dun[i].u){
            if(p==dun[i].p){
                dun[i].h-=10;
            if(dun[i].h<=0){
                dun[i].u=0;
                du--;
                for(int ii=dun[i].x1;ii<=dun[i].x2;ii++){
                    mapx[y][ii]=3;
                    boom=1;
                }                
            }
            return 1;
            }           
        }
    }
    return 0;
}
void ammox(){
    int a1=0;
    for(int i=0;i<1001;i++){
        if(ammo[i].use==1){
            a1++;
            if(ammo[i].par==1||ammo[i].par==2){
                if(ammo[i].dev==0){
                mapx[ammo[i].y+1][ammo[i].x]=0;
            }else if(ammo[i].dev==1){
                mapx[ammo[i].y][ammo[i].x-1]=0;
            }else if(ammo[i].dev==2){
                mapx[ammo[i].y-1][ammo[i].x]=0;
            }else if(ammo[i].dev==3){
                mapx[ammo[i].y][ammo[i].x+1]=0;
            }
            }
            mapx[ammo[i].y][ammo[i].x]=0;
            if(ammo[i].dev==0){
                ammo[i].y--;
            }else if(ammo[i].dev==1){
                ammo[i].x++;
            }else if(ammo[i].dev==2){
                ammo[i].y++;
            }else if(ammo[i].dev==3){
                ammo[i].x--;
            }
            if(ammo[i].par==2){
                int a1=0;
                am+=2;
                for(int ii=0;ii<1000;ii++){
                    if(ammo[ii].use==0){
                        ammo[ii].use=1;
                        ammo[ii].x=ammo[i].x;
                        if(ammo[i].dev==0){
                            ammo[ii].y=ammo[i].y+1;
                        }else if(ammo[i].dev==2){
                            ammo[ii].y=ammo[i].y-1;
                        }
                        ammo[ii].par=0;
                        ammo[ii].dev=1;
                        ammo[ii].team=ammo[i].team;
                        break;
                    }
                    a1++;
                }
                for(int ii=a1;ii<1000;ii++){
                    if(ammo[ii].use==0){
                        ammo[ii].use=1;
                        ammo[ii].par=0;
                        ammo[ii].x=ammo[i].x;
                        if(ammo[i].dev==0){
                            ammo[ii].y=ammo[i].y+1;
                        }else if(ammo[i].dev==2){
                            ammo[ii].y=ammo[i].y-1;
                        }
                        ammo[ii].dev=3;
                        ammo[ii].team=ammo[i].team;
                        break;
                    }
                }
            }
            if(mapx[ammo[i].y][ammo[i].x]!=0&&mapx[ammo[i].y][ammo[i].x]!=200&&mapx[ammo[i].y][ammo[i].x]!=201&&mapx[ammo[i].y][ammo[i].x]!=202&&mapx[ammo[i].y][ammo[i].x]!=3){
                if(ammo[i].par==0){            
                if(((ammo[i].y==play.y-1&&ammo[i].x==play.x)||(ammo[i].y==play.y&&ammo[i].x==play.x-1)||(ammo[i].y==play.y+1&&ammo[i].x==play.x)||(ammo[i].y==play.y&&ammo[i].x==play.x+1))&&ammo[i].team==0){
                    play.h-=10;
                    ammo[i].use=0;
                    am--;
                }else if(mapx[ammo[i].y][ammo[i].x]==2){
                    ammo[i].use=0;
                    play.enegy++;
                    mapx[ammo[i].y][ammo[i].x]=3;
                    am--;
                    boom=1;                    
                }else if(mapx[ammo[i].y][ammo[i].x]==410&&adicent2(ammo[i].x,ammo[i].y,ammo[i].team)){                   
                    ammo[i].use=0;am--;
                }else if(ammo[i].team==1){
                    ammo[i].use=0;
                    adicent(ammo[i].x,ammo[i].y);
                    //adicent2(ammo[i].x,ammo[i].y,ammo[i].team);
                    am--;
                }}else if(ammo[i].par==1||ammo[i].par==2){ammo[i].use=0;am--;
                    for(int k=ammo[i].y-1;k<=ammo[i].y+1;k++){
                        for(int ii=ammo[i].x-1;ii<=ammo[i].x+1;ii++){
                            mapx[k][ii]=3;
                            if(((k==play.y-1&&ii==play.x)||(k==play.y&&ii==play.x-1)||(k==play.y+1&&ii==play.x)||(k==play.y&&ii==play.x+1))&&ammo[i].team==0){
                                play.h-=10;
                            }
                            adicent(ammo[i].x,ammo[i].y);
                            adicent2(ammo[i].x,ammo[i].y,ammo[i].team);                                
                        }
                    }
                    boom=1;
                }
                
                continue;
            }
            if(ammo[i].y<0||ammo[i].y>26){
                ammo[i].use=0;
                am--;
                continue;
            }
            if(ammo[i].x<0||ammo[i].x>20){
                ammo[i].use=0;
                am--;
                continue;
            }    
            if(ammo[i].use==1)
            if(ammo[i].par==0){
                mapx[ammo[i].y][ammo[i].x]=200;
            }else if(ammo[i].par==1){
                mapx[ammo[i].y][ammo[i].x]=201;
                if(ammo[i].dev==0){
                    mapx[ammo[i].y+1][ammo[i].x]=202;
                }else if(ammo[i].dev==1){
                    mapx[ammo[i].y][ammo[i].x+1]=202;
                }else if(ammo[i].dev==2){
                    mapx[ammo[i].y-1][ammo[i].x]=202;
                }else if(ammo[i].dev==3){
                    mapx[ammo[i].y][ammo[i].x-1]=202;
                }
                
            }
            else if(ammo[i].par==2){
                mapx[ammo[i].y][ammo[i].x]=203;
                if(ammo[i].dev==0){
                    mapx[ammo[i].y+1][ammo[i].x]=204;
                }else if(ammo[i].dev==1){
                    mapx[ammo[i].y][ammo[i].x+1]=204;
                }else if(ammo[i].dev==2){
                    mapx[ammo[i].y-1][ammo[i].x]=204;
                }else if(ammo[i].dev==3){
                    mapx[ammo[i].y][ammo[i].x-1]=204;
                }
                
            }
            }
        }
    }

void rock(int a1){
    for(int i=26;i>=0;i--){
        for(int ii=19;ii>=0;ii--){
            if(mapx[i][ii]==2){
                if((i+1==play.y&&ii==play.x+1)||(i+1==play.y&&ii==play.x-1)||(i+1==play.y-1&&ii==play.x)){
                    mapx[i+1][ii]=3;
                    boom=1;
                    play.dead=0;
                    continue;
                }
                mapx[i][ii]=0;
                mapx[i+1][ii]=2;
                continue;
            }
            if(mapx[i][ii]==3&&mapx[i+1][ii]==0){
                mapx[i][ii]=0;
                mapx[i+1][ii]=3; 
            }
        }
    }
    for(int i=1;i<=randx[0]%(a1+1);i++){
        mapx[0][randx[i]]=2;
    }
    ra=0;
}
void rands(){
    int a=0;
    struct timeb timeSeed;
    ftime(&timeSeed);
       srand(timeSeed.time * 1000 + timeSeed.millitm); // milli time
    unsigned int range = a - 20 + 1;
    unsigned int crand = rand() % range + 20;
    randx[ra]=crand%20;
    ra++;
}
void enemyx(int a1,int p,bool v){
    int a2=0;
    en+=a1;
    if(v==1){
        for(int i=20;i<27;i++){
            for(int ii=0;ii<20;ii++){
                mapx[i][ii]=3;
                boom=1;
            }
        }
    }
    for(int i=0;i<=500;i++){
        if(a2==a1){
            return ;
        }
        if(enemy[i].dead==0){
            enemy[i].dead=1;
            enemy[i].par=p;
            if(p==0||p==1){
                enemy[i].h=10;
                enemy[i].sp=1;
            }else if(p==4){
                enemy[i].h=10;
                enemy[i].sp=3;
            }else if(p==5){
                enemy[i].h=20;
                enemy[i].sp=5;
            }
            enemy[i].v=v;
            enemy[i].v3=v;
            if(enemy[i].v){
                enemy[i].y=26;
            }else{
                enemy[i].y=0;
            }
            enemy[i].x=20/a1*a2;
            //enemy[i].x=10;
            enemy[i].v2=randx[a2]%2;
            a2++;
        }
    }
    ra=0;
}
void enemy2(){
    int a1=0;
    for(int i=0;i<=500;i++){
        if(a1==en){
            return;
        }
        if(enemy[i].dead==1){
            enemy[i].m++;
            a1++;
            if(enemy[i].m<enemy[i].sp) continue;
            enemy[i].m=0;
            mapx[enemy[i].y][enemy[i].x]=0;
            if(enemy[i].v2){
                enemy[i].x++;
            }else{
                enemy[i].x--;
            }
            if(enemy[i].x>=26){
                enemy[i].v2=0;
            }else if(enemy[i].x<=1){
                enemy[i].v2=1;
            }
            if(enemy[i].v3){
                if(mapx[enemy[i].y-1][enemy[i].x]==2){
                    mapx[enemy[i].y-1][enemy[i].x]=3;
                    enemy[i].dead=0;
                    continue;
                }else if(mapx[enemy[i].y-1][enemy[i].x]==200||mapx[enemy[i].y-1][enemy[i].x]==201){
                    
                }
                enemy[i].y--;
            }else{
                if(mapx[enemy[i].y+1][enemy[i].x]==2){
                    mapx[enemy[i].y+1][enemy[i].x]=3;
                    enemy[i].dead=0;
                        continue;
                }
                enemy[i].y++;
            }
        if(enemy[i].y==22||enemy[i].y==6||enemy[i].y==0||enemy[i].y==26){
            if(enemy[i].v3){
                enemy[i].v3=0;
            }else{
                enemy[i].v3=1;
            }
        }
        if(enemy[i].par==0){
            if(enemy[i].v){
                mapx[enemy[i].y][enemy[i].x]=300;
            }else{
                mapx[enemy[i].y][enemy[i].x]=301;
            }
            
        }else if(enemy[i].par==1){
            if(enemy[i].v){
                mapx[enemy[i].y][enemy[i].x]=300;
            }else{
                mapx[enemy[i].y][enemy[i].x]=301;
            }
        }
        else if(enemy[i].par==4||enemy[i].par==5){
            if(enemy[i].v){
                mapx[enemy[i].y][enemy[i].x]=300;
            }else{
                mapx[enemy[i].y][enemy[i].x]=301;
            }
        }
        }
        
}
    
    }
void bplane2(){
    int a1=0;
    for(int i=0;i<9;i++){
        if(a1>bp){
            return;
        }
        if(bplane[i].u==1){
            a1++;
            mapx[bplane[i].y][bplane[i].x]=0;
            if(bplane[i].s[bplane[i].sx]==0){
                bplane[i].y++;
                bplane[i].x--;
            }else if(bplane[i].s[bplane[i].sx]==1){
                bplane[i].y++;
            }else if(bplane[i].s[bplane[i].sx]==2){
                bplane[i].y++;
                bplane[i].x++;
            }
            bplane[i].sx++;
            //mapx[bplane[i].y][bplane[i].x]=301;
            if(bplane[i].sx==17){
                bplane[i].u=0;
                for(int ii=bplane[i].y-1;ii<=bplane[i].y+1;ii++){
                    for(int iii=bplane[i].x-1;iii<bplane[i].x+1;iii++){
                        mapx[ii][iii]=3;
                        if(((ii==play.y-1&&iii==play.x)||(ii==play.y&&iii==play.x-1)||(ii==play.y+1&&iii==play.x)||(ii==play.y&&iii==play.x+1))) play.h-=50;
                    }
                }
                boom=1;
            }
        }
    }
}
void attack(){
    for(int k=0;k<=500;k++){
    if(enemy[k].dead==1){
        enemy[k].shot++;
        if(enemy[k].shot<enemy[k].sp){
            continue;
        }
        enemy[k].shot=0;
        if(enemy[k].par==4){
            if(enemy[k].v){
                xray(enemy[k].x,enemy[k].y,1,2,1,50);
            }else{
                xray(enemy[k].x,enemy[k].y,1,0,1,50);
            }
            
            xrayx=1;
            continue;
        }
        if(enemy[k].par==5){
            autodun(enemy[k].y,enemy[k].x-2,enemy[k].x+2,1);
        }
    for(int i=0;i<1001;i++){
        if(ammo[i].use==0){
            ammo[i].use=1;
            ammo[i].x=enemy[k].x;
            if(enemy[i].v){
                ammo[i].y=enemy[k].y-1;
            }else{
                ammo[i].y=enemy[k].y+1;
            }
            
            ammo[i].par=enemy[k].par;
            
            if(enemy[k].v){
                ammo[i].dev=0;
            }else{
                ammo[i].dev=2;
            }
            ammo[i].team=0;
            am++;
            break;
        }    
    }
        
    }}
        
}
void giftx(){
    int a1=0,a2=0;gi++;
    for(int i=0;i<abs(randx[0]+randx[1]+1)%(randx[0]+1)+1;i++){
        if(mapx[0][a1]==2){
            continue;
        }
        if(a1==20){
            a1=0;
        }
        a1++;
        a2++;
        if(a2>=25){
            break;
        }
    }
    for(int i=0;i<100;i++){
        if(gift[i].use==0){
            gift[i].use=1;
            gift[i].y=0;
            gift[i].x=a1;
            gift[i].par=randx[4]%5;
            break;
        }
    }
    ra=0;
}
void gift2(){
    for(int i=0;i<100;i++){
        if(gift[i].use==1){
            mapx[gift[i].y][gift[i].x]=0;
            gift[i].y++;
            if(((gift[i].x==play.x&&gift[i].y==play.y)||(gift[i].x==play.x-1&&gift[i].y==play.y)||(gift[i].x==play.x+1&&gift[i].y==play.y)||(gift[i].x==play.x&&gift[i].y==play.y+1)||(gift[i].x==play.x-1&&gift[i].y==play.y+1)||(gift[i].x==play.x+1&&gift[i].y==play.y+1))&&gift[i].use){
            gift[i].use=0;
            if(gift[i].par==0){
                play.h+=20;
                speak(0,1);
            }else if(gift[i].par==1){
                play.coin+=100;
                speak(0,0);
            }else if(gift[i].par==2){
                play.ammo+=100;
                speak(0,2);
            }
        }
        if(gift[i].y>=27){
            gift[i].use=0;
        }
        }
        
    }
}
void bossx(){
    mapx[boss.y][boss.x]=0;
    mapx[boss.y][boss.x+1]=0;
    mapx[boss.y][boss.x-1]=0;
    mapx[boss.y+1][boss.x]=0;
    if(boss.y<7){
        boss.y++;
        return;
    }
    if(boss.x>play.x){
        boss.x--;
    }else if(boss.x<play.x){
        boss.x++;
    }
    if(abs(boss.x-play.x)<3){
    if(boss.par==0){
        for(int k=-1;k<=1;k++){
            for(int i=0;i<1001;i++){
                if(ammo[i].use==0){
                    ammo[i].use=1;
                    ammo[i].x=boss.x+k;
                    if(k==0){
                        ammo[i].y=boss.y;
                    }else{
                        ammo[i].y=boss.y-1;    
                    }                                    
                    ammo[i].par=0;
                    ammo[i].dev=2;    
                    ammo[i].team=0;
                        am++;
                        break;
                }    
            }
        }    
    }else if(boss.par==1){
            for(int i=0;i<1001;i++){
                if(ammo[i].use==0){
                    ammo[i].use=1;
                    ammo[i].x=boss.x;
                    ammo[i].y=boss.y+1;                                    
                    ammo[i].par=1;
                    ammo[i].dev=2;    
                    ammo[i].team=0;
                    am++;
                    break;
                    }    
                }
    }else if(boss.par==2&&abs(boss.x-play.x)<2){       
        for(int i=0;i<1001;i++){
            if(ammo[i].use==0){
                ammo[i].use=1;
                ammo[i].x=boss.x;
                ammo[i].y=boss.y+1;                                    
                ammo[i].par=2;
                ammo[i].dev=2;    
                ammo[i].team=0;
                am++;
                break;  
            }
        }    
    }else if(boss.par==3){
        int a1=0;
        for(int k=-1;k<=1;k++){
            for(int i=a1;i<1001;i++){
                if(ammo[i].use==0){
                    ammo[i].use=1;
                    ammo[i].x=boss.x+k;
                    ammo[i].y=boss.y+1;                                   
                    ammo[i].par=1;
                    ammo[i].dev=2;    
                    ammo[i].team=0;
                    am++;
                    break;
                } 
                a1++;   
            }
        }
    }else if(boss.par==4&&boss.x==play.x){
        xray(boss.x,boss.y,1,0,1,5);
        xrayx=1;
    }
    }
    
}
bool dfs(int s,int par,int x,int y){
    if((y==play.y&&x==play.x)||(y==play.y&&x==play.x-1)||(y==play.y&&x==play.x+1)){
        return 1;
    }
    if(y>20||x<0||x>=20){
        return 0;
    }
    for(int i=0;i<3;i++){
        if(i==1){
            if(mapx[y+1][x]!=3){
                bplane[par].s[s]=i;
                if(dfs(s+1,par,x,y+1)){
                    return 1;
                }
            }
        }
        if(i==0){
            if(mapx[y+1][x-1]!=3){
                bplane[par].s[s]=i;
                if(dfs(s+1,par,x-1,y+1)){
                    return 1;
                }
            }
        }
        if(i==2){
            if(mapx[y+1][x+1]!=3){
                bplane[par].s[s]=i;
                if(dfs(s+1,par,x+1,y+1)){
                    return 1;
                }
            }
        }
    }
}
void bplanex(int a1){
    bool ok=0;
    for(int i=0;i<a1;i++){
        ok=0;
        for(int k=0;k<30;k++){
            if(bplane[k].u){
                continue;
            }
            for(int ii=0;ii<20;ii++){
                if(dfs(0,k,ii,0)){
                    bplane[k].h=50;
                    bplane[k].y=0;
                    bplane[k].x=ii;
                    bplane[k].u=1;
                    bplane[k].sx=0;
                    bp++;
                    ok=1;
                    break;
                }else{
                    memset(bplane[k].s,0,sizeof(bplane[k].s));
                }
            }    
            if(ok){
                break;
            }
        }
        
        
    }
}
int xa[3];
void clearshop(int a1,int a2,int a3,int ax){
    xa[0]=a1;
    xa[1]=a2;
    xa[2]=a3;
    clear();
    DWORD written;
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD startPos = {0, 0};
    SetConsoleCursorPosition(hConsole, startPos);
    cout<<"      小型商店"<<endl;
    cout<<"#                     #"<<endl;
    cout<<"#                     #"<<endl;
    cout<<"#                     #"<<endl;
    cout<<"#                     #"<<endl;
    cout<<"#                     #"<<endl;
    cout<<"#                     #"<<endl;
    cout<<"#                     #"<<endl;
    cout<<"#                     #"<<endl;
    cout<<"#                     #"<<endl;
    cout<<"#                     #"<<endl;
    cout<<"代码 "<<xa[0]<<" "<<xa[1]<<" "<<xa[2];
    startPos = {3, 5};
    SetConsoleCursorPosition(hConsole, startPos);
    
    for(int i=0;i<3;i++){
        for(int ii=0;ii<3;ii++){
            startPos = {3+7*i, 5+ii};
            SetConsoleCursorPosition(hConsole, startPos);
            for(int iii=0;iii<3;iii++){
                cout<<thing[xa[i]-1][ii][iii];
            }
        }
        startPos = {2+i*7, 8};
        SetConsoleCursorPosition(hConsole, startPos);
        if(xa[i]==1){
            cout<<"修复+";
        }else if(xa[i]==2){
            cout<<"火箭";
        }else if(xa[i]==3){
            cout<<"弹药+";
        }else if(xa[i]==4){
            cout<<"X射线";
        }else if(xa[i]==5){
            cout<<"冲刺-Z";
        }
        startPos = {2+i*7, 9};
        SetConsoleCursorPosition(hConsole, startPos);
        cout<<price[xa[i]-1]<<"金币"; 
    }
    if(ax==1){
        COORD startPos = {4, 10};
        SetConsoleCursorPosition(hConsole, startPos);
    }else if(ax==2){
        COORD startPos = {10, 10};
        SetConsoleCursorPosition(hConsole, startPos);
    }else if(ax==3){
        COORD startPos = {16, 10};
        SetConsoleCursorPosition(hConsole, startPos);
    }
    cout<<"^";
    startPos = {1, 12};
    SetConsoleCursorPosition(hConsole, startPos);
    cout<<"coin:"<<play.coin;
    startPos = {1, 13};
    SetConsoleCursorPosition(hConsole, startPos);
    cout<<"用 A D 选择,空格购买,esc退出";
}
void xray(int x,int y,bool p,int dev,bool io,int h){
    if(io){
        if(dev==1){
            if((play.y==y||play.y-1==y||play.y+1==y)&&p==1){
                play.h-=50;    
            }
            for(int i=x;i<20;i++){
                if(!p)adicent(i,y);                
                mapx[y][i]=206;
            }
        }else if(dev==0){
            if((play.x==x||play.x-1==x||play.x+1==x)&&p==1){
                play.h-=50;    
            }
            for(int i=y;i<26;i++){
                if(!p)adicent(i,x);
                mapx[i][x]=205;
            }
        }else if(dev==3){
            if((play.y==y||play.y-1==y||play.y+1==y)&&p==1){
                play.h-=50;    
            }
            for(int i=x;i>=0;i--){
                if(!p)adicent(i,y);                
                mapx[y][i]=206;
            }
        }else if(dev==2){
            if((play.x==x||play.x-1==x||play.x+1==x)&&p==1){
                play.h-=50;    
            }
            for(int i=y;i>=0;i--){
                if(!p)adicent(i,x);
                mapx[i][x]=205;
            }
        }
    }else{
        for(int i=0;i<27;i++){
            for(int ii=0;ii<20;ii++){
                if(mapx[i][ii]==205||mapx[i][ii]==206){
                    mapx[i][ii]=3;
                }
                boom=1;
            }
        }
    }
}
int xa2[3];
int buy(int a2,int a3,int a4,int a1){
    a1--;
    xa2[0]=a2;
    xa2[1]=a3;
    xa2[2]=a4;
    if(xa2[a1]==1){
        if(play.coin>=200&&play.bagnum<3){
        play.coin-=200;    
        play.bag.push_back(xa2[a1]);
        play.bagnum++;
        return 1;    
    }else{
        return 0;
    } 
    }
    if(xa2[a1]==2){
        if(play.coin>=400&&play.bagnum<3){
        play.coin-=400;
        play.bag.push_back(xa2[a1]);
        play.bagnum++;
            return 1;
    }else return 0;
    }
    if(xa2[a1]==3){
        if(play.coin>=100&&play.bagnum<3){
        play.coin-=100;
        play.bag.push_back(xa2[a1]);
        play.bagnum++;                        
    }else return 0;
    }
    if(xa2[a1]==4){
        if(play.coin>=300&&play.bagnum<3){
        play.coin-=300;
        play.bag.push_back(xa2[a1]);
        play.bagnum++;                        
    }else return 0;
    }
    if(xa2[a1]==5){
        if(play.coin>=1000&&play.bagnum<3){
        play.coin-=1000;
        play.bag.push_back(xa2[a1]);
        play.bagnum++;                        
    }else return 0;
    }
        
}
void shop(){
    clear();
    int a1,a2=1,a3=randx[4]%5+1,a4=randx[5]%5+1,a5=randx[6]%5+1;
    clearshop(a3,a4,a5,a2);
    while(1){
        if(_kbhit()){
            a1=getch();
            if(a1=='a'&&a2-1>0){
                a2--;
            }
            if(a1=='d'&&a2+1<4){
                a2++;
            }
            if(a1==27){
                break;
            }
            if(a1==32){
                buy(a3,a4,a5,a2);
            }
            clearshop(a3,a4,a5,a2);
        }    
    }
    
    clear();
    screen();
    }
void baguse(int a1){
    a1--;
    if(play.bag.begin()+a1>play.bag.end()){
        return;
    }
    if(play.bag[a1]==1){
        play.h+=100;
    }else if(play.bag[a1]==2){
        am+=3;
        for(int i=play.x-1;i<=play.x+1;i++){
            for(int ii=0;ii<500;ii++){
                if(ammo[ii].use==0){
                    ammo[ii].use=1;
                    ammo[ii].y=27;
                    ammo[ii].x=i;
                    ammo[ii].dev=0;
                    ammo[ii].team=0;
                    ammo[ii].par=1;
                    break;
                }
            }            
        }
    }else if(play.bag[a1]==3){
        play.ammo+=100;
    }else if(play.bag[a1]==4){
        for(int i=play.x-1;i<=play.x+1;i++){
            for(int ii=play.y;ii>=0;ii--){
                if(mapx[ii][i]==2){
                    mapx[ii][i]=3;
                    
                }
            }
        }
        boom=1;
    }else if(play.bag[a1]==5){
        zp=1;
        play.h=1000;
        zt=3000;
    }
    play.bag.erase(play.bag.begin()+a1);
}
void bigbossx(){
    for(int i=bigboss.y-2;i<=bigboss.y+2;i++){
        for(int ii=bigboss.x-2;ii<=bigboss.x+2;ii++){
            mapx[i][ii]=0;
        }
    }
    if(bigboss.x==0&&bigboss.y==0){
        for(int i=0;i<10;i++){
            for(int ii=0;ii<20;ii++){
                if(mapx[i][ii]==2){
                    mapx[i][ii]=3;
                }
            }
        }
        bigboss.x=10;
        bigboss.y=7;
        return ;
    }
    if(bigboss.x>play.x&&bigboss.x-4>=0){
        bigboss.x--;
    }else if(bigboss.x<play.x&&bigboss.y+4<20){
        bigboss.x++; 
    }
    if(bigboss.t<=0){
        bigboss.t=5; 
        int a1=randx[0]%3;
        if(a1==0){
            if(bigboss.par==0){
                enemyx(5,0,0);
            }else if(bigboss.par==1){
                enemyx(3,5,0);
            }          
        }
        else if(a1==1){
            if(bigboss.par==0){            
            int a2=0;
            am+=3;
            for(int k=-2;k<=2;k++){
                for(int i=a2;i<1000;i++){
                    if(ammo[i].use==0){
                        ammo[i].use=1;
                        ammo[i].par=1;
                        ammo[i].dev=2;
                        ammo[i].team=0;
                        ammo[i].x=bigboss.x+k;
                        ammo[i].y=bigboss.y+3;
                        break;
                    }
                    a2++;
                }
            }
            }else if(bigboss.par==1){
                autodun(bigboss.y+3,bigboss.x-2,bigboss.x+2,1);
            }
        }else if(a1==2){
            //bplanex(1);
        }
    }else{
        bigboss.t--;
    }
    if(abs(bigboss.x-play.x)<=3){
        if(bigboss.par==0){        
        am+=5;
        int a2=0;
        for(int k=-1;k<=1;k++){        
        for(int i=a2;i<1000;i++){
            if(ammo[i].use==0){
                ammo[i].use=1;
                if(k==0){
                    ammo[i].par=1;
                    ammo[i].y=bigboss.y+3;
                }else{
                    ammo[i].par=0;
                    ammo[i].y=bigboss.y+2;
                }        
                ammo[i].dev=2;
                ammo[i].team=0;
                ammo[i].x=bigboss.x+k;
                
                break;
            }
            a2++;
        }}}else{
            for(int i=bigboss.x-2;i<=bigboss.x+2;i+=2){
                xray(i,bigboss.y+1,1,0,1,10);
            }
            xrayx=1;
        }
    }
    
}
void autodun(int y,int x1,int x2,int p){
    for(int i=0;i<100;i++){
        if(!dun[i].u){
            dun[i].u=1;
            dun[i].x1=x1;
            dun[i].x2=x2;
            dun[i].y=y;
            dun[i].p=p;
            dun[i].h=250;
            du++;
            return;
        }
    }
}
void gameloop3() {
    cout << "选择关卡";
    cout<<"第1关"<<endl; 
    cout<<"第2关"<<endl; 
    cout<<"使用数字键选择"<<endl; 
    while(1) {
        if(_kbhit()) {
            int a1 = getch();
            if(a1 == '1') {
                mis = 1;
                clear();
                screen();
                return;
            }
            if(a1 == '2') {
                mis = 2;
                play.enegy = 100;
                clear();
                screen();
                return;
            }
        }
    }
}
void gameloop2(){
    clear();
    color(2);
    cout<<"       ********************************"<<endl;
    cout<<"         ###   #    ##   #    #  ####"<<endl;
    cout<<"         #  #  #   #  #  ##   #  #"<<endl;
    cout<<"         ###   #   ####  # #  #  #"<<endl;
    cout<<"         #     #   #  #  #  # #  ####"<<endl;
    cout<<"         #     #   #  #  #   ##  #"<<endl;
    cout<<"         #     ##  #  #  #    #  ####"<<endl;
    cout<<"       ********************************"<<endl;
    color(14);
    cout<<"               &    太空战斗    &"<<endl;    
    cout<<"           & 作者: chonggg2团队 &    "<<endl;
    color(4);
    cout<<"     欢迎 "<<playtext.name<<endl;
    color(1);
    cout<<"     金币:"<<playtext.coins<<endl;
    color(5);
    cout<<"     最高分:"<<playtext.highScore<<endl;
    color(15);
    cout<<"     使用'1' '2' '3'选择"<<endl;
    cout<<"     1.开始游戏"<<endl;
    cout<<"     2.修改密码"<<endl;
    cout<<"     3.保存/加载游戏"<<endl;
    cout<<"     4.特性"<<endl;
    cout<<"     5.设置"<<endl;

    cout<<">>想要上信息课打游戏无忧?登录csdn官网,搜索chonggg2,"<<endl;
    cout<<"获取免费脱控软件。" <<endl<<"www.csdn.net";
}


void gameloop() {
    gameloop2();
    while(1) {
        if(_kbhit()) {
            int a1 = getch();
            if(a1 == '1') {
                clear();
                gameloop3();
                return;
            }
            if(a1 == '2') {
                clear();
                string x1;
                cout << "请输入旧密码" << endl;
                cin >> x1;
                if(x1 == playtext.password) {
                    cout << "请输入新密码" << endl;
                    cin >> x1;
                    playtext.password = x1;
                    savePlayerData(playtext);
                }
            }
            if(a1 == '3') {
                clear();
                cout << "1. 保存游戏" << endl;
                cout << "2. 加载游戏" << endl;
                cout << "3. 返回菜单" << endl;
                
                while(true) {
                    if(_kbhit()) {
                        int choice = getch();
                        if(choice == '1') {
                            savePlayerData(playtext);
                            cout << "游戏保存成功!" << endl;
                            Sleep(1000);
                            break;
                        }
                        else if(choice == '2') {
                            if(loadPlayerData(playtext)) {
                                cout << "游戏加载成功!" << endl;
                                Sleep(1000);
                            } else {
                                cout << "未找到存档文件!" << endl;
                                Sleep(1000);
                            }
                            break;
                        }
                        else if(choice == '3') {
                            break;
                        }
                    }
                }
            }
            if(a1 == '4') {
                bool a78 = 0;
                cout << "1. 我的特性" << endl;
                cout << "2. 商店" << endl;
                cout << "3. 返回菜单" << endl;
                while(true) {
                    if(_kbhit()) {
                        int choice = getch();
                        if(choice == '1') {
                            clear();
                            for(int i = 0; i < 20; i++) {
                                if(ci[i]) {
                                    cout << "        ";
                                    if(i == 0) {
                                        cout << i << " . 量子飞翼 : 散射子弹" << endl;
                                    } else if(i == 1) {
                                        cout << i << " . 两肋插刀 : 向前后发射子弹" << endl;
                                    } else if(i == 2) {
                                        cout << i << " . 盆满钵满 : 收集金币速度加快" << endl;
                                    } else if(i == 3) {
                                        cout << i << " . 坚如磐石 : 初始血量为800" << endl;
                                    } 
                                }
                            }
                            cout << "按任意键退出";
                            while(1) {
                                if(_kbhit()) {
                                    a78 = 1;
                                    break;
                                }
                            }
                        }
                        else if(choice == '2') {
                            clear();
                            for(int i = 0; i < 20; i++) {
                                if(i == 0) {
                                    cout << i << " . 量子飞翼 : 散射子弹";
                                } else if(i == 1) {
                                    cout << i << " . 两肋插刀 : 向前后发射子弹";
                                } else if(i == 2) {
                                    cout << i << " . 盆满钵满 : 收集金币速度加快";
                                } else if(i == 3) {
                                    cout << i << " . 坚如磐石 : 初始血量为800";
                                }
                                if(cs[i] != 0) {
                                    cout << "     " << cs[i] << "$" << endl;
                                }
                            }
                            cout << "输入要购买的商品(输入-1返回) ";
                            int a78;
                            cin >> a78;
                            if(a78 == -1 || a78 < 0 || a78 > 20) {
                                break;
                            }
                            if(play.coin >= cs[a78]) {
                                ci[a78] = 1;
                                play.coin -= cs[a78];
                                cout << "已购买";
                                savePlayerData(playtext);
                            } else {
                                cout << "金币不足  还需要" << cs[a78] - play.coin << "$";
                                cout << play.coin;
                            }
                            Sleep(1000);
                            break;
                        }
                        else if(choice == '3') {
                            break;
                        }
                    }
                    if(a78) {
                        break;
                    }
                }
            }
            if(a1 == '5') {
                cout << "1. 改变速度" << endl;
                while(1) {
                    if(_kbhit()) {
                        int a91 = getch();
                        if(a91 == '1') {
                            clear();
                            cout << "速度:";
                            if(speed == 1) {
                                cout << "慢速";
                            } else {
                                cout << "快速";
                            }
                            cout << endl << "使用空格键改变速度,按ESC退出";
                            while(1) {
                                if(_kbhit()) {
                                    int a13 = getch();
                                    if(a13 == ' ') {
                                        if(speed == 1) {
                                            speed += 1;
                                        } else if(speed == 2) {
                                            speed--;
                                        }
                                        clear();
                                        cout << "速度:";
                                        if(speed == 1) {
                                            cout << "慢速";
                                        } else {
                                            cout << "快速";
                                        }
                                        cout << endl << "使用空格键改变速度,按ESC退出";
                                    }
                                    if(a13 == 27) {
                                        break;
                                    }
                                }    
                            }
                            break;
                        }
                        break;                    
                    }
                }
            }
            gameloop2();
        }
    }
}

bool isFirstTimePlayer() {
    std::ifstream inFile("player_data.dat", std::ios::binary);
    return !inFile.good(); // 文件不存在返回true
}

// 初始化新玩家存档
void initializeNewPlayer() {
    PlayerData newPlayer;
    
    clear();
    color(14);
    cout << "====================================" << endl;
    cout << "       欢迎新飞行员!" << endl;
    cout << "====================================" << endl;
    color(15);
    
    // 获取玩家名称
    cout << "输入你的呼号(最多15字符): ";
    getline(cin, newPlayer.name);
    if(newPlayer.name.empty()) {
        newPlayer.name = "未知飞行员";
    } else if(newPlayer.name.size() > 15) {
        newPlayer.name = newPlayer.name.substr(0, 15);
    }
    
    // 设置初始密码
    color(11);
    cout << "\n设置你的安全码(最多12字符): ";
    getline(cin, newPlayer.password);
    if(newPlayer.password.empty()) {
        newPlayer.password = "123456";
    } else if(newPlayer.password.size() > 12) {
        newPlayer.password = newPlayer.password.substr(0, 12);
    }
    
    // 初始化游戏数据
    newPlayer.coins = 1000;
    newPlayer.highScore = 0;
    
    // 保存初始数据
    savePlayerData(newPlayer);
    
    // 显示欢迎信息
    color(10);
    cout << "\nWelcome aboard, " << newPlayer.name << "!" << endl;
    cout << "Your starting credits: 1000" << endl;
    color(15);
    Sleep(2000);
    
    // 将新玩家数据赋给当前游戏
    playtext = newPlayer;
}
void startgame(){
    play.x=10;
    play.y=17;
    play.h=100;
    play.sp;    
    play.par=0;
    play.dead=1;
    play.v;
    play.coin=1000;
    play.ammo=100;
    play.enegy=100;
    play.bag.clear();
    play.bagnum=0;
    memset(ammo,0,sizeof(ammo));
    memset(enemy,0,sizeof(enemy));
    memset(gift,0,sizeof(gift));
    memset(bplane,0,sizeof(bplane));
    memset(dun,0,sizeof(dun));
    boss.x=0;
    boss.y=0;
    boss.par=0;
    boss.u=0;
    boss.h=0;
    bigboss.u=0;
    am=0;
    boom=0;
    boss1n=0;
    bp=0;
    en=0;
    gi=0;
    memset(mapx,0,sizeof(mapx));
    ra=0;
    memset(randx,0,sizeof(randx));
    tell=0;
    tx=0;
    tx1=0;
    zp=0;
    zt=0;
    play.coin=playtext.coins;
    for(int i = 0; i < 20; i++) {
        ci[i] = playtext.ci[i];
    }
    
    if(ci[3]) {
        play.h = 800;
    }
}

int main(){
    int t1=0,t2=0,t3=0,t4=0,t5=0,t6=0,t7=0,t8=0,ts=1;
    int ri;
    
    if(isFirstTimePlayer()) {
        initializeNewPlayer();
        savePlayerData(playtext);
    } else {
        // 加载已有存档
        if(!loadPlayerData(playtext)) {
            // 如果加载失败(如文件损坏),初始化新玩家
            cout << "存档损坏,将创建新存档..." << endl;
            Sleep(1500);
            // 删除损坏的文件
            remove("player_data.dat"); 
            clear();
            initializeNewPlayer();
            savePlayerData(playtext);
        }else{
            string x2;
            cout<<"输入密码:";
            cin>>x2;
            if(x2==playtext.password){
                cout<<"欢迎"<<endl;
                Sleep(1000);
                clear();
            }else{
                cout<<"wrong password!";
                exit(0);
            }
        }
    }
    gameloop();
    startgame();
    screen();
    speak(0,7);
    //play.coin=1e9;
    while(1){        
        if(_kbhit()){
            for(int i=play.y-1;i<=play.y+1;i++){
                for(int ii=play.x-1;ii<=play.x+1;ii++){
                    if((i==play.y-1&&ii==play.x-1)||(ii==play.x+1&&i==play.y-1)){
                        continue;
                    }
                    mapx[i][ii]=0;
                }
            }
            int a1=getch();
            if((a1=='a'||a1=='A')&&play.x-2>=1){
                if(mapx[play.y][play.x-2]==2||mapx[play.y+1][play.x-2]==2){
                    play.dead=0; 
                }
                play.x--;
            }
            if((a1=='d'||a1=='D')&&play.x+2<=20){
                if(mapx[play.y][play.x+2]==2||mapx[play.y+1][play.x+2]==2){
                    play.dead=0; 
                }
                play.x++;
            }
            if(a1=='w'||a1=='W'){
                play.v=1;
            }
            if(a1=='s'||a1=='S'){
                play.v=0;
            }
            if(a1=='P'||a1=='p'){
                int a11=0;
                while(a11!='p'||a11!='P'){
                    if(_kbhit()){
                        a11=getch();
                        if(a11=='p'||a11=='P'){
                            break;
                        }
                    }
                }
            }
            if(a1>='1'&&a1<='3'){
                baguse(a1-'0');
            }
            if(a1=='t'||a1=='T'){
                string a2;
                speak(0,-2);
                HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
                COORD startPos = {0, 28};
                SetConsoleCursorPosition(hConsole, startPos);
                cin>>a2;
                if(a2=="time"){
                    speak(0,-2);
                    int a3;
                    cin>>a3;
                    tx=abs(a3);
                }else if(a2=="bang"){
                    memset(mapx,0,sizeof(mapx));
                }else if(a2=="enemy"){
                    speak(0,-2);
                    int a3,a4;
                    cin>>a3>>a4;
                    enemyx(a3,0,a4);
                }else if(a2=="fill"){
                    speak(0,-2);
                    int a3,a4,a5,a6,a7;
                    cin>>a3>>a4>>a6>>a7>>a5;
                    for(int i=min(a3,a6);i<max(a3,a6);i++){
                        for(int ii=min(a4,a7);ii<max(a4,a7);ii++){
                            mapx[i][ii]=a5;
                        }
                    }
                }else if(a2=="rock"){
                    speak(0,-2);
                    int a3;
                    cin>>a3;
                    ri=a3;
                }else if(a2=="find"){
                    speak(0,-2);
                    int a3,a4;
                    cin>>a3>>a4;
                    speak(0,-2);
                    cout<<mapx[a3][a4];
                    Sleep(2000);
                }
                speak(0,-2);
            }
            if(a1==32){
                
                if(play.ammo>0){
                    play.ammo--;
                    int x1;
                    for(int i=0;i<1001;i++){
                        if(ammo[i].use==0){
                            ammo[i].use=1;
                            ammo[i].x=play.x;
                            if(play.v){
                                ammo[i].y=play.y-2;
                                ammo[i].dev=0;
                            }else{
                                ammo[i].y=play.y+1;
                                ammo[i].dev=2;
                            }                    
                            ammo[i].par=play.par;                
                            ammo[i].team=1;
                            x1=i;
                            break;
                        }
                    }
                    if(ci[1]){
                        for(int i=x1+1;i<1001;i++){
                        if(ammo[i].use==0){
                            ammo[i].use=1;
                            ammo[i].x=play.x;
                            ammo[i].y=play.y+1;
                            ammo[i].dev=2;                    
                            ammo[i].par=0;                
                            ammo[i].team=1;
                            x1=i;
                            am++;
                            break;
                        }}
                    }
                    if(play.par==1||ci[0]){
                        for(int i=x1+1;i<1001;i++){
                        if(ammo[i].use==0){
                            ammo[i].use=1;
                            ammo[i].x=play.x-1;
                            if(play.v){
                                ammo[i].y=play.y-1;
                                ammo[i].dev=0;
                            }else{
                                ammo[i].y=play.y+1;
                                ammo[i].dev=2;
                            }                    
                            ammo[i].par=0;                
                            ammo[i].team=1;
                            x1=i;
                            am++;
                            break;
                        }
                        }
                        for(int i=x1+1;i<1001;i++){
                        if(ammo[i].use==0){
                            ammo[i].use=1;
                            ammo[i].x=play.x+1;
                            if(play.v){
                                ammo[i].y=play.y-1;
                                ammo[i].dev=0;
                            }else{
                                ammo[i].y=play.y+1;
                                ammo[i].dev=2;
                            }                    
                            ammo[i].par=0;                
                            ammo[i].team=1;
                            am++;
                            break;
                        }
                        }
                    }            
                am++;
                t3=500;
                }else{
                    
                }
                
            }            
            
        }
        tx1=tx/100;
        t1+=speed;
        if(boom){
            t2+=speed;
        }
        if(tell){
            t7+=speed;
        }
        if(t7>=200){
            t7=0;
            tell=0;
            speak(0,-2);
        }
        if(t1>=50&&gi>0){
            gift2();
        }
        if(tx==200){
            speak(0,9);
        }
        if(tx==400){
            speak(0,10);
        }
        if(tx==600){
            speak(0,11);
        }
        if(tx==800){
            speak(0,12);
        }
        if(tx==1000){
            speak(0,13);
        }
        if(tx==1200){
            speak(0,14);
        }
        if(mis==1){
            if(tx==100){
                shop();
                bplanex(1);
                ri=5;
            }
            if(tx==1000){
                ri=0;
            }
            if(tx==2500){
                ri=5;
            }
            if(tx==3700){
                ri=0;
            }
            if(tx==5000){
                ri=3;
            }
            if(tx==1700){
                speak(0,5);
                enemyx(2,0,0);
            }
            if(tx==2500){
                speak(0,8);
            }
            if(tx==4000){
                speak(0,5);
                enemyx(5,0,0);
            }
            if(tx==5000){
                speak(0,5);
                enemyx(8,0,1);
            }
            if(tx==7500){
                shop();
            }
            if(tx==7000){               
                ri=0;
                enemyx(5,0,0);
                boss.u=1;
                boss1n=1;
                boss.par=0;
                boss.y=0;
                boss.x=10;
                boss.h=100;
            }
            if(tx==9000){
                ri=2;
            }
            if(tx==10000){
                ri=5;
            }
            if(tx==10700){
                ri=0;
            }
            if(tx==11500){
                shop();
            }
            if(tx==11000){               
                bplanex(1);
                speak(0,5);
                enemyx(12,0,1);
                boss.u=1;
                boss1n=1;
                boss.par=1;
                boss.y=0;
                boss.x=10;
                boss.h=150;
            }
            if(tx==13000){
                ri=3;
            }
            if(tx==14000){
                ri=5;
            }
            if(tx==15000){
                ri=0;
            }
            if(tx==15500){
                speak(0,5);
                enemyx(8,0,1);
            }
            if(tx==16500){
                speak(0,5);
                enemyx(8,0,0);
            }
            if(tx==17000){
                ri=3;
            }
            if(tx==17600){
                bplanex(1);
            }
            if(tx==17700){
                bplanex(1);
            }
            if(tx==18000){
                ri=0;
            }
            if(tx==18500){
                shop();
                enemyx(10,0,0);
                boss.u=1;
                boss1n=1;
                boss.par=0;
                boss.y=0;
                boss.x=10;
                boss.h=250;
            }
            if(tx==19000){
                speak(0,5);
                enemyx(5,0,1);
            }
            if(tx==20000){
                ri=5;
            }
            if(tx==22000){
                bplanex(1);
                speak(0,5);
                enemyx(10,0,1);
            }
            if(tx==24000){
                ri=0;
            }
            if(tx==25000){
                shop();
                enemyx(8,0,1);
                boss.u=1;
                boss1n=1;
                boss.par=1;
                boss.y=0;
                boss.x=10;
                boss.h=300;
            }
            if(tx==27000){
                ri=1;
            }
            if(tx>=28000&&tx<29800&&tx%200==0){
                speak(0,(tx-28000)/200+100);
            }
            if(tx==30000){
                bigboss.u=1;
                bigboss.h=1000;
                bigboss.x=0;
                bigboss.y=0;
                bigboss.par=0;
                bigboss.t=0;
            } 
            if(t1>=50){
                t1=0;
                rock(ri);
            }
        }else if(mis==2){
            if((tx==100)){
                enemyx(1,5,1);
            }
            if(tx==200){
                shop();
                ri=15;
            }
            if(tx==200){
                speak(0,15);
            }
            if(tx==400){
                speak(0,16);
            }
            if(tx==1000){
                speak(0,5);
                enemyx(5,0,1);
            }
            if(tx==2000){
                speak(0,5);
                enemyx(1,1,1);
            }
            if(tx==3000){
                speak(0,5);
                enemyx(5,1,1);
            }
            if(tx==4000){
                speak(0,5);
                enemyx(5,1,1);
            }
            if(tx==5000){
                ri=10;
                speak(0,5);
                enemyx(5,1,1);
            }
            if(tx==6000){
                ri=5;
                speak(0,5);
                enemyx(5,1,1);
            }
            if(tx==6500){
                ri=0;
            }
            if(tx==7000){
                shop();
                enemyx(2,1,1);
                boss.u=1;
                boss1n=1;
                boss.par=2;
                boss.y=0;
                boss.x=10;
                boss.h=100;
            }
            if(tx==7500){
                speak(0,5);
                enemyx(5,1,1);
            }
            if(tx==8000){
                speak(0,5);
                enemyx(2,5,1);
                enemyx(5,0,1);
            }
            if(tx==8500){
                speak(0,5);
                enemyx(5,1,1);
            }
            if(tx==9000){
                ri=2;
            }
            if(tx==10000){
                ri=0;
                shop();
                enemyx(2,1,0);
                enemyx(3,5,0);
                boss.u=1;
                boss1n=1;
                boss.par=2;
                boss.y=0;
                boss.x=10;
                boss.h=300;
            }
            if(tx==11000){
                ri=5;
            }
            if(tx==12000){
                ri=15;
            }
            if(tx==13000){
                ri=5;
            }
            if(tx==13500){
                speak(0,5);
                enemyx(10,1,1);
            }
            if(tx==14000){
                speak(0,5);
                enemyx(10,0,1);
                enemyx(3,5,1);
            }
            if(tx==15000){
                speak(0,5);
                enemyx(10,0,0);
                enemyx(3,5,0);
            }
            if(tx==16000){
                speak(0,5);
                enemyx(3,4,1);
            }
            if(tx==17000){
                ri=15;
            }
            if(tx==18000){
                ri=5;
            }
            if(tx==19000){
                ri=10;
                shop();
                boss.u=1;
                boss1n=1;
                boss.par=4;
                boss.y=0;
                boss.x=10;
                boss.h=250;
            }
            if(tx==20000){
                speak(0,5);
                enemyx(3,4,1);
                enemyx(3,5,1);
            }
            if(tx==21000){
                ri=15;
            }
            if(tx==22000){
                ri=5;
            }
            if(tx==23000){
                ri=0;
            }
            if(tx==23500){
                speak(0,5);
                enemyx(10,0,1);
                enemyx(3,5,1);
                enemyx(10,0,0);
                enemyx(3,5,0);
            }
            if(tx==24500){
                ri=5;
                shop();
                boss.u=1;
                boss1n=1;
                boss.par=3;
                boss.y=0;
                boss.x=10;
                boss.h=700;
            }
            if(tx==26000){
                ri=15;
            }
            if(tx==30000){
                play.enegy=1e9;
                bigboss.u=1;
                bigboss.h=1500;
                bigboss.x=0;
                bigboss.y=0;
                bigboss.par=1;
                bigboss.t=0;
            }
            if(t1>=50){
                play.ammo=1e5;
                play.enegy-=1;
                t1=0;
                rock(ri);
            }
        }
        if(tx>=30000&&bigboss.h<=0){
                Sleep(5000);
                clear();
                cout<<"你赢了!"<<endl;
                Sleep(3000);
                playtext.coins=play.coin;
                startgame();
                gameloop();                
            }
        
        if(en>=0){
            t4+=speed;
            t5+=speed;
        }
        if(t4>=10){
            t4=0;
            enemy2();
            if(bp>0){
                bplane2();
            }
            
        }
        if(t5%26==0){
            if(bigboss.u){
                bigbossx();
            }
        }
        if(t5>=50){
            t5=0;
            attack();
            if(boss1n){
                bossx();
            }           
        }
        if(zp==1){
            play.par=1;
            zt-=speed;
        }
        if(zt<=0&&zp!=0){
            zp=0;
            play.par=0;
            play.h=150;
        }
        if(t2>=100){
            t2=0;
            boom=0;
            for(int i=0;i<27;i++){
                for(int ii=0;ii<20;ii++){
                    if(mapx[i][ii]==3){
                        mapx[i][ii]=0;
                    }
                }
            }
        }
        if(am>0){
            t3+=speed;
        }
        if(t3>=10){
            t3=0;
            ammox();
        }
        t1+=speed;
        rands();        
        if(xrayx){
            t8+=speed;
        }
        if(t8>=10){
            xray(0,0,0,0,0,0);
            boom=1;
        }
        if(t6>=50){
            t6=0;
            if(play.h<150){
                play.h++;
            }
            
        }        
        t6+=speed;        
        if(play.dead==0||play.h<0||play.enegy<=0){
            speak(0,-1);
            playtext.highScore=max(playtext.highScore,tx);
            Sleep(3000);
            playtext.coins=play.coin;
            savePlayerData(playtext);
            gameloop();
            startgame();
        }
        if(tx%100==0){
            if(ci[2]){
                play.coin+=4;
            }
            play.coin++;
        }
        if(tx%1000==0){
            giftx();
        }     
        tx+=speed;
        ClearScreen();
        Sleep(1);
    }
}

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐