Rock Paper Scissors Game: Randomized Strategy

Rock Paper Scissors is usually a two-player game that is played by making one of the three different hand shapes. This game is named according to those shapes, i.e., rock, paper, and scissors. A closed fist indicates rock. Paper is shown by a flat hand, and scissor makes the index and middle finger in "V" shaped form.

  The rules of the game are simple. The players simultaneously display a hand shape. The result of a game is either a draw or a win for any one of the players depending on the hand shapes. The rock beats the scissor but faces defeat against the paper. The paper beats the rock but faces defeat against the scissor. The scissor wins against the paper but loses against the rock. If the players make the same hand sign, it is declared a draw/a tie. The following image indicates the interactions between the shapes.


Rock paper scissors interaction

  There are two different approaches to the algorithm of this game. It can choose the move randomly, or it can predict the favorable move by analyzing the patterns of the opponent's previous moves. The target of any two-player game is to gain an advantage over another player, and it becomes difficult when the opponent is truly random. But in real-life, the behavior of humans is not random. An intelligent algorithm that does a frequency analysis of moves can exploit the weakness to gain an advantage over the non-random opponents. In this article, we will discuss the random version of the rock paper scissors game between a user and an algorithm. In section 3, the randomized approach along with the programs is discussed.






1. Algorithm for rock paper scissors game


1. Both players simultaneously make a hand shape.

2. If both make the same move, declare the game a draw.

3. If the first player shows the "rock" and the second player shows the "scissor," declare the first player as the winner.

4. If the first player shows the "scissor" and the second player shows the "paper," declare the first player as the winner.

5. If the first player shows the "paper" and the second player shows the "rock," declare the first player as the winner.

6. For the other cases, declare the second player as the winner.




2. Pseudocode for rock paper scissors game


Input : Move of Player$1$ ($p_1$) and Player$2$ ($p_2$)

Output : Winner of the game

1.Procedure RockPaperScissors($p_1$, $p_2$):

2. If $p_1 = p_2$

3. Return "Draw"

4. If $p_1 = $"rock" and $p_2 = $"scissor"

5. Return "Player 1"

6. Else If $p_1 = $"paper" and $p_2 = $"rock"

7. Return "Player 1"

8. Else If $p_1 = $"scissor" and $p_2 = $"paper"

9. Return "Player 1"

10.Else Return "Player 2"

11.End Procedure





3. Program & Output for Random selection approach

Allowing an algorithm to play a random move can be a simple choice. Though the outcome of randomization is naturally unpredictable, in most cases, it does not help to gain any additional advantage over the opponent. In this section, our goal is to develop a program that can randomly reply with rock, paper, or scissors to its opponent, i.e., the user. The program does not evaluate any previous move sequence to make the current choice. So the theoretical probability of winning or drawing a game is equally likely (33.33%) for the user and the algorithm. To verify this, we conducted five rounds containing 100000 games between two artificial players. The following figure depicts the result.


Result of Rock papaer scissors between two artificial players

So, we can see from the result that the odds of each outcome are significantly around 33.33%. Below, the C, C++, Java, Python, and C# programs for completely random rock paper scissors games are given.




3.1. C Program & output for rock, paper and scissors game by playing random moves

Code has been copied
/***************************************
    	alphabetacoder.com
C program for simple rock paper scissor
game by playing completely random move
****************************************/
#include <stdio.h>
#include<stdlib.h>
#include<time.h>

// function display the move name
void display_move(int m) {
    if (m == 1)
        printf("Rock");
    else if (m == 2)
        printf("Paper");
    else
        printf("Scissor");
}

int main() {
    // feed time as random seed
    srand(time(0));

    // declare variables
    int computer, user;

    // keep repeating until user wants to exit
    while (1) {
        // take input from user
        printf("Enter 1 for Rock.\n");
        printf("Enter 2 for Paper.\n");
        printf("Enter 3 for Scissor.\n");
        printf("Enter 0 to exit.\n");
        printf("Choice >> ");
        scanf("%d", & user);

        // check if player wants to exit
        if (user == 0)
            break;

        // input validation
        if (!(user >= 1 && user <= 3)) {
            printf("\nEnter a valid choice!\n\n");
            continue;
        }

        // computer chooses random move
        // Genearte a random number from 1 to 3
        // Number 1, 2, 3 indicates rock, 
        // paper, scissor resepectively
        computer = rand() % 3 + 1;

        // display the move of each player
        // by calling function
        printf("\nYou played     : ");
        display_move(user);
        printf("\nComputer played: ");
        display_move(computer);

        //check for the winner
        // rock vs paper => paper wins
        // rock vs scissor => rock wins
        // paper vs scissor => scissor wins
        if (computer == user)
            printf("\nIt is a tie!\n");
        else if (computer == 1 && user == 3)
            printf("\nComputer wins!\n");
        else if (computer == 2 && user == 1)
            printf("\nComputer wins!\n");
        else if (computer == 3 && user == 2)
            printf("\nComputer wins!\n");
        else
            printf("\nYou win!\n");

        // new line
        printf("\n");
    }

    return 0;
}

Output


Enter 1 for Rock.

Enter 2 for Paper.

Enter 3 for Scissor.

Enter 0 to exit.

Choice >> 5


Enter a valid choice!


Enter 1 for Rock.

Enter 2 for Paper.

Enter 3 for Scissor.

Enter 0 to exit.

Choice >> 2


You played : Paper

Computer played: Scissor

Computer wins!


Enter 1 for Rock.

Enter 2 for Paper.

Enter 3 for Scissor.

Enter 0 to exit.

Choice >> 3


You played : Scissor

Computer played: Scissor

It is a tie!


Enter 1 for Rock.

Enter 2 for Paper.

Enter 3 for Scissor.

Enter 0 to exit.

Choice >> 1


You played : Rock

Computer played: Scissor

You win!


Enter 1 for Rock.

Enter 2 for Paper.

Enter 3 for Scissor.

Enter 0 to exit.

Choice >> 2


You played : Paper

Computer played: Paper

It is a tie!


Enter 1 for Rock.

Enter 2 for Paper.

Enter 3 for Scissor.

Enter 0 to exit.

Choice >> 1


You played : Rock

Computer played: Scissor

You win!


Enter 1 for Rock.

Enter 2 for Paper.

Enter 3 for Scissor.

Enter 0 to exit.

Choice >> 3


You played : Scissor

Computer played: Rock

Computer wins!


Enter 1 for Rock.

Enter 2 for Paper.

Enter 3 for Scissor.

Enter 0 to exit.

Choice >> 0





3.2. C++ Program for rock, paper and scissors game by playing random moves

Code has been copied
/***************************************
    	alphabetacoder.com
C++ program for simple rock paper scissor
game by playing completely random move
****************************************/
#include<iostream>
#include<cstdlib>
#include<ctime>

using namespace std;

int main() {
    // feed time as random seed
    srand(time(0));

    // declare variables
    int computer, user;
    string move[] = {"Rock", "Paper", "Scissor"};

    // keep repeating until user wants to exit
    while (1) {
        // take input from user
        cout << "Enter 1 for Rock." << endl;
        cout << "Enter 2 for Paper." << endl;
        cout << "Enter 3 for Scissor." << endl;
        cout << "Enter 0 to exit." << endl;
        cout << "Choice >> ";
        cin >> user;

        // check if player wants to exit
        if (user == 0)
            break;

        // input validation
        if (!(user >= 1 && user <= 3)) {
            cout << "\nEnter a valid choice!\n" << endl;
            continue;
        }

        // computer chooses random move
        // Genearte a random number from 1 to 3
        // Number 1, 2, 3 indicates rock, 
        // paper, scissor resepectively
        computer = rand() % 3 + 1;

        // display the move of each player
        // fetch move name from string array
        cout << "\nYou played     : " << move[user - 1];
        cout << "\nComputer played: " << move[computer - 1];

        //check for the winner
        // rock vs paper => paper wins
        // rock vs scissor => rock wins
        // paper vs scissor => scissor wins
        if (computer == user)
            cout << "\nIt is a tie!" << endl;
        else if (computer == 1 && user == 3)
            cout << "\nComputer wins!" << endl;
        else if (computer == 2 && user == 1)
            cout << "\nComputer wins!" << endl;
        else if (computer == 3 && user == 2)
            cout << "\nComputer wins!" << endl;
        else
            cout << "\nYou win!" << endl;

        // new line
        cout << "\n";
    }

    return 0;
}



3.3. Java Program for rock, paper and scissors game by playing random moves

Code has been copied
/****************************************
    	alphabetacoder.com
Java program for simple rock paper scissor
game by playing completely random move
*****************************************/
import java.util.Scanner;
import java.util.Random;

public class Main {
    public static void main(String[] args) {
        // declare variables
        int computer, user;
        // declare an array to store the moves name
        String move[] = {"Rock", "Paper", "Scissor"};

        // create an object of Random class   
        Random random = new Random();
        // create an object of Scanner class
        Scanner sc = new Scanner(System.in);

        // keep repeating until user wants to exit
        while (true) {
            // Display the choices
            System.out.println("Enter 1 for Rock.");
            System.out.println("Enter 2 for Paper.");
            System.out.println("Enter 3 for Scissor.");
            System.out.println("Enter 0 to exit.");
            System.out.print("Choice >> ");
            // take input from user
            user = sc.nextInt();

            // check if player wants to exit
            if (user == 0)
                break;

            // input validation
            if (!(user >= 1 && user <= 3)) {
                System.out.println("\nEnter a valid choice!\n");
                continue;
            }

            // computer chooses random move
            // Generate a random number from 1 to 3
            // Number 1, 2, 3 indicate rock, 
            // paper, scissor resepectively
            computer = random.nextInt(3) + 1;

            // display the move of each player
            // fetch move name from string array
            System.out.print("\nYou played     : " + move[user - 1]);
            System.out.print("\nComputer played: " + move[computer - 1]);

            //check for the winner
            // rock vs paper => paper wins
            // rock vs scissor => rock wins
            // paper vs scissor => scissor wins
            if (computer == user)
                System.out.println("\nIt is a tie!");
            else if (computer == 1 && user == 3)
                System.out.println("\nComputer wins!");
            else if (computer == 2 && user == 1)
                System.out.println("\nComputer wins!");
            else if (computer == 3 && user == 2)
                System.out.println("\nComputer wins!");
            else
                System.out.println("\nYou win!");

            // new line
            System.out.println("");

        }
    }
}



3.4. Python Program for rock, paper and scissors game by playing random moves

Code has been copied
# *********************************************
#             alphabetacoder.com
# Python program for simple rock paper scissor
# game by playing completely random moves
# *********************************************

import random

# declare a list to store move name
move = ["Rock", "Paper", "Scissor"]

# keep playing until user wants to exit
while True:
    # take input from user
    print("Enter 1 for Rock.")
    print("Enter 2 for Paper.")
    print("Enter 3 for Scissor.")
    print("Enter 0 to exit.")
    user = int(input("Choice >> "))

    # check if player wants to exit
    if user == 0:
        break

    # input validation
    if user < 1 or user > 3:
        print("\nEnter a valid choice!\n")
        continue

    # computer chooses random move
    # Genearte a random number from 1 to 3
    # Number 1, 2, 3 indicates rock,
    # paper, scissor resepectively
    computer = random.randint(1, 3)

    # display the move of each player
    # fetch move name from string array
    print("\nYou played     : ", move[user - 1])
    print("Computer played: ", move[computer - 1])

    # check for the winner
    # rock vs paper => paper wins
    # rock vs scissor => rock wins
    # paper vs scissor => scissor wins
    if computer == user:
        print("It is a tie!")
    elif computer == 1 and user == 3:
        print("Computer wins!")
    elif computer == 2 and user == 1:
        print("Computer wins!")
    elif computer == 3 and user == 2:
        print("Computer wins!")
    else:
        print("You win!")

    # new line
    print("")



3.5. C# Program for rock, paper and scissors game by playing random moves

Code has been copied
/***************************************
    	alphabetacoder.com
C# program for simple rock paper scissor
game by playing completely random move
****************************************/

using System;

namespace RockPaperScissor {
    class Program {
        static void Main(string[] args) {
            // declare variables
            int computer, user;
            string[] move = {"Rock", "Paper", "Scissor"};

            // declare instance of class Random
            Random random = new Random();

            // keep repeating until user wants to exit
            while (true) {
                // take input from user
                Console.WriteLine("Enter 1 for Rock.");
                Console.WriteLine("Enter 2 for Paper.");
                Console.WriteLine("Enter 3 for Scissor.");
                Console.WriteLine("Enter 0 to exit.");
                Console.Write("Choice >> ");
                user = Convert.ToInt32(Console.ReadLine());

                // check if player wants to exit
                if (user == 0)
                    break;

                // input validation
                if (!(user >= 1 && user <= 3)) {
                    Console.WriteLine("\nEnter a valid choice!\n");
                    continue;
                }

                // computer chooses random move
                // Genearte a random number from 1 to 3
                // Number 1, 2, 3 indicates rock, 
                // paper, scissor resepectively
                computer = random.Next(1, 4);

                // display the move of each player
                // fetch move name from string array
                Console.WriteLine("\nYou played     : " + move[user - 1]);
                Console.WriteLine("Computer played: " + move[computer - 1]);

                //check for the winner
                // rock vs paper => paper wins
                // rock vs scissor => rock wins
                // paper vs scissor => scissor wins
                if (computer == user)
                    Console.WriteLine("\nIt is a tie!");
                else if (computer == 1 && user == 3)
                    Console.WriteLine("\nComputer wins!");
                else if (computer == 2 && user == 1)
                    Console.WriteLine("\nComputer wins!");
                else if (computer == 3 && user == 2)
                    Console.WriteLine("\nComputer wins!");
                else
                    Console.WriteLine("\nYou win!");

                // new line
                Console.WriteLine("");
            }
            // wait for user to press any key
            Console.ReadKey();
        }
    }
}