我需要制作一个简单的程序,让用户输入,如果他们想要尝试使用骰子在3卷中获得7,14或21。
我的班级骰子看起来像这样:
class Dobbelsteen
{
private int zichtbaar; // value of dice
Random random = new Random();
public int getNummer //Show value of dice
{
get { return zichtbaar; }
}
public Dobbelsteen()
{
zichtbaar = 0;
}
public void Gooien()
{
zichtbaar = random.Next(1, 7);
}
}
这应该没问题。
但现在我的主要出问题;它要求它3次,如果它们是幸运的,它会破坏(好)但现在失败了。 如果它不起作用,他们必须键入任何东西再试一次,但如果键入0则停止。 就我而言,它总是会破裂。
class Program
{
static void Main(string[] args)
{
int gekozengetal; //Chosen number 7,14 or 21
Console.WriteLine("Je mag 3 keer met de dobbelsteen gooien. Wil je proberen 7, 14 of 21 te werpen?"); // Asks to give 7 14 or 21 to play;
gekozengetal = Convert.ToInt32(Console.ReadLine()); // saves that in this int;
while (gekozengetal== 7 || gekozengetal == 14 || gekozengetal == 21)
{
int opgeteld = 0; // this is the values combined of the rolls.
Dobbelsteen test = new Dobbelsteen();
Console.WriteLine("Druk om je eerste dobbelsteen te gooien");
Console.ReadKey();
test.Gooien();
opgeteld += test.getNummer;
Console.WriteLine("Je eerste Dobbel was" + opgeteld);
Console.WriteLine("Druk om je TWEEDE dobbelsteen te gooien");
Console.ReadKey();
test.Gooien();
opgeteld += test.getNummer;
Console.WriteLine("Je tweede Dobbel was" + test.getNummer +" samen is dit al" + opgeteld);
Console.WriteLine("Druk om je DERDE dobbelsteen te gooien");
Console.ReadKey();
test.Gooien();
opgeteld += test.getNummer;
Console.WriteLine("Je derde Dobbel was" + test.getNummer + " samen is dit al" + opgeteld);
if (opgeteld == gekozengetal)
{
Console.WriteLine("HOERA, GEWONNEN.");
Console.ReadKey();
break;
}
else
{
Console.WriteLine("Loser je moest" +gekozengetal +" hebben en je bent" +opgeteld + "uitgekomen"); // Too bad; you didnt get lucky
Console.WriteLine("WE GAAN OPNIEUW PROBEREN: DRUK 0 om te stoppen"); // Lets try again; press 0 to abort.
int opnieuw = Convert.ToInt32(Console.ReadKey()); // Opnieuw = again
if (opnieuw == 0)
{
break;
}
else
{
continue;
}
}
提前谢谢。
答案 0 :(得分:1)
首先,解释这段代码真的很难。但我想以下情况可能是罪魁祸首:
int opnieuw = Convert.ToInt32(Console.ReadKey()); // Opnieuw = again
if (opnieuw == 0)
{
break;
}
else
{
continue;
}
你看到' Console.ReadKey()返回一个ConsoleKeyInfo类的对象,你不能直接转换为int。我建议您将代码更改为以下内容:
ConsoleKeyInfo opnieuw = Console.ReadKey(); // Opnieuw = again
if (opnieuw == ConsoleKey.D0 || opnieuw == ConsoleKey.NumPad0)
{
break;
}
else
{
continue;
}
答案 1 :(得分:0)
根据MSDN文档,Console.ReadKey()返回ConsoleKeyInfo类型的对象。 Convert.ToInt32不应该能够将该类型的对象转换为int。因此,只要您到达从控制台读取下一个键的部分并尝试将其转换为int,Convert.ToInt32就会抛出异常(InvalidCastException)。
ConsoleKeyInfo有一个属性" KeyChar"它保存了作为char按下的键。您可以检查它是否等于' 0' 0并结束你的计划:
ConsoleKeyInfo kinfo = Console.ReadKey();
char keyPressed = kinfo.KeyChar;
if (keyPressed.Equals('0')
{
break;
}
else
{
continue;
}