对不起,这可能是一个愚蠢的问题,我正在学校学习c#,并想出了一个骰子滚动计划。 我遇到的问题不是收集滚动的2个骰子的总数,而是将它放入一个数组中,教师希望我们得到一对中每个骰子的数量,然后将它与第二对骰子进行比较。我已经设置了卷,但我不确定如何将每个数量的芯片放入阵列中。这是我到目前为止的代码。没有找到正确方向的答案。
这是我的代码(在Button
的{{1}}点击事件处理程序中):
Form
答案 0 :(得分:0)
由于您需要保留int数组,因此可以将int数组转换为类型为
的对象public class Pair
{
public int FirstDie { get; set; }
public int SecondDie { get; set; }
}
然后将每个玩家的数组转换为Pair
类型的列表,如下所示:
public static List<Pair> ConvertToPairs(int[,] dieValues)
{
var query = from int item in dieValues
select item;
var p1Rolls = query.ToList();
List<Pair> pairs = new List<Pair>( p1Rolls.Count );
for( int i = 0; i < 4; i += 2 )
{
pairs.Add( new Pair() { FirstDie = p1Rolls[ i ], SecondDie = p1Rolls[ i + 1 ] } );
}
return pairs;
}
然后你可以使用Except
来获得玩家1的滚动与玩家2的滚动来获得差异。以下是你将如何为玩家1这样做。我会让你找出玩家2.我在这个示例程序中有2个滚动。
class Program
{
static void Main(string[] args)
{
int[,] dieValue1 = { { 1, 2 }, { 3, 4 } };
int[,] dieValue2 = { { 1, 2 }, { 6, 4 } };
var p1Rolls = ConvertToPairs( dieValue1 );
var p2Rolls = ConvertToPairs( dieValue2 );
foreach( var item in p1Rolls.Except( p2Rolls ) )
{
Console.WriteLine( "Player 1 has [{0}, {1}] which player 2 does not.", item.FirstDie, item.SecondDie );
}
var result = LoadComment( 1, null );
Console.ReadKey();
}
public static List<Pair> ConvertToPairs(int[,] dieValues)
{
var query = from int item in dieValues
select item;
var p1Rolls = query.ToList();
List<Pair> pairs = new List<Pair>( p1Rolls.Count );
for( int i = 0; i < 4; i += 2 )
{
pairs.Add( new Pair() { FirstDie = p1Rolls[ i ], SecondDie = p1Rolls[ i + 1 ] } );
}
return pairs;
}
}
请注意,您可以使用此Pair
构造开始,每次滚动时,您都会为每个玩家创建其中一个。这样您就不需要所有这些阵列了。
答案 1 :(得分:-1)
将骰子卷存储为新对象。生成一个存储一对骰子的DiceRoll类,并具有ToString,Total的功能,并将一个DiceRoll与另一个DiceRoll进行比较。您甚至可以使用包含随机函数的默认构造函数,或者使用在其他位置生成的卷对的构造函数。将DiceRoll对象放入一个列表(IEnumerable)。
https://msdn.microsoft.com/en-us/library/ms173154.aspx https://msdn.microsoft.com/en-us/library/system.icomparable.compareto(v=vs.110).aspx