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