summaryrefslogtreecommitdiff
path: root/src/Q2/README.md
blob: 68676b6b8ee40b3c782f99d1ddc8f54328dd2669 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
Learning Profile for Assignment #2, And Question #2

Name: Mo Khan
Student ID: 3431709

1. Problem Statement

  Write a program that plays the Rock-Paper-Scissors-Lizard-Spock game.
  Refer to http://en.wikipedia.org/wiki/Rock-paper-scissors-lizard-Spock for more information.
  Normally, one player is a human and the other is the computer program.
  However, in this exercise, the program will generate two players who play against each other.
  The play continues until either of the computer-generated players wins four consecutive times.
  In this game, two random integers are generated in the range of [1 to 5], one per player.
  1 refers to Rock, 2 refers to Paper, 3 refers to Scissors, 4 refers to Lizard, and 5 refers to Spock.

  For example, if the computer randomly generates integers 2 and 5 in the first iteration,
  2 is for the first player and 5 is for the second player.
  Based on Rule 8 in the following 10 rules, Paper (2) disproves Spock (5), so Player 1 wins.
  Repeat it to generate one more pair and determine who wins that iteration.
  Continue the iterations until one player wins four consecutive times.

  1. Scissors cut paper
  1. Paper covers rock
  1. Rock crushes lizard
  1. Lizard poisons Spock
  1. Spock smashes (or melts) scissors
  1. Scissors decapitate lizard
  1. Lizard eats paper
  1. Paper disproves Spock
  1. Spock vaporizes rock
  1. Rock breaks scissors

1. Description of the Code

  The main game loop can be found in `main`. This will loop until a winner
  has won at least 4 consecutive times.

  The `Random` class is used to generate a pseudo random number between
  0 - 4. To keep the numbers between 1 - 5, I have incremented this value
  by 1.

  The `play` method prints out the choice for both players, then
  determines the winner and adjusts the last winner and consecutive wins
  fields based on the winner.

1. Errors and Warnings

  When a tie occurs, I assume the previous winner remains the current
  winner.

  This program does not require any user input so the possibilities
  remains low. A possible condition that can occur is an infinite loop due
  to the random number generator producing results that does not allow a
  single player to win 4 consecutive times. One way to handle this
  scenario, is to set a maximum number of rounds that can be played. I
  chose not to implement this.

1. Sample Input and Output

  1. An example of a short game:

    ```bash
    Starting a new game of Rock, paper, scissors, lizard, spock...

    Round: 1
    --------------------------------------
    Player 1: scissor
    Player 2: paper
    Player 1 has 1 consecutive wins.

    Round: 2
    --------------------------------------
    Player 1: scissor
    Player 2: lizard
    Player 1 has 2 consecutive wins.

    Round: 3
    --------------------------------------
    Player 1: rock
    Player 2: lizard
    Player 1 has 3 consecutive wins.

    Round: 4
    --------------------------------------
    Player 1: paper
    Player 2: rock
    Player 1 has 4 consecutive wins.

    **************************************
          The winner is player 1!
    **************************************
    ```

  1. An example of a longer game:

    ```bash
    ...
    Round: 72
    --------------------------------------
    Player 1: paper
    Player 2: paper
    Player 1 has 3 consecutive wins.

    Round: 73
    --------------------------------------
    Player 1: rock
    Player 2: scissor
    Player 1 has 4 consecutive wins.

    **************************************
          The winner is player 1!
    **************************************
    ```

1. Discussion

  I chose to print additional information to the console to make it
  easier to see how many rounds were played and to ensure that the
  correct winner is determined.