user8513203
user8513203

Reputation: 1

C# How to get the player from the list so I can print out their score

I made a game where you first say how many players there are and then every player throws 3 darts and it loops until one player gets 301 points and now I want to get the player who got more than 301 points from the list of players and I want to get their score so I can print out their score and say that they won at the end of the game but I can't figure out how to do that. Thanks

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);
    }
}

Upvotes: 0

Views: 947

Answers (1)

David
David

Reputation: 218877

Well, this is how you already check if any players match the criteria:

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

So as soon as one does match the criteria, you can get that single player:

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

Or all matching players, if there's more than one:

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

Or just the first matching player, if there's more than one but you only want one:

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

Or perhaps the player with the highest score (not accounting for a tie score):

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

Upvotes: 2

Related Questions