2017-08-24 7 views
0

最初にプレイヤーの数が何人かと言うと、すべてのプレイヤーが3ダーツを投げて1人のプレイヤーが301ポイントを得るまでループします私は選手のリストから301点以上の得点を得た選手を得たいと思っています。得点を出して、得点を出してゲームの最後に勝ったと言いますが、それをする。C#リストからプレーヤーを取得してスコアを印刷する方法

player_list.Any(x => x.calculate_points() >= 301) 

だから、できるだけ早く1 としては、条件に一致するん、あなたがいることを得ることができます:ありがとう

class Program 
{ 
    public static void Main(string[] args) 
    { 
     Game My_game = new Game(); 
     My_game.PlayGame(); 
    } 
} 

public class Game 
{ 
    private List<Player> player_list = new List<Player>(); 
    private List<int> total_list = new List<int>(); 

    public void PlayGame() 
    { 
     Random random_number = new Random(); 
     int throw1; 
     int throw2; 
     int throw3; 

     string more_players = "yes"; 

     while (more_players == "yes") 
     { 
      Console.WriteLine("What is the players name?: "); 
      player_list.Add(new Player(Console.ReadLine())); 
      Console.WriteLine("Are there more players?"); 
      more_players = Console.ReadLine(); 
     } 

     Console.WriteLine("\n\n Welcome to the dartgame! \n" + 
          "\n Game Rules: Each player throws 3 darts at a time." + 
          "\n Every throw can be worth 0-20 points." + 
          "\n Whoever gets 301 points first is the winner!"); 

     Console.WriteLine("\nPlayers:"); 

     foreach (var players in player_list) 
     { 
      Console.WriteLine(players); 
     } 

     int total_points = 0; 

     while (!player_list.Any(x => x.calculate_points() >= 301)) 
     { 
      foreach (var players in player_list) 
      { 
       Console.WriteLine("\n\n\n\n"); 
       Console.WriteLine("\n first throw for{0}!", players); 
       Console.WriteLine("Press space to throw a dart!"); 
       Console.ReadKey(); 
       throw1 = random_number.Next(1, 20); 
       Console.WriteLine("You got " + throw1 + " points!"); 
       Console.WriteLine("\n second throw for{0}!", players); 
       Console.WriteLine("Press space to throw a dart!"); 
       Console.ReadKey(); 
       throw2 = random_number.Next(1, 20); 
       Console.WriteLine("You got " + throw2 + " points!"); 
       Console.WriteLine("\n third throw for{0}!", players); 
       Console.WriteLine("Press space to throw a dart!"); 
       Console.ReadKey(); 
       throw3 = random_number.Next(1, 20); 
       Console.WriteLine("You got " + throw3 + " points!"); 
       total_points = throw1 + throw2 + throw3; 
       Console.WriteLine("\nPoints for this round: " + total_points); 
       total_list.Add(total_points); 
       total_points = total_list.Sum(x => Convert.ToInt32(x)); 
       players.Add_turn(throw1, throw2, throw3); 
      } 

      foreach (var players in player_list) 
      { 
       players.print_turns(); 
      } 
     } 
    } 

} 

class Player 
{ 
    private string name; 
    private List<Turns> turn_list = new List<Turns>(); 
    public Player(string _name) 
    { 
     name = _name; 

    } 

    public void Add_turn(int turn1, int turn2, int turn3) 
    { 
     turn_list.Add(new Turns(turn1, turn2, turn3)); 
    } 

    public int calculate_points() 
    { 
     int total = 0; 
     foreach (var turns in turn_list) 
     { 
      total = total + turns.Get_Score(); 
     } 
     return total; 
    } 

    public void print_turns() 
    { 
     Console.WriteLine("\n\n\n\n----------------------------------------"); 
     Console.WriteLine("Points for {0}", name); 
     foreach (var turns in turn_list) 
     { 
      Console.WriteLine(turns); 
     } 
     Console.WriteLine("\n Total points: {0}", calculate_points()); 
    } 


    public override string ToString() 
    { 
     return string.Format(" {0} ", name); 
    } 
} 

class Turns 
{ 
    private int turn1; 
    private int turn2; 
    private int turn3; 

    public Turns(int _turn1, int _turn2, int _turn3) 
    { 
     turn1 = _turn1; 
     turn2 = _turn2; 
     turn3 = _turn3; 
    } 

    public int Get_Score() 
    { 
     int totalt; 
     totalt = turn1 + turn2 + turn3; 
     return totalt; 
    } 

    public override string ToString() 
    { 
     return string.Format("\n throw 1: {0} \n throw 2: {1} \n throw 3: {2}", turn1, turn2, turn3); 
    } 
} 
+1

何を試しましたか?あなたはどこにいるのですか? –

+0

普通のダーツでは、目標スコアを超えてはいけないということに注意してください。 – zzxyz

答えて

2

まあ、これはどのプレイヤーが条件に一致する場合すでにチェック方法ですシングルプレイヤー:

player_list.Single(x => x.calculate_points() >= 301) 

またはすべての一致するプレーヤーS、複数あるかどう:そこに複数のだが、あなたは一つだけにしたい場合は

player_list.Where(x => x.calculate_points() >= 301) 

それとも、最初に一致したプレイヤーは、:

player_list.First(x => x.calculate_points() >= 301) 

それともプレーヤースコアが最も高い(ではありませんタイスコアを考慮):

player_list.OrderByDescending(x => x.calculate_points()).First(); 
+0

偉大な答え!しかし、Linqを使用していない答えを見たいと思います。この質問は新しいプログラマから来ているようですが、おそらくLinqを使わないほうが良いでしょう。 – TheMiddleMan

+1

@TheMiddleMan:OPがすでにLINQを使っているので、任意のリクエストのようです。 – David

+0

ありがとうございますが、勝者を印刷したい場合はどうすればいいですか、それは私が理解できないものです。そのプレイヤーを獲得してポイントをもう一度印刷して勝利したと言っているようなものですそれはwhileループの後にはわかりませんが、わかりません、もし私が不明な場合、または私が明らかに何かを見逃している場合は、私はかなりこのheheに新しいです – user8513203

関連する問題