2016-12-07 17 views
0

申し訳ありませんが、私は学校でC#を学んでいて、ダイスローラープログラムを考え出しました。 私が持っている問題は、2つのダイスの合計を集めてから、それを配列に配置するのではなく、インストラクターがペアの各ダイの番号を取得し、それをダイの第2のペアロールズ。私はロールを設定しましたが、ダイの数を配列に入れる方法はわかりません。ここに私がこれまで持っていたコードがあります。正しい方向にちょうど答えを探しているわけではありません。2つの別個の数字を配列に追加する

Random roll = new Random(); 
int [,] dieValue1 = new int[7, 7]; 
int[,] dieValue2 = new int[7, 7]; 
int die1 = 0; 
int die2 = 0; 
int die3 = 0; 
int die4 = 0; 
die1 = roll.Next(6); 
die2 = roll.Next(6); 
die3 = roll.Next(6); 
die4 = roll.Next(6); 
lblDice1.ImageIndex = die1; 
lblDice2.ImageIndex = die2; 
//die roll for the first list 
for (int rollNum = 1; rollNum< 51; rollNum++) 
{ 
    die1 = roll.Next(1, 7); 
    die2 = roll.Next(1, 7); 
    dieValue1[die1, die2] += 1; 
    lstRolls.Items.Add("Roll " + rollNum + " : " + "die 1 is a " + die1 + ", " + "die 2 is a " + die2); 
} 
//die roll for the second list 
for (int rollNum1 = 1; rollNum1< 51; rollNum1++) 
{     
    die3 = roll.Next(1, 7); 
    die4 = roll.Next(1, 7); 
    dieValue2[die3, die4] += 1; 
    lstRolls2.Items.Add("Roll " + rollNum1 + " : " + "die 3 is a " + die3 + ", " + "die 4 is a " + die4); 
} 
for (int r = 1; r < 51; r++) 
{ 
    lstRollDifference.Items.Add("First rolls :" + dieValue1 + " " + "Second rolls :" + dieValue2); 
} 
+1

私は混乱しています。だから、あなたはそれぞれの数字の組み合わせが巻かれている回数の積算値があります。そして今、あなたは個々のロールを追跡しようとしていますか?あなたはそれらをペアで転がし、それを第2のダイスロールと比較することによって、どういう意味ですか? – EJoshuaS

+0

私は、各ペアが50回回転している2つの別々のダイスを追跡しています。彼は各ペアの番号を表示したかった。私は2つの別々のリストボックスを作った。しかし今、彼は、2対のダイスがお互いに比べて欲しいと言っています。私はIEnumerable.Comparerを使用して、50回回転した2組のサイコロを比較します。ペア1 {6,3}ペア2 {1,4}を実行すると、各ペアの50個の役割をIEnumerableで調べて表示する必要があります。たとえば、ペア1には{2}があります。 –

+0

最も単純な考え方は、インデックスがロール番号である各配列を1次元にすることです。 50個のロールについて: 'int [] die1Values =新しいint [50];' int [] die2Values =新しいint [50]; '; 'die1Values [rollNum] =(die 1の結果)'、 'die2Values [rollNum] =(die 2の結果)'となります。暗黙的な結合の代わりに、それらを1つの2D配列に結合することができます: 'int [、] allDieValues = new int [2、50]';このデータ構造では、次のことができます: 'allDieValues [0] [rollNum] =(die 1 result)'、 'allDieValues [1] [rollNum] =(die 2 result)'、第1次元はサイコロの数、 2番目はロール数です。 – Quantic

答えて

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はplayer1のロールを、player2のロールは差をつける。ここでは、プレイヤー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構文を使用することができますし、あなたが転がるたびにあなたが各プレイヤーのためにこれらのいずれかが作成されますのでご注意ください。あなたが持っているすべての配列が必要なわけではありません。

+0

これを手伝ってくれてありがとうございました。私はそのような騒ぎであるあなたの忍耐を感謝します。私はいつか私があなたにすべての恩恵を返すことを願っています。 –

-1

ストアの新しいオブジェクトとしてサイコロロール:

はここ(FormButtonクリックイベントハンドラ内)私のコードです。一対のダイスを格納するDiceRollクラスを作成し、ToString、Total、および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

関連する問題