2017-05-02 10 views
0

私はあなたが得点にサイコロを振るサイコロの試合を持っています。現在、25ポイントに達すると、このプレーヤーが勝者であるとのメッセージが表示されますが、プログラムは50までループします。スコアの上限に達すると、ゲームを終了したいと思いますが、どうやってするか。私はdo-whileループが必要だと思いますが、合計点の制限が別のクラスにあるので、どのように追加するかわかりません。ダイスの仕上げループ?

class Game 
{ 
    private static void Main(string[] args) ----- Main method: 
    { 
     if (gamemode == 1) 
     { 
       quickgame(); 
     } 

} 

    private static void quickgame() ---- Game carried out 
    { 
     Console.WriteLine("\nInstructions: Players take turns rolling all five dice and scoring for three-of-a-kind or better. \n\t  If a player only has two-of-a-kind, they may re-throw the remaining dice in an \n\t  attempt to improve the matching dice values. If no matching numbers are\n\t  rolled, a player scores 0. The first player to reach 25 points wins. "); 
     Console.WriteLine("\nScoring: 3-Of-A-Kind = 3 Points \n   4-Of-A-Kind = 6 Points \n   5-Of-A-Kind = 12 Points\n"); 

     Random RandomNum = new Random(); 
     Player[] player1 = new Player[5]; 
     Die[] myDie = new Die[5]; 


     for (int i = 0; i < 5; i++) 
     { 
      myDie[i] = new Dice_v4.Die(RandomNum); 
      player1[i] = new Dice_v4.Player(); 
     } 

     for (int i = 0; i < 2; i++) // Number of players 
     { 
      Console.Write("Enter Name for Player {0}:", i + 1); 
      string NewName = Console.ReadLine(); 
      player1[i].SetName(NewName); 
     } 

     Console.WriteLine("\nPress enter in turns to roll the five dice"); 
     Console.ReadLine(); 
     Console.WriteLine(); 


     for (int j = 1; j < 50; j++) 
     { 
      for (int i = 0; i < 2; i++) 
      { 

       myDie[i].roll(); 
       Console.WriteLine("{0} Rolled:{1} on the first dice", player1[i].GetName(), myDie[i].GetTopNumber()); 
       Console.WriteLine("{0} Rolled:{1} on the second dice", player1[i].GetName(), myDie[i].GetTopNumber1()); 
       Console.WriteLine("{0} Rolled:{1} on the third dice", player1[i].GetName(), myDie[i].GetTopNumber2()); 
       Console.WriteLine("{0} Rolled:{1} on the fourth dice", player1[i].GetName(), myDie[i].GetTopNumber3()); 
       Console.WriteLine("{0} Rolled:{1} on the fifth dice", player1[i].GetName(), myDie[i].GetTopNumber4()); 
       myDie[i].points();      
       Console.WriteLine("\t\t\t\t\tTotal Throws:{0}\n ------------------------------------------------------", j); 
       myDie[i].Totally(); 
       Console.ReadLine(); 

      } 
     } 

    } 

    } 

ポイント:次のようにプロパティにサイコロクラスのTotally()方法を変更する

class Die 
{ 


    private int NumberTop1;     //attributes 
    private int NumberTop2; 
    private int NumberTop3; 
    private int NumberTop4; 
    private int NumberTop5; 

    int threepoints = 0; 
    int sixpoints = 0; 
    int twelvepoints = 0; 
    int TotalPoints = 0; 

    private Random RandomNumGenerator; 

    public Die(Random RandomGenerator)  // constructor 
    { 
     RandomNumGenerator = RandomGenerator;  // initialises random number 
    } 

    public int GetTopNumber() 
    { 
     return NumberTop1;   // Returns number on top 
    } 

    public int GetTopNumber1() 
    { 
     return NumberTop2; 
    } 

    public int GetTopNumber2() 
    { 
     return NumberTop3; 
    } 

    public int GetTopNumber3() 
    { 
     return NumberTop4; 
    } 

    public int GetTopNumber4() 
    { 
     return NumberTop5; 
    } 

    public void roll() 
    { 
     NumberTop1 = RandomNumGenerator.Next(1, 7); 
     NumberTop2 = RandomNumGenerator.Next(1, 7); 
     NumberTop3 = RandomNumGenerator.Next(1, 7); 
     NumberTop4 = RandomNumGenerator.Next(1, 7); 
     NumberTop5 = RandomNumGenerator.Next(1, 7); 

     List<int> diceValues = new List<int>(); 
     diceValues.Add(GetTopNumber()); 
     diceValues.Add(GetTopNumber1()); 
     diceValues.Add(GetTopNumber2()); 
     diceValues.Add(GetTopNumber3()); 
     diceValues.Add(GetTopNumber4()); 


     var duplicates = diceValues 
     .GroupBy(i => i) 
     .Where(g => g.Count() == 3) 
     .Select(g => g.Key); 
     foreach (var d in duplicates) 
     { 
      Console.BackgroundColor = ConsoleColor.Red; 
      Console.WriteLine("\n{0} Appeared three times --- 3 Points Awarded\n", d); 
      Console.BackgroundColor = ConsoleColor.Black; threepoints += 3; 
     } 

     var fourting = diceValues 
     .GroupBy(i => i) 
     .Where(g => g.Count() == 4) 
     .Select(g => g.Key); 
     foreach (var e in fourting) 
     { 
      Console.WriteLine("\n{0} Appeared four times --- 6 Points Awarded\n", e); 
      sixpoints += 6; 
     } 

     var fiveting = diceValues 
     .GroupBy(i => i) 
     .Where(g => g.Count() == 5) 
     .Select(g => g.Key); 
     foreach (var f in fiveting) 
     { 
      Console.WriteLine("\n{0} Appeared five times --- 12 Points Awarded\n", f); 
      twelvepoints += 12; 
     } 
    } 
public string points() 
    { 
     TotalPoints = threepoints + sixpoints + twelvepoints; 
     Console.WriteLine("\n\t\t\t\t\tTotal Score: {0}", TotalPoints); 

     return pointss; 
    } 



    public string Totally() 
    { 
     if (TotalPoints >= 25) 
     { 
      Console.WriteLine("This Player Won the game"); 

     } 
     return tots; 
    } 
} 
+0

ダイスクラスの「完全に」から戻る前に、変数「tots」に設定する値は何ですか? Diceクラスの 'TotalPoints'の値をどのように集計していますか? –

+0

私は理解していません。私はちょうどそれを働かせようとしている周りで遊んでいた – Russsu

+0

あなたは論理についてはっきりしていない場合は、質問に答えることは非常に困難です。私たちが質問に答えても、あなたがそれの論理を得ることができないのであれば、それは意味がありません。あなたはダイス全体のクラスを共有できますか? –

答えて

0

あなたの最初の必要性。

public class Dice 
{ 
    public int TotalScore 
    { 
     get { return TotalPoints; } 
    } 
} 

なぜ50回ループする必要があるのか​​わかりません。

以下のロジックを使用できます。

private static void quickgame() ---- Game carried out 
{ 
    // All other code.... 

    bool anyPlayerWon = false; 
    int totalThrows = 0; 
    while(!anyPlayerWon) 
    { 
     totalThrows += 1; 
     for (int i = 0; i < 2; i++) 
     { 
      myDie[i].roll(); 
      Console.WriteLine("{0} Rolled:{1} on the first dice", 
       player1[i].GetName(), myDie[i].GetTopNumber()); 
      Console.WriteLine("{0} Rolled:{1} on the second dice", 
       player1[i].GetName(), myDie[i].GetTopNumber1()); 
      Console.WriteLine("{0} Rolled:{1} on the third dice", 
       player1[i].GetName(), myDie[i].GetTopNumber2()); 
      Console.WriteLine("{0} Rolled:{1} on the fourth dice", 
       player1[i].GetName(), myDie[i].GetTopNumber3()); 
      Console.WriteLine("{0} Rolled:{1} on the fifth dice", 
       player1[i].GetName(), myDie[i].GetTopNumber4()); 
      myDie[i].points();      
      Console.WriteLine("\t\t\t\t\tTotal Throws:{0}\n ---------------- --------------------------------------", totalThrows); 
      var totalScore = myDie[i].TotalScore; 
      if(totalScore >= 25) 
      { 
       anyPlayerWon = true; 
       Console.WriteLine("This Player Won the game"); 
       break; 
      } 
     } 
    } 
} 
+0

ありがとうございます!できます。しかし、トータルスローはもう機能しません。 – Russsu

+0

show totalThrowsの回答を更新しました... –

関連する問題