summaryrefslogtreecommitdiff
path: root/src/Q2/README.md
blob: f226423d2169724484bfb6fffe3b9874ba7c4317 (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
120
Learning Profile for Assignment #2, And Question #2

Name: Mo Khan
Student ID: 3431709

1. Problem Statement:

```text
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.

Rule 1: Scissors cut paper
Rule 2: Paper covers rock
Rule 3: Rock crushes lizard
Rule 4: Lizard poisons Spock
Rule 5: Spock smashes (or melts) scissors
Rule 6: Scissors decapitate lizard
Rule 7: Lizard eats paper
Rule 8: Paper disproves Spock
Rule 9: Spock vaporizes rock
Rule 10: Rock breaks scissors
```

2. 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.

3. 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.

4. Sample Input and Output:

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!
**************************************
```

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!
**************************************
```

5. 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.