【发布时间】:2021-11-26 21:09:09
【问题描述】:
using System;
using System.Collections.Generic;
namespace AnyDice
{
class Program
{
static void Main(string[] args)
{
int diceSides;
int rollDie;
int count = 0;
bool keepRolling = true;
List<int> num = new List<int>();
Random random = new Random();
Console.Write("Write the number of sides of your die: ");
diceSides = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Type the numbers of the die");
for (int i = 0; i < diceSides; i++)
{
int rank = 1 + i;
Console.Write(rank + "~~> ");
num.Add(Convert.ToInt32(Console.ReadLine()));
}
num.Sort();
Console.WriteLine("\nHere's the die and its contents");
for (int i = 0; i < num.Count; i++)
{
Console.Write("[");
Console.Write(num[i]);
Console.Write("]");
}
Console.WriteLine("\nHow many times do you want to roll at once");
rollDie = Convert.ToInt32(Console.ReadLine());
while (keepRolling)
{
for (int i = 0; i < rollDie; i++)
{
Console.Write("[");
Console.Write(num[random.Next(num.Count)]);
Console.Write("]");
count++;
}
Console.ReadLine();
}
Console.WriteLine("It took you " + count + " attempts");
Console.ReadLine();
}
}
}
例如,如果 (4,4,4,4) 被滚动或 (2,2) 在任何“n”个列中,while 循环就会中断。 我想将每个骰子滚动值存储在另一个数组列表中并比较其中的每个值。如果它都相等,那么它会中断..但我不知道如何实现它。
【问题讨论】:
-
if (num.Distinct().Count() == 1) { }
-
我编辑了您的代码示例,因此每行有一个语句。在 C# 中将多个语句放在同一行是极为罕见的,我认为这会使任何试图回答您的问题的人感到困惑。
-
当所有掷出的骰子都是相同的确切数字时,基本会中断while循环
-
@jdweng
num是模具,而不是卷。 -
添加
List<int>以跟踪卷:var rolls = new List<int>();。将每个卷存储在列表中:var roll = num[random.Next(num.Count)]; rolls.Add(roll);和Console.Write(roll);然后测试卷是否相同:keepRolling = rolls.Distinct().Count() == 1;