徐梓煜_SHARK 2024-06-16 17:29 采纳率: 50%
浏览 16
已结题

自己做的游戏,为什么报错啊?求解

为什么报错啊?有没有人来看看哪里错了,QQL

#include<bits/stdc++.h>
#include<windows.h>
#include<stdio.h>
#include<conio.h>
#include<time.h>
#include<cmath>
#define KEY_DOWN(VK_NONAME)((GetAsyncKeyState(VK_NONAME)&0x8000)?1:0)
#include <stdlib.h>
#include <iostream>
#include <random>
using namespace std;
int main()
{
    int a,b,ljkjd=1,kjkjd=1,infantry=5,tank=0,plane=0,month=1,jd=0; 
    int arr[3]={1,2,3};
    cout<<"    ■■■          ■     ■ ■"<<endl;
    cout<<"                    ■■ ■■■■"<<endl;
    cout<<"    二战            ■     ■"<<endl;
    cout<<"                  ■  ■    ■ ■ ■"<<endl;
    cout<<"   ■■■■         ■       ■■ "<<endl;
    cout<<"              1.0版本  "<<endl;
    printf("按任意键开始\n");
    getch();
    system("cls");
    //1941年介入战争 
    MessageBox(NULL,"步兵<坦克<飞机,步兵>飞机","注",MB_OK);
    MessageBox(NULL,"准备?","苏军",MB_OK);
    MessageBox(NULL,"开始!","苏军",MB_OK);
    system("cls");
    cout<<"1941年,德军正式向苏联宣战"<<endl;
    getch();
    while(1){
        cout<<"第"<<month<<"个月"<<endl<<"你要:1.生产 2.出击 "<<endl;
        cin>>a;
        if(a==1){
            while(1){
                cout<<"你要生产(研制)什么?1.步兵(1陆军科技点1攻击) 2.坦克(2陆军科技点2攻击) 3.飞机(3空军科技点2攻击)";
                cout<<endl<<"注:研制不会消耗科技点。";
                cin>>a;
                if(a==1&&ljkjd>=1){
                    cout<<"成功!步兵lv+1"<<endl;
                    printf("按任意键继续\n");
                    getch();
                    system("cls");month+=1;infantry+=1;break;
                }
                else{
                    cout<<"陆军科技点不足!"<<endl;
                    printf("按任意键继续\n");
                    getch();
                    system("cls");continue;
                }
                if(a==2&&ljkjd>=2){
                    cout<<"成功!坦克lv+1"<<endl;
                    printf("按任意键继续\n");
                    getch();
                    system("cls");month+=1;tank+=2;break;
                }
                else{
                    cout<<"陆军科技点不足!"<<endl;
                    printf("按任意键继续\n");
                    getch();
                    system("cls");continue;
                }
                if(a==3&&kjkjd>=3){
                    cout<<"成功!飞机lv+1"<<endl;
                    printf("按任意键继续\n");
                    getch();
                    system("cls");month+=1;plane+=2;break;
                }
                else{
                    cout<<"空军科技点不足!"<<endl;
                    printf("按任意键继续\n");
                    getch();
                    system("cls");continue;
                }
            }
        }
        if(a==2){
            int size=sizeof(arr)/sizeof(arr[0]);
            while(1){
                std::random_device rd;
                std::mt19937 gen(rd());
                std::uniform_int_distribution<> dis(0, size - 1);
                int randomIndex = dis(gen);
                int enemy = arr[randomIndex];
                if(infantry>enemy&&tank>enemy||battleplane>enemy){
                    cout>>"胜利! 获得:陆军科技点*3! 空军科技点*1!"<<endl;
                    ljkjd+=3;kjkjd+=1;month++;jd+=2;
                    printf("按任意键继续\n");
                    getch();
                    system("cls");break;arr[randomIndex]+=1;
                }
                else if(infantry=enemy&&tank=enemy||battleplane=enemy){
                    cout<<"平局!"<<endl;
                    printf("按任意键继续\n");
                    getch();
                    system("cls");break;month++;jd+=1;arr[randomIndex]+=1;
                }
                else{
                    cout<<"失败!"<<endl;
                    printf("按任意键继续\n");
                    getch();
                    system("cls");month++;
                    if(jd>1)
                        jd-=1;break;
                    jd=1;break;
                }
            }
        }
        if(jd==0&&month==12){
            cout<<"德军直夺莫斯科"<<"--------结局1:灭亡--------";
            printf("按任意键继续\n");
            getch();
            system("cls");
            return 0;
        }
        if(jd==10){
            cout<<"恭喜,首相,您带领苏维埃走向了胜利!"<<endl<<"共用时:"<<month<<" 个月";
            cout<<"再见,首相 您该休息会儿了"<<endl<<"             ★"<<endl<<"--------结局2:胜利!-------"<<endl<<"制作:徐梓煜";
            return 0;
        }
        continue;
    }
    return 0;
}

所以,哪里错了啊!/( QAQ)/

  • 写回答

1条回答 默认 最新

  • 阿里嘎多学长 2024-06-16 17:54
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    您好!我注意到您的代码中有几个潜在的问题,下面我会逐一指出并给出建议:

    1. 变量初始化:您的代码中有一些变量没有初始化,例如 battleplane 变量在 if(a==2){...} 块中被使用,但之前并没有定义或初始化。

    2. cin输入处理:在使用 cin>>a; 后,如果输入的数据不是整数,可能会导致未定义行为。建议使用 cin.fail() 来检查输入是否成功。

    3. 无限循环风险:您的代码中有几个 while(1){...} 循环,如果其中的 break 条件没有满足,可能会导致无限循环。

    4. if语句逻辑:在 if(a==2){...} 块中,您使用了 if(infantry>enemy&&tank>enemy||battleplane>enemy),这里 battleplane 没有定义,并且逻辑判断使用了 &&|| 的组合,这可能会导致逻辑上的混淆。

    5. 未定义的变量或错误的变量使用:如上所述,battleplane 变量未定义。

    6. system("cls"):在某些环境中,system("cls") 可能不起作用,特别是在非Windows系统或某些IDE中。可以考虑使用其他方法清屏,或者在特定环境下使用。

    7. MessageBox函数使用:您的 MessageBox 函数调用看起来是正确的,但请注意,MessageBox 是Windows API函数,只能在Windows环境中使用。

    8. 数组arr的使用:在 if(a==2){...} 块中,您对 arr[randomIndex] 进行了修改,但这个修改并没有反映在后续的逻辑中。

    9. 随机数生成和使用:您的随机数生成逻辑看起来是正确的,但请注意,std::random_devicestd::mt19937 可能需要包含头文件 <random>

    10. cout和printf混合使用:在C++中,建议使用 cout 进行输出,因为它提供了更丰富的格式化选项。printf 是C语言的函数,虽然在C++中也可以使用,但不是C++的风格。

    11. 遗漏的分号或大括号:在 cout>>"胜利! 获得:陆军科技点*3! 空军科技点*1!"<<endl; 这一行中,cout 前面不应该有 >>

    下面是修改后的代码片段,修复了上述提到的一些问题:

    #include<bits/stdc++.h>
    // ... 其他头文件 ...
    
    int main() {
        // ... 其他变量定义 ...
    
        int battleplane = 0; // 添加未定义的变量初始化
    
        // ... 其他代码 ...
    
        if(a==2){
            // ... 其他代码 ...
            int size = sizeof(arr) / sizeof(arr[0]);
            while(1){
                // ... 随机数生成代码 ...
                if(infantry > enemy && tank > enemy){ // 假设没有 battleplane 变量
                    // ... 胜利逻辑 ...
                    break;
                }
                // ... 平局和失败逻辑 ...
            }
        }
    
        // ... 其他代码 ...
    
        return 0;
    }
    

    希望这些修改能帮助您解决问题!如果还有其他问题或者需要进一步的帮助,请随时告诉我。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月26日
  • 已采纳回答 6月18日
  • 创建了问题 6月16日

悬赏问题

  • ¥15 Stable Diffusion视频动画制作时,第一步蒙版生成报错怎么处理啊,蒙版和帧图没法生成
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 易优eyoucms关于二级栏目调用的问题
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上