Drop hier links of afbeeldingen om ze aan de editor toe te voegen.

The classic game for two.

★★★

Rock paper scissors is a hand game originating from China, played between two people, in which each player simultaneously forms one of three shapes with an outstretched hand. These shapes are "rock" (a closed fist), "paper" (a flat hand), and "scissors" (a fist with the index finger and middle finger extended, forming a V).

Rock, paper, scissors

The rock beats the scissors. The paper beats the rock and the scissors beats the paper. This version of the game is played between a user and the computer over five rounds. The first player to win five rounds wins the game.


Make

Write a program that simulates the game rock, paper, scissors to be played by the user against the computer.

Success Criteria

Remember to add a comment before a subprogram, selection or iteration statement to explain its purpose.

Create a subprogram called get_player_choice that:

  1. Reads the user’s choice of rock, paper or scissors as a letter: r, p or s.
  2. Returns the choice only when it is a valid letter (re-asks if not).

Create a subprogram called convert that:

  1. Takes a string parameter called rps.
  2. If rps is "r" it returns "rock".
  3. If rps is "p" it returns "paper".
  4. If rps is "s" it returns "scissors".

Create a subprogram called get_cpu_choice that:

  1. Generates a random number between 1 and 3.
  2. Returns the choice as "r", "p" or "s" instead of 1, 2 or 3.

Create a subprogram called who_won_round that:

  1. Takes two parameters, player and cpu which are the two choices made.
  2. Determines who won the round.
  3. Returns the winner as "player", "cpu" or "draw".

Create a subprogram called play_game that:

  1. Plays the game as described using the subprograms above.
  2. Outputs the current score of each player before each round. (Winning a round scores one point.)
  3. Outputs the choice of both players, including who beat whom, or if the round was a draw.
  4. Outputs who won the game after one player reaches five points.

Complete the main program so that:

  1. The play_game subprogram is called.

Use two spaces between the two scores in the score line: "player score: {n} cpu score: {m}".

Typical inputs and outputs from the program would be:

player score: 0  cpu score: 0
Enter rock, paper, scissors (r/p/s):
r
player's rock beats cpu's scissors

player score: 1  cpu score: 0
Enter rock, paper, scissors (r/p/s):
p
cpu's scissors beats player's paper

…
🆘 If you're really stuck, use this Parsons code sorting exercise
convert
// Convert r/p/s to rock, paper, scissors
static string convert(string rps)
{
---
    string output = "";
    switch (rps)
    {
---
        case "r":
            output = "rock";
            break;
---
        case "p":
            output = "paper";
            break;
---
        case "s":
            output = "scissors";
            break;
    }
---
    return output;
}
get_player_choice
// Return a valid player choice
static string get_player_choice()
{
---
    bool valid = false;
    string choice = "";
    // Input must be r, p or s
    while (!valid)
    {
---
        Console.WriteLine("Enter rock, paper, scissors (r/p/s):");
        choice = Console.ReadLine();
---
        if (choice == "r" || choice == "p" || choice == "s")
        {
            valid = true;
        }
    }
---
    return choice;
}
get_cpu_choice
// Return a random cpu choice
static string get_cpu_choice()
{
---
    int cpu = random_generator.Next(1, 4);
    string choice = "";
    // Convert the random number to a cpu choice
    switch (cpu)
    {
---
        case 1:
            choice = "r";
            break;
---
        case 2:
            choice = "p";
            break;
---
        case 3:
            choice = "s";
            break;
    }
---
    return choice;
}
who_won_round
// Determine the winner of a round
static string who_won_round(string player, string cpu)
{
---
    string winner = "draw";
    // Check who wins the round
    if (player == "r" && cpu == "s")
    {
        winner = "player";
    }
---
    if (player == "p" && cpu == "r")
    {
        winner = "player";
    }
---
    if (player == "s" && cpu == "p")
    {
        winner = "player";
    }
---
    if (cpu == "r" && player == "s")
    {
        winner = "cpu";
    }
---
    if (cpu == "p" && player == "r")
    {
        winner = "cpu";
    }
---
    if (cpu == "s" && player == "p")
    {
        winner = "cpu";
    }
---
    return winner;
}
play_game
// Procedure to play the game - first to 5 points
static void play_game()
{
---
    int player_score = 0;
    int cpu_score = 0;
    while (player_score < 5 && cpu_score < 5)
    {
---
        Console.WriteLine($"player score: {player_score}  cpu score: {cpu_score}");
        string player_choice = get_player_choice();
        string cpu_choice = get_cpu_choice();
        string round_winner = who_won_round(player_choice, cpu_choice);
        string player_shape = convert(player_choice);
        string cpu_shape = convert(cpu_choice);
---
        // Add to the score
        if (round_winner == "player")
        {
            Console.WriteLine($"player's {player_shape} beats cpu's {cpu_shape}");
            player_score = player_score + 1;
        }
---
        else if (round_winner == "cpu")
        {
            Console.WriteLine($"cpu's {cpu_shape} beats player's {player_shape}");
            cpu_score = cpu_score + 1;
        }
---
        else
        {
            Console.WriteLine($"{player_shape} - {cpu_shape} - it's a draw.");
        }
        Console.WriteLine();
    }
---
    if (player_score == 5)
    {
        Console.WriteLine("PLAYER WINS!");
    }
    else
    {
        Console.WriteLine("CPU WINS!");
    }
}