C# 数学游戏难度设置

C# 数学游戏难度设置,c#,C#,我正在尝试做一个简单的数学游戏,现在有加法,我想增加一些难度,这样我可以选择我想要的数字是1-10还是10-20,我用随机数。一切都是控制台侧,我可以写困难的数字 Random numberGenerator = new Random(); Console.WriteLine("what what difficulty you want?"); Console.WriteLine("1 for 1-10\n2 for 10-20\n3 for 15-40"); C

我正在尝试做一个简单的数学游戏,现在有加法,我想增加一些难度,这样我可以选择我想要的数字是1-10还是10-20,我用随机数。一切都是控制台侧,我可以写困难的数字

    Random numberGenerator = new Random();
    Console.WriteLine("what what difficulty you want?");
    Console.WriteLine("1 for 1-10\n2 for 10-20\n3 for 15-40");
    Console.Write("i want:");
    int hardness = Convert.ToInt32(Console.ReadLine());
    if (hardness == 1)
    {
        goto hardness1;
    }

hardness1:
    int num01 = numberGenerator.Next(1, 11);
    int num02 = numberGenerator.Next(1, 11);
    int num03 = numberGenerator.Next(1, 11);
    int num04 = numberGenerator.Next(1, 11);
    if (answer == 1) {
        goto startofadding;
    }

hardness2:
    int num01 = numberGenerator.Next(10, 21)
    int num02 = numberGenerator.Next(10, 21)
    int num03 = numberGenerator.Next(10, 21)
    int num04 = numberGenerator.Next(10, 21)
    if (answer == 1)
    {
        goto startofadding;
    }

startofadding:
    Console.WriteLine("num01 = " + num01 + " and num02 = " + num02 + " this is " + i + " loop ");
    Console.WriteLine("answer is " + (num01 + num02));

    Console.WriteLine("what is " + num01 + " + " + num02 + " ?");
    Console.Write("Answer is: ");
    int answer1 = Convert.ToInt32(Console.ReadLine());
    if (answer1 == num01 + num02)
    { 
        Console.WriteLine("correct answer");
        Console.WriteLine("\n");
我正在尝试使用gotos,因此如果选择了难度,它可以获取所需的数字,但它会给我:

已在作用域中定义名为“num01”的局部变量或函数

错误,我知道它是什么,但我不知道如何修复它。是我做错了什么,还是有更好的方法?如果有什么不清楚的地方,请询问更多的细节和代码,尽量解释清楚

已在作用域中定义名为“num01”的局部变量或函数

您已经在
hardness1
标签下定义了
num01

您可以通过只声明一次变量来修复它。不要在下一个标签下重新声明相同的变量,因为它在同一块范围内


一旦你让它工作起来,摆脱
goto
。在这种情况下,switch语句可能是最简单的方法

您可以将if条件和
hardness0x
块替换为:

switch(hardness)
{
    case 1:
    // code for hardness 1
    break;
    case 2:
    // code for hardness 2... etc.
    break;
}

// Code under startofadding follows. No need for goto or goto-labels

下一步是尝试完全删除switch语句,这将大大简化代码

已在作用域中定义名为“num01”的局部变量或函数

您已经在
hardness1
标签下定义了
num01

您可以通过只声明一次变量来修复它。不要在下一个标签下重新声明相同的变量,因为它在同一块范围内


一旦你让它工作起来,摆脱
goto
。在这种情况下,switch语句可能是最简单的方法

您可以将if条件和
hardness0x
块替换为:

switch(hardness)
{
    case 1:
    // code for hardness 1
    break;
    case 2:
    // code for hardness 2... etc.
    break;
}

// Code under startofadding follows. No need for goto or goto-labels



下一步将尝试完全删除switch语句,这将大大简化代码。

我正在尝试使用我停止阅读的goto。
goto
是绝对错误的,您没有变量范围的概念,代码非常可怕。我建议一个C教程。提示:考虑切换<代码> Goto > <代码>开关:] GODRAPEL GOTOS不模拟开关,它们是仿真方法。代码不是命名的方法,而是在一个方法中,每个“逻辑”方法上方都有标签,它不是调用一个方法,而是对标签进行转到,每个伪方法的末尾总是有一个转到下一个要调用的伪方法。我们不能在这里指导您。这个代码有太多的错误。正如我之前所说,找一本C#教程或买一本书,这样你就可以掌握变量作用域和程序结构等基本概念。我正在尝试使用我不再阅读的goto。
goto
是绝对错误的,你没有变量作用域的概念,代码非常可怕。我建议一个C教程。提示:考虑切换<代码> Goto > <代码>开关:] GODRAPEL GOTOS不模拟开关,它们是仿真方法。代码不是命名的方法,而是在一个方法中,每个“逻辑”方法上方都有标签,它不是调用一个方法,而是对标签进行转到,每个伪方法的末尾总是有一个转到下一个要调用的伪方法。我们不能在这里指导您。这个代码有太多的错误。正如我之前所说的,找一本C#教程或买一本书,这样你就可以掌握变量范围和程序结构等基本概念。switch似乎可以工作,但现在我的num01不会被识别,如果我有num01,我的行what提问的问题找不到num01。我不知道我是否又做错了什么,但我在案例1中添加了随机数生成器。我得到的错误是:“名称'num01'在当前上下文中不存在”@KarlisSaarna您已经学会调试了吗?如果没有,请尝试从头开始,但只编写几行代码,然后构建并检查输出是否正常。继续一点一点地添加代码。我已经尝试修复一些问题,到目前为止我已经修复了一些问题,因为我还没有做太多,即使现在我正在尝试寻找一种方法,我可以将我的切换和问题转换成一个上下文,或者以某种方式使它们一起工作,非常感谢您提供有关它们为何不能协同工作的任何信息。如果我没有看错您的评论,那么您需要在当前范围之外(switch语句之外)声明5个变量。为什么?因为你想从外部访问它。@KarlisSaarna,如果你有机会,谷歌
Bob Tabor C#Fundamentals
这是一个初学者C#视频系列,我想你会从中受益。他很善于解释自己在做什么,而且很容易理解。虽然我不建议这样做,但他将它们分割开来,这样你就可以直接跳入循环、列表、类等内容。切换似乎起作用,但现在我的num01不会被识别,如果我有num01,我的行what提问找不到num01。我不知道我是否又做错了什么,但我在案例1中添加了随机数生成器。我得到的错误是:“名称'num01'在当前上下文中不存在”@KarlisSaarna您已经学会调试了吗?如果没有,请尝试从头开始,但只编写几行代码,然后构建并检查输出是否正常。继续一点一点地添加代码。我已经尝试修复一些问题,到目前为止我已经修复了一些问题,因为我还没有做太多,即使现在我正在尝试寻找一种方法,我可以将我的切换和问题转换成一个上下文,或者以某种方式使它们一起工作,非常感谢您提供有关它们为何不能协同工作的任何信息。如果我没有看错您的评论,那么您需要在当前范围之外(switch语句之外)声明5个变量。为什么?因为您想从外部访问它。@KarlisS