2017-05-02 48 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(); 

      } 
     } 

    } 

    } 

點:

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

從Dice類中的'Totally'返回之前,變量'tots'的設置值是多少?你如何總結Dice類中'TotalPoints'的值? –

+0

沒有,因爲我明白。我只是在試圖讓它工作 – Russsu

+0

如果你不清楚邏輯,那麼很難回答這個問題。即使我們回答這個問題,如果你不能得到它的邏輯,那也沒有意義。你能分享整個骰子課嗎? –

回答

0

你首先需要改變骰子類Totally()方法,屬性如下。

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

已更新答案以顯示totalThrows ... –