PlayRockPaperScissorsGame 2.8.2 → 2.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ee2bb2bb97c8f5f18563ffea4140ec576aad0986
4
- data.tar.gz: 04cfb05baa94541dda97fda905c4127431dd73da
3
+ metadata.gz: 763a5c51b1bb097612408a1e4a81d678082c1ab2
4
+ data.tar.gz: 3b1012f1a080d12cd3614ff1cca89d68a0b76560
5
5
  SHA512:
6
- metadata.gz: 75db4a4ebd208a89bc509ad586cbfceb3e0819bb30a6bc52d8aee4f4f7e9b704bfd5366d729b91193bf568c4ddcb9358c53d47d6709174a6d336bf19062353bd
7
- data.tar.gz: 983495d3f36d440a0d8d15e4ff55bd53eef9df6315dd6714a1a4c8c72b7e2689bd27104df375e92f7d791656897a44f17381a1ff202fb02ad7b031d19bd2fd96
6
+ metadata.gz: 9255d2a90ab9f12469c319d042ad8f7bdc57cfcc1bf6c9c524bd9e7ef1688e27be912da0133d334492890a32f39c7a174244dd2c6cc8c8ae30d7e7c68306d5d1
7
+ data.tar.gz: fe4a82a3cd4d97e3009a1dfa3822a3e2f164ad468cccbdca3e108e3d24227e576829db03c23e82c3ad7d4535d22b9a46f66e3e4fd4764b1889d1a05f4f4292aa
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
data/docs/Code.md CHANGED
@@ -35,7 +35,7 @@ Master Code
35
35
  class PlayRockPaperScissorsGame
36
36
 
37
37
  module RockPaperScissors
38
- VERSION = "2.8.2"
38
+ VERSION = "2.8.3"
39
39
  end
40
40
 
41
41
  # import the colorize gem
@@ -141,7 +141,7 @@ class PlayRockPaperScissorsGame
141
141
  def final_outcome(pl,co)
142
142
  return :WIN if pl > co
143
143
  return :LOSE if pl < co
144
- # there will never be a tie due to the code in the play() method
144
+ # there will never be a tie fore the final outcome due to the code in the play() method
145
145
  end
146
146
  end
147
147
  end
@@ -127,7 +127,7 @@ Subtlety is usually painted all over advanced ruby code. While this does make th
127
127
  class PlayRockPaperScissorsGame
128
128
 
129
129
  module RockPaperScissors
130
- VERSION = "2.8.2"
130
+ VERSION = "2.8.3"
131
131
  end
132
132
 
133
133
  # import colorize gem
@@ -212,11 +212,11 @@ class PlayRockPaperScissorsGame
212
212
  def player_choice
213
213
  loop do
214
214
  print ColorizedString["Choose rock (r), paper (p) or scissors (s): "].colorize(:green)
215
- choice = gets.chomp.downcase # read user input and convert to downcase
216
- if Constants::NTRY_TO_SYM.key?(choice) # if the choice is one of the keys in NTRY_TO_SYM
217
- return Constants::NTRY_TO_SYM[choice] # return their choice to be outputed in the play() method
218
- elsif choice != Constants::VALID_ENTRIES # else if the the choice is not one of the valid entries
219
- puts ColorizedString["That entry is invalid. Please re-enter."].colorize(:red) # output invalid entry message
215
+ choice = gets.chomp.downcase
216
+ if Constants::NTRY_TO_SYM.key?(choice)
217
+ return Constants::NTRY_TO_SYM[choice]
218
+ elsif choice != Constants::VALID_ENTRIES
219
+ puts ColorizedString["That entry is invalid. Please re-enter."].colorize(:red) entry message
220
220
  else
221
221
  return nil
222
222
  end
@@ -231,7 +231,7 @@ class PlayRockPaperScissorsGame
231
231
  def final_outcome(pl,co)
232
232
  return :WIN if pl > co
233
233
  return :LOSE if pl < co
234
- # there will never be a tie because of the play() method
234
+ # there will never be a tie for the final outcome because of the play() method
235
235
  end
236
236
  end
237
237
  end
data/docs/_config.yml CHANGED
@@ -18,9 +18,25 @@ exclude:
18
18
  - thumbnail.png
19
19
  - LICENSE
20
20
  - script
21
+ - other_langs.md
21
22
  gems:
22
23
  - github-pages
23
24
  # Sass/SCSS
24
25
  sass:
25
26
  sass_dir: _sass
26
- style: compressed # http://sass-lang.com/documentation/file.SASS_REFERENCE.html#output_style
27
+ style: compressed # http://sass-lang.com/documentation/file.SASS_REFERENCE.html#output_style
28
+ liquid:
29
+ error_mode: warn
30
+ keep_files:
31
+ - ".git"
32
+ - ".svn"
33
+ include:
34
+ - ".htaccess"
35
+ destination: ./_site
36
+ layouts_dir: _layouts
37
+ includes_dir: _includes
38
+ defaults:
39
+ -
40
+ values:
41
+ layout: "default"
42
+ author: "bag3318"
@@ -421,4 +421,4 @@ table {
421
421
  td,
422
422
  th {
423
423
  padding: 0;
424
- }
424
+ }
data/docs/_sass/pace.sass CHANGED
@@ -274,4 +274,5 @@
274
274
  box-shadow: inset 0 0 0 2px #02dd00, inset 0 0 0 7px #FFF
275
275
  border-radius: 10px
276
276
  &.pace-inactive
277
- display: none
277
+ display: none
278
+
@@ -7,7 +7,7 @@
7
7
  <meta name="viewport" content="width=device-width, initial-scale=1"/>
8
8
  <meta name="theme-color" content="#157878"/>
9
9
  <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css' />
10
- <link rel="stylesheet" href="/assets/css/style.css?v=3dd9082979e1ce5b1bc1f09e7289c30e37b3ded2"/>
10
+ <link rel="stylesheet" href="/assets/css/style.css?v=24681c868d0c9f04c3284da474a7c294ed887eef"/>
11
11
  <script src="assets/js/pace.min.js"></script>
12
12
 
13
13
  <link rel="apple-touch-icon" sizes="180x180" href="assets/favicons/apple-touch-icon.png"/>
data/docs/_site/code.html CHANGED
@@ -7,7 +7,7 @@
7
7
  <meta name="viewport" content="width=device-width, initial-scale=1"/>
8
8
  <meta name="theme-color" content="#157878"/>
9
9
  <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css' />
10
- <link rel="stylesheet" href="/assets/css/style.css?v=3dd9082979e1ce5b1bc1f09e7289c30e37b3ded2"/>
10
+ <link rel="stylesheet" href="/assets/css/style.css?v=24681c868d0c9f04c3284da474a7c294ed887eef"/>
11
11
  <script src="assets/js/pace.min.js"></script>
12
12
 
13
13
  <link rel="apple-touch-icon" sizes="180x180" href="assets/favicons/apple-touch-icon.png"/>
@@ -69,7 +69,7 @@
69
69
  <span class="k">class</span> <span class="nc">PlayRockPaperScissorsGame</span>
70
70
 
71
71
  <span class="k">module</span> <span class="nn">RockPaperScissors</span>
72
- <span class="no">VERSION</span> <span class="o">=</span> <span class="s2">"2.8.2"</span>
72
+ <span class="no">VERSION</span> <span class="o">=</span> <span class="s2">"2.8.3"</span>
73
73
  <span class="k">end</span>
74
74
 
75
75
  <span class="c1"># import the colorize gem</span>
@@ -175,7 +175,7 @@
175
175
  <span class="k">def</span> <span class="nf">final_outcome</span><span class="p">(</span><span class="n">pl</span><span class="p">,</span><span class="n">co</span><span class="p">)</span>
176
176
  <span class="k">return</span> <span class="ss">:WIN</span> <span class="k">if</span> <span class="n">pl</span> <span class="o">&gt;</span> <span class="n">co</span>
177
177
  <span class="k">return</span> <span class="ss">:LOSE</span> <span class="k">if</span> <span class="n">pl</span> <span class="o">&lt;</span> <span class="n">co</span>
178
- <span class="c1"># there will never be a tie due to the code in the play() method</span>
178
+ <span class="c1"># there will never be a tie fore the final outcome due to the code in the play() method</span>
179
179
  <span class="k">end</span>
180
180
  <span class="k">end</span>
181
181
  <span class="k">end</span>
@@ -7,7 +7,7 @@
7
7
  <meta name="viewport" content="width=device-width, initial-scale=1"/>
8
8
  <meta name="theme-color" content="#157878"/>
9
9
  <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css' />
10
- <link rel="stylesheet" href="/assets/css/style.css?v=3dd9082979e1ce5b1bc1f09e7289c30e37b3ded2"/>
10
+ <link rel="stylesheet" href="/assets/css/style.css?v=24681c868d0c9f04c3284da474a7c294ed887eef"/>
11
11
  <script src="assets/js/pace.min.js"></script>
12
12
 
13
13
  <link rel="apple-touch-icon" sizes="180x180" href="assets/favicons/apple-touch-icon.png"/>
@@ -179,7 +179,7 @@
179
179
  <div class="language-ruby highlighter-rouge"><pre class="highlight"><code><span class="k">class</span> <span class="nc">PlayRockPaperScissorsGame</span>
180
180
 
181
181
  <span class="k">module</span> <span class="nn">RockPaperScissors</span>
182
- <span class="no">VERSION</span> <span class="o">=</span> <span class="s2">"2.8.2"</span>
182
+ <span class="no">VERSION</span> <span class="o">=</span> <span class="s2">"2.8.3"</span>
183
183
  <span class="k">end</span>
184
184
 
185
185
  <span class="c1"># import colorize gem</span>
@@ -264,11 +264,11 @@
264
264
  <span class="k">def</span> <span class="nf">player_choice</span>
265
265
  <span class="kp">loop</span> <span class="k">do</span>
266
266
  <span class="nb">print</span> <span class="no">ColorizedString</span><span class="p">[</span><span class="s2">"Choose rock (r), paper (p) or scissors (s): "</span><span class="p">].</span><span class="nf">colorize</span><span class="p">(</span><span class="ss">:green</span><span class="p">)</span>
267
- <span class="n">choice</span> <span class="o">=</span> <span class="nb">gets</span><span class="p">.</span><span class="nf">chomp</span><span class="p">.</span><span class="nf">downcase</span> <span class="c1"># read user input and convert to downcase</span>
268
- <span class="k">if</span> <span class="no">Constants</span><span class="o">::</span><span class="no">NTRY_TO_SYM</span><span class="p">.</span><span class="nf">key?</span><span class="p">(</span><span class="n">choice</span><span class="p">)</span> <span class="c1"># if the choice is one of the keys in NTRY_TO_SYM</span>
269
- <span class="k">return</span> <span class="no">Constants</span><span class="o">::</span><span class="no">NTRY_TO_SYM</span><span class="p">[</span><span class="n">choice</span><span class="p">]</span> <span class="c1"># return their choice to be outputed in the play() method</span>
270
- <span class="k">elsif</span> <span class="n">choice</span> <span class="o">!=</span> <span class="no">Constants</span><span class="o">::</span><span class="no">VALID_ENTRIES</span> <span class="c1"># else if the the choice is not one of the valid entries</span>
271
- <span class="nb">puts</span> <span class="no">ColorizedString</span><span class="p">[</span><span class="s2">"That entry is invalid. Please re-enter."</span><span class="p">].</span><span class="nf">colorize</span><span class="p">(</span><span class="ss">:red</span><span class="p">)</span> <span class="c1"># output invalid entry message</span>
267
+ <span class="n">choice</span> <span class="o">=</span> <span class="nb">gets</span><span class="p">.</span><span class="nf">chomp</span><span class="p">.</span><span class="nf">downcase</span>
268
+ <span class="k">if</span> <span class="no">Constants</span><span class="o">::</span><span class="no">NTRY_TO_SYM</span><span class="p">.</span><span class="nf">key?</span><span class="p">(</span><span class="n">choice</span><span class="p">)</span>
269
+ <span class="k">return</span> <span class="no">Constants</span><span class="o">::</span><span class="no">NTRY_TO_SYM</span><span class="p">[</span><span class="n">choice</span><span class="p">]</span>
270
+ <span class="k">elsif</span> <span class="n">choice</span> <span class="o">!=</span> <span class="no">Constants</span><span class="o">::</span><span class="no">VALID_ENTRIES</span>
271
+ <span class="nb">puts</span> <span class="no">ColorizedString</span><span class="p">[</span><span class="s2">"That entry is invalid. Please re-enter."</span><span class="p">].</span><span class="nf">colorize</span><span class="p">(</span><span class="ss">:red</span><span class="p">)</span> <span class="n">entry</span> <span class="n">message</span>
272
272
  <span class="k">else</span>
273
273
  <span class="k">return</span> <span class="kp">nil</span>
274
274
  <span class="k">end</span>
@@ -283,7 +283,7 @@
283
283
  <span class="k">def</span> <span class="nf">final_outcome</span><span class="p">(</span><span class="n">pl</span><span class="p">,</span><span class="n">co</span><span class="p">)</span>
284
284
  <span class="k">return</span> <span class="ss">:WIN</span> <span class="k">if</span> <span class="n">pl</span> <span class="o">&gt;</span> <span class="n">co</span>
285
285
  <span class="k">return</span> <span class="ss">:LOSE</span> <span class="k">if</span> <span class="n">pl</span> <span class="o">&lt;</span> <span class="n">co</span>
286
- <span class="c1"># there will never be a tie because of the play() method</span>
286
+ <span class="c1"># there will never be a tie for the final outcome because of the play() method</span>
287
287
  <span class="k">end</span>
288
288
  <span class="k">end</span>
289
289
  <span class="k">end</span>
@@ -7,7 +7,7 @@
7
7
  <meta name="viewport" content="width=device-width, initial-scale=1"/>
8
8
  <meta name="theme-color" content="#157878"/>
9
9
  <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css' />
10
- <link rel="stylesheet" href="/assets/css/style.css?v=3dd9082979e1ce5b1bc1f09e7289c30e37b3ded2"/>
10
+ <link rel="stylesheet" href="/assets/css/style.css?v=24681c868d0c9f04c3284da474a7c294ed887eef"/>
11
11
  <script src="assets/js/pace.min.js"></script>
12
12
 
13
13
  <link rel="apple-touch-icon" sizes="180x180" href="assets/favicons/apple-touch-icon.png"/>
@@ -7,7 +7,7 @@
7
7
  <meta name="viewport" content="width=device-width, initial-scale=1"/>
8
8
  <meta name="theme-color" content="#157878"/>
9
9
  <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css' />
10
- <link rel="stylesheet" href="/assets/css/style.css?v=3dd9082979e1ce5b1bc1f09e7289c30e37b3ded2"/>
10
+ <link rel="stylesheet" href="/assets/css/style.css?v=24681c868d0c9f04c3284da474a7c294ed887eef"/>
11
11
  <script src="assets/js/pace.min.js"></script>
12
12
 
13
13
  <link rel="apple-touch-icon" sizes="180x180" href="assets/favicons/apple-touch-icon.png"/>
@@ -7,7 +7,7 @@
7
7
  <meta name="viewport" content="width=device-width, initial-scale=1"/>
8
8
  <meta name="theme-color" content="#157878"/>
9
9
  <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css' />
10
- <link rel="stylesheet" href="/assets/css/style.css?v=3dd9082979e1ce5b1bc1f09e7289c30e37b3ded2"/>
10
+ <link rel="stylesheet" href="/assets/css/style.css?v=24681c868d0c9f04c3284da474a7c294ed887eef"/>
11
11
  <script src="assets/js/pace.min.js"></script>
12
12
 
13
13
  <link rel="apple-touch-icon" sizes="180x180" href="assets/favicons/apple-touch-icon.png"/>
@@ -7,7 +7,7 @@
7
7
  <meta name="viewport" content="width=device-width, initial-scale=1"/>
8
8
  <meta name="theme-color" content="#157878"/>
9
9
  <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css' />
10
- <link rel="stylesheet" href="/assets/css/style.css?v=3dd9082979e1ce5b1bc1f09e7289c30e37b3ded2"/>
10
+ <link rel="stylesheet" href="/assets/css/style.css?v=24681c868d0c9f04c3284da474a7c294ed887eef"/>
11
11
  <script src="assets/js/pace.min.js"></script>
12
12
 
13
13
  <link rel="apple-touch-icon" sizes="180x180" href="assets/favicons/apple-touch-icon.png"/>
@@ -0,0 +1,615 @@
1
+ ---
2
+ layout: default
3
+ title: Other Langs - Play Rock Paper Scissors Game
4
+ permalink: /different_code.html
5
+ ---
6
+
7
+ # Other Langs
8
+
9
+ ## Python
10
+
11
+ ```python
12
+ import random
13
+ import sys
14
+
15
+ def makeYourChoice():
16
+ print "Press R for Rock"
17
+ print "Press P for Paper"
18
+ print "Press S for Scissors"
19
+ print "Press Q to quit!"
20
+
21
+ userChoice = raw_input("What do you want to choose?").lower()
22
+
23
+ if userChoice == "r":
24
+ return "Rock"
25
+ if userChoice == "p":
26
+ return "Paper"
27
+ if userChoice == "s":
28
+ return "Scissors"
29
+ if userChoice == "q":
30
+ sys.exit(0)
31
+ else:
32
+ makeYourChoice()
33
+
34
+ def computerRandom():
35
+ options = ["Rock","Paper","Scissors"]
36
+ randomChoice = random.randint(0,2)
37
+ return options[randomChoice]
38
+
39
+ def comparison(humanChoice, computerChoice):
40
+ if humanChoice == computerChoice:
41
+ return "Draw"
42
+ if humanChoice == "Rock" and computerChoice == "Paper":
43
+ return "Computer Wins"
44
+ if humanChoice == "Paper" and computerChoice == "Scissors":
45
+ return "Computer Wins"
46
+ if humanChoice == "Scissors" and computerChoice == "Rock":
47
+ return "Computer Wins"
48
+ else: return "Human Wins"
49
+
50
+ #print makeYourChoice()
51
+
52
+ while True:
53
+ humanChoice = makeYourChoice()
54
+ computerChoice = computerRandom()
55
+
56
+ print "You chose", humanChoice
57
+ print "The computer chose", computerChoice
58
+
59
+ result = comparison (humanChoice, computerChoice)
60
+
61
+ if result == "Draw":
62
+ print "Its a draw"
63
+ elif result == "Computer Wins":
64
+ print "Unlucky you lost!"
65
+ else: print "Well done you won!"
66
+
67
+ print " "
68
+ ```
69
+
70
+ ## Perl
71
+
72
+ ```perl
73
+ use 5.012;
74
+ use warnings;
75
+ use utf8;
76
+ use open qw(:encoding(utf-8) :std);
77
+ use Getopt::Long;
78
+
79
+ =pod
80
+ RPS programmed in Perl
81
+ =cut
82
+
83
+ package Game {
84
+ use List::Util qw(shuffle first);
85
+
86
+ my $turns = 0;
87
+ my %human_choice = ( rock => 0, paper => 0, scissors => 0, );
88
+ my %comp_choice = ( rock => 0, paper => 0, scissors => 0, );
89
+ my %what_beats =
90
+ ( rock => 'paper', paper => 'scissors', scissors => 'rock', );
91
+ my $comp_wins = 0;
92
+ my $human_wins = 0;
93
+ my $draws = 0;
94
+
95
+ sub save_human_choice {
96
+ my $ch = lc pop;
97
+ if ( exists $human_choice{ $ch } ) {
98
+ ++$human_choice{ $ch };
99
+ }
100
+ else {
101
+ die __PACKAGE__ . ":: wrong choice: '$ch'";
102
+ }
103
+ }
104
+
105
+ sub get_comp_choice {
106
+ my @keys = shuffle keys %human_choice;
107
+ my $ch;
108
+ my ( $prob, $rand ) = ( 0, rand );
109
+ $ch = ( first { $rand <= ( $prob += ( $human_choice{ $_ } / $turns ) ) } @keys )
110
+ if $turns > 0;
111
+ $ch //= $keys[0];
112
+ $ch = $what_beats{ $ch };
113
+ ++$comp_choice{ $ch };
114
+ return $ch;
115
+ }
116
+
117
+ sub make_turn {
118
+ my ( $comp_ch, $human_ch ) = ( pop(), pop() );
119
+ ++$turns;
120
+ if ( $what_beats{ $human_ch } eq $comp_ch ) {
121
+ ++$comp_wins;
122
+ return 'I win!';
123
+ }
124
+ elsif ( $what_beats{ $comp_ch } eq $human_ch ) {
125
+ ++$human_wins;
126
+ return 'You win!';
127
+ }
128
+ else {
129
+ ++$draws;
130
+ return 'Draw!';
131
+ }
132
+ }
133
+
134
+ sub get_final_report {
135
+ my $report =
136
+ "You chose:\n"
137
+ . " rock = $human_choice{rock} times,\n"
138
+ . " paper = $human_choice{paper} times,\n"
139
+ . " scissors = $human_choice{scissors} times,\n"
140
+ . "I chose:\n"
141
+ . " rock = $comp_choice{rock} times,\n"
142
+ . " paper = $comp_choice{paper} times,\n"
143
+ . " scissors = $comp_choice{scissors} times,\n"
144
+ . "Turns: $turns\n"
145
+ . "I won: $comp_wins, you won: $human_wins, draws: $draws\n";
146
+ return $report;
147
+ }
148
+ }
149
+
150
+ sub main {
151
+ GetOptions( 'quiet' => \my $quiet );
152
+ greet() if !$quiet;
153
+ while (1) {
154
+ print_next_line() if !$quiet;
155
+ my $input = get_input();
156
+ last unless $input;
157
+ if ( $input eq 'error' ) {
158
+ print "I don't understand!\n" if !$quiet;
159
+ redo;
160
+ }
161
+ my $comp_choice = Game::get_comp_choice();
162
+ Game::save_human_choice($input);
163
+ my $result = Game::make_turn( $input, $comp_choice );
164
+ describe_turn_result( $input, $comp_choice, $result )
165
+ if !$quiet;
166
+ }
167
+ print Game::get_final_report();
168
+ }
169
+
170
+ sub greet {
171
+ print "Welcome to the Rock-Paper-Scissors game!\n"
172
+ . "Choose 'rock', 'paper' or 'scissors'\n"
173
+ . "Enter empty line or 'quit' to quit\n";
174
+ }
175
+
176
+ sub print_next_line {
177
+ print 'Your choice: ';
178
+ }
179
+
180
+ sub get_input {
181
+ my $input = <>;
182
+ print "\n" and return if !$input; # EOF
183
+ chomp $input;
184
+ return if !$input or $input =~ m/\A \s* q/xi;
185
+ return
186
+ ( $input =~ m/\A \s* r/xi ) ? 'rock'
187
+ : ( $input =~ m/\A \s* p/xi ) ? 'paper'
188
+ : ( $input =~ m/\A \s* s/xi ) ? 'scissors'
189
+ : 'error';
190
+ }
191
+
192
+ sub describe_turn_result {
193
+ my ( $human_ch, $comp_ch, $result ) = @_;
194
+ print "You chose \u$human_ch, I chose \u$comp_ch. $result\n";
195
+ }
196
+
197
+ main();
198
+ ```
199
+
200
+ ## C\#
201
+
202
+ ```csharp
203
+ using System;
204
+ using System.Collections.Generic;
205
+ using System.Linq;
206
+
207
+ namespace RockPaperScissors
208
+ {
209
+ class Program
210
+ {
211
+ static void Main(string[] args)
212
+ {
213
+ // There is no limit on the amount of weapons supported by RPSGame. Matchups are calculated depending on the order.
214
+ var rps = new RPSGame("scissors", "paper", "rock", "lizard", "spock");
215
+
216
+ int wins = 0, losses = 0, draws = 0;
217
+
218
+ while (true)
219
+ {
220
+ Console.WriteLine("Make your move: " + string.Join(", ", rps.Weapons) + ", quit");
221
+
222
+ string weapon = Console.ReadLine().Trim().ToLower();
223
+
224
+ if (weapon == "quit")
225
+ break;
226
+
227
+ if (!rps.Weapons.Contains(weapon))
228
+ {
229
+ Console.WriteLine("Invalid weapon!");
230
+ continue;
231
+ }
232
+
233
+ int result = rps.Next(weapon);
234
+
235
+ Console.WriteLine("You chose {0} and your opponent chose {1}!", weapon, rps.LastAIWeapon);
236
+
237
+ switch (result)
238
+ {
239
+ case 1: Console.WriteLine("{0} pwns {1}. You're a winner!", weapon, rps.LastAIWeapon);
240
+ wins++;
241
+ break;
242
+ case 0: Console.WriteLine("Draw!");
243
+ draws++;
244
+ break;
245
+ case -1: Console.WriteLine("{0} pwns {1}. You're a loser!", rps.LastAIWeapon, weapon);
246
+ losses++;
247
+ break;
248
+ }
249
+
250
+ Console.WriteLine();
251
+ }
252
+
253
+ Console.WriteLine("\nPlayer Statistics\nWins: {0}\nLosses: {1}\nDraws: {2}", wins, losses, draws);
254
+ }
255
+
256
+ class RPSGame
257
+ {
258
+ public RPSGame(params string[] weapons)
259
+ {
260
+ Weapons = weapons;
261
+
262
+ // Creates a new AI opponent, and gives it the list of weapons.
263
+ _rpsAI = new RPSAI(weapons);
264
+ }
265
+
266
+ // Play next turn.
267
+ public int Next(string weapon)
268
+ {
269
+ string aiWeapon = _rpsAI.NextMove(); // Gets the AI opponent's next move.
270
+ LastAIWeapon = aiWeapon; // Saves the AI opponent's move in a property so the player can see it.
271
+
272
+ _rpsAI.AddPlayerMove(weapon); // Let the AI know which weapon the player chose, for future predictions.
273
+ return GetWinner(Weapons, weapon, aiWeapon); // Returns -1 if AI win, 0 if draw, and 1 if player win.
274
+ }
275
+
276
+ // Returns matchup winner.
277
+ public static int GetWinner(string[] weapons, string weapon1, string weapon2)
278
+ {
279
+ if (weapon1 == weapon2)
280
+ return 0; // If weapons are the same, return 0 for draw.
281
+
282
+ if (GetVictories(weapons, weapon1).Contains(weapon2))
283
+ return 1; // Returns 1 for weapon1 win.
284
+ else if (GetVictories(weapons, weapon2).Contains(weapon1))
285
+ return -1; // Returns -1 for weapon2 win.
286
+
287
+ throw new Exception("No winner found.");
288
+ }
289
+
290
+ /*
291
+ * Return weapons that the provided weapon beats.
292
+ * The are calculated in the following way:
293
+ * If the index of the weapon is even, then all even indices less than it,
294
+ * and all odd indices greater than it, are victories.
295
+ * One exception is if it is an odd index, and also the last index in the set,
296
+ * then the first index in the set is a victory.
297
+ */
298
+ public static IEnumerable<string> GetVictories(string[] weapons, string weapon)
299
+ {
300
+ // Gets index of weapon.
301
+ int index = Array.IndexOf(weapons, weapon);
302
+
303
+ // If weapon is odd and the final index in the set, then return the first item in the set as a victory.
304
+ if (index % 2 != 0 && index == weapons.Length - 1)
305
+ yield return weapons[0];
306
+
307
+ for (int i = index - 2; i >= 0; i -= 2)
308
+ yield return weapons[i];
309
+
310
+ for (int i = index + 1; i < weapons.Length; i += 2)
311
+ yield return weapons[i];
312
+ }
313
+
314
+ public string LastAIWeapon
315
+ {
316
+ private set;
317
+ get;
318
+ }
319
+
320
+ public readonly string[] Weapons;
321
+ private RPSAI _rpsAI;
322
+
323
+ class RPSAI
324
+ {
325
+ public RPSAI(params string[] weapons)
326
+ {
327
+ _weapons = weapons;
328
+ _weaponProbability = new Dictionary<string, int>();
329
+
330
+ // The AI sets the probability for each weapon to be chosen as 1.
331
+ foreach (string weapon in weapons)
332
+ _weaponProbability.Add(weapon, 1);
333
+
334
+ _random = new Random();
335
+ }
336
+
337
+ // Increases probability of selecting each weapon that beats the provided move.
338
+ public void AddPlayerMove(string weapon)
339
+ {
340
+ int index = Array.IndexOf(_weapons, weapon);
341
+
342
+ foreach (string winWeapon in _weapons.Except(GetVictories(_weapons, weapon)))
343
+ if (winWeapon != weapon)
344
+ _weaponProbability[winWeapon]++;
345
+ }
346
+
347
+ // Gets the AI's next move.
348
+ public string NextMove()
349
+ {
350
+ double r = _random.NextDouble();
351
+
352
+ double divisor = _weaponProbability.Values.Sum();
353
+
354
+ var weightedWeaponRanges = new Dictionary<double, string>();
355
+
356
+ double currentPos = 0.0;
357
+
358
+ // Maps probabilities to ranges between 0.0 and 1.0. Returns weighted random weapon.
359
+ foreach (var weapon in _weaponProbability)
360
+ {
361
+ double weightedRange = weapon.Value / divisor;
362
+ if (r <= currentPos + (weapon.Value / divisor))
363
+ return weapon.Key;
364
+ currentPos += weightedRange;
365
+ }
366
+
367
+ throw new Exception("Error calculating move.");
368
+ }
369
+
370
+ Random _random;
371
+ private readonly string[] _weapons;
372
+ private Dictionary<string, int> _weaponProbability;
373
+ }
374
+ }
375
+ }
376
+ }
377
+ ```
378
+
379
+ ## C++
380
+
381
+ ```cpp
382
+ #include <windows.h>
383
+ #include <iostream>
384
+ #include <string>
385
+
386
+ //-------------------------------------------------------------------------------
387
+ using namespace std;
388
+
389
+ //-------------------------------------------------------------------------------
390
+ enum choices { ROCK, SPOCK, PAPER, LIZARD, SCISSORS, MX_C };
391
+ enum indexes { PLAYER, COMPUTER, DRAW };
392
+
393
+ //-------------------------------------------------------------------------------
394
+ class stats
395
+ {
396
+ public:
397
+ stats() : _draw( 0 )
398
+ {
399
+ ZeroMemory( _moves, sizeof( _moves ) );
400
+ ZeroMemory( _win, sizeof( _win ) );
401
+ }
402
+ void draw() { _draw++; }
403
+ void win( int p ) { _win[p]++; }
404
+ void move( int p, int m ) { _moves[p][m]++; }
405
+ int getMove( int p, int m ) { return _moves[p][m]; }
406
+ string format( int a )
407
+ {
408
+ char t[32];
409
+ wsprintf( t, "%.3d", a );
410
+ string d( t );
411
+ return d;
412
+ }
413
+
414
+ void print()
415
+ {
416
+ string d = format( _draw ),
417
+ pw = format( _win[PLAYER] ), cw = format( _win[COMPUTER] ),
418
+ pr = format( _moves[PLAYER][ROCK] ), cr = format( _moves[COMPUTER][ROCK] ),
419
+ pp = format( _moves[PLAYER][PAPER] ), cp = format( _moves[COMPUTER][PAPER] ),
420
+ ps = format( _moves[PLAYER][SCISSORS] ), cs = format( _moves[COMPUTER][SCISSORS] ),
421
+ pl = format( _moves[PLAYER][LIZARD] ), cl = format( _moves[COMPUTER][LIZARD] ),
422
+ pk = format( _moves[PLAYER][SPOCK] ), ck = format( _moves[COMPUTER][SPOCK] );
423
+
424
+ system( "cls" );
425
+ cout << endl;
426
+ cout << "+----------+-------+--------+--------+---------+----------+--------+---------+" << endl;
427
+ cout << "| | WON | DRAW | ROCK | PAPER | SCISSORS | LIZARD | SPOCK |" << endl;
428
+ cout << "+----------+-------+--------+--------+---------+----------+--------+---------+" << endl;
429
+ cout << "| PLAYER | " << pw << " | | " << pr << " | " << pp << " | " << ps << " | " << pl << " | " << pk << " |" << endl;
430
+ cout << "+----------+-------+ " << d << " +--------+---------+----------+--------+---------+" << endl;
431
+ cout << "| COMPUTER | " << cw << " | | " << cr << " | " << cp << " | " << cs << " | " << cl << " | " << ck << " |" << endl;
432
+ cout << "+----------+-------+--------+--------+---------+----------+--------+---------+" << endl;
433
+ cout << endl << endl;
434
+
435
+ system( "pause" );
436
+
437
+ }
438
+
439
+ private:
440
+ int _moves[2][MX_C], _win[2], _draw;
441
+ };
442
+ //-------------------------------------------------------------------------------
443
+ class rps
444
+ {
445
+ private:
446
+ int makeMove()
447
+ {
448
+ int total = 0, r, s;
449
+ for( int i = 0; i < MX_C; total += statistics.getMove( PLAYER, i++ ) );
450
+ r = rand() % total;
451
+
452
+ for( int i = ROCK; i < SCISSORS; i++ )
453
+ {
454
+ s = statistics.getMove( PLAYER, i );
455
+ if( r < s ) return ( i + 1 );
456
+ r -= s;
457
+ }
458
+
459
+ return ROCK;
460
+ }
461
+
462
+ void printMove( int p, int m )
463
+ {
464
+ if( p == COMPUTER ) cout << "My move: ";
465
+ else cout << "Your move: ";
466
+
467
+ switch( m )
468
+ {
469
+ case ROCK: cout << "ROCK\n"; break;
470
+ case PAPER: cout << "PAPER\n"; break;
471
+ case SCISSORS: cout << "SCISSORS\n"; break;
472
+ case LIZARD: cout << "LIZARD\n"; break;
473
+ case SPOCK: cout << "SPOCK\n";
474
+ }
475
+ }
476
+
477
+ public:
478
+ rps()
479
+ {
480
+ checker[ROCK][ROCK] = 2; checker[ROCK][PAPER] = 1; checker[ROCK][SCISSORS] = 0; checker[ROCK][LIZARD] = 0; checker[ROCK][SPOCK] = 1;
481
+ checker[PAPER][ROCK] = 0; checker[PAPER][PAPER] = 2; checker[PAPER][SCISSORS] = 1; checker[PAPER][LIZARD] = 1; checker[PAPER][SPOCK] = 0;
482
+ checker[SCISSORS][ROCK] = 1; checker[SCISSORS][PAPER] = 0; checker[SCISSORS][SCISSORS] = 2; checker[SCISSORS][LIZARD] = 0; checker[SCISSORS][SPOCK] = 1;
483
+ checker[LIZARD][ROCK] = 1; checker[LIZARD][PAPER] = 0; checker[LIZARD][SCISSORS] = 1; checker[LIZARD][LIZARD] = 2; checker[LIZARD][SPOCK] = 0;
484
+ checker[SPOCK][ROCK] = 0; checker[SPOCK][PAPER] = 1; checker[SPOCK][SCISSORS] = 0; checker[SPOCK][LIZARD] = 1; checker[SPOCK][SPOCK] = 2;
485
+ }
486
+ void play()
487
+ {
488
+ int p, r, m;
489
+ while( true )
490
+ {
491
+ cout << "What is your move (1)ROCK (2)SPOCK (3)PAPER (4)LIZARD (5)SCISSORS (0)Quit ? ";
492
+ cin >> p;
493
+ if( !p || p < 0 ) break;
494
+ if( p > 0 && p < 6 )
495
+ {
496
+ p--;
497
+ cout << endl;
498
+ printMove( PLAYER, p );
499
+ statistics.move( PLAYER, p );
500
+
501
+ m = makeMove();
502
+ statistics.move( COMPUTER, m );
503
+ printMove( COMPUTER, m );
504
+
505
+ r = checker[p][m];
506
+ switch( r )
507
+ {
508
+ case DRAW:
509
+ cout << endl << "DRAW!" << endl << endl;
510
+ statistics.draw();
511
+ break;
512
+ case COMPUTER:
513
+ cout << endl << "I WIN!" << endl << endl;
514
+ statistics.win( COMPUTER );
515
+ break;
516
+ case PLAYER:
517
+ cout << endl << "YOU WIN!" << endl << endl;
518
+ statistics.win( PLAYER );
519
+
520
+ }
521
+ system( "pause" );
522
+ }
523
+ system( "cls" );
524
+ }
525
+ statistics.print();
526
+ }
527
+
528
+ private:
529
+ stats statistics;
530
+ int checker[MX_C][MX_C];
531
+ };
532
+ //-------------------------------------------------------------------------------
533
+ int main( int argc, char* argv[] )
534
+ {
535
+ srand( GetTickCount() );
536
+ rps game;
537
+ game.play();
538
+ return 0;
539
+ }
540
+ //-------------------------------------------------------------------------------
541
+ ```
542
+
543
+ ## Go
544
+
545
+ ```go
546
+
547
+ package main
548
+ import (
549
+ "fmt"
550
+ "math/rand"
551
+ "strings"
552
+ "time"
553
+ )
554
+
555
+ const rps = "rps"
556
+
557
+ var msg = []string{
558
+ "Rock breaks scissors",
559
+ "Paper covers rock",
560
+ "Scissors cut paper",
561
+ }
562
+
563
+ func main() {
564
+ rand.Seed(time.Now().UnixNano())
565
+ fmt.Println("Rock Paper Scissors")
566
+ fmt.Println("Enter r, p, or s as your play. Anything else ends the game.")
567
+ fmt.Println("Running score shown as <your wins>:<my wins>")
568
+ var pi string // player input
569
+ var aScore, pScore int
570
+ sl := 3 // for output alignment
571
+ pcf := make([]int, 3) // pcf = player choice frequency
572
+ var plays int
573
+ aChoice := rand.Intn(3) // ai choice for first play is completely random
574
+ for {
575
+ // get player choice
576
+ fmt.Print("Play: ")
577
+ _, err := fmt.Scanln(&pi) // lazy
578
+ if err != nil || len(pi) != 1 {
579
+ break
580
+ }
581
+ pChoice := strings.Index(rps, pi)
582
+ if pChoice < 0 {
583
+ break
584
+ }
585
+ pcf[pChoice]++
586
+ plays++
587
+
588
+ // show result of play
589
+ fmt.Printf("My play:%s%c. ", strings.Repeat(" ", sl-2), rps[aChoice])
590
+ switch (aChoice - pChoice + 3) % 3 {
591
+ case 0:
592
+ fmt.Println("Tie.")
593
+ case 1:
594
+ fmt.Printf("%s. My point.\n", msg[aChoice])
595
+ aScore++
596
+ case 2:
597
+ fmt.Printf("%s. Your point.\n", msg[pChoice])
598
+ pScore++
599
+ }
600
+
601
+ // show score
602
+ sl, _ = fmt.Printf("%d:%d ", pScore, aScore)
603
+
604
+ // compute ai choice for next play
605
+ switch rn := rand.Intn(plays); {
606
+ case rn < pcf[0]:
607
+ aChoice = 1
608
+ case rn < pcf[0]+pcf[1]:
609
+ aChoice = 2
610
+ default:
611
+ aChoice = 0
612
+ }
613
+ }
614
+ }
615
+ ```
data/lib/rps/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module RockPaperScissors
2
- VERSION = "2.8.2"
2
+ VERSION = "2.8.3"
3
3
  end
data/rps.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "PlayRockPaperScissorsGame"
3
- spec.version = "2.8.2"
4
- spec.date = "2017-05-11"
3
+ spec.version = "2.8.3"
4
+ spec.date = "2017-05-15"
5
5
  spec.summary = "A Rock Paper Scissors Ruby Gem"
6
6
  spec.description = <<-EOF
7
7
  A Ruby-programmed rock paper scissors game.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: PlayRockPaperScissorsGame
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.2
4
+ version: 2.8.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - bag3318
@@ -30,7 +30,7 @@ cert_chain:
30
30
  ft+uhriUZSVDBJRLSlrQEH2f0866a9dA4oUmvvFU46Mh6pozDjOcLJIp/tCnbVOc
31
31
  HSdXPrjfOoDbhBPH/4wUd5P0rDoNKN1hxH4SzA==
32
32
  -----END CERTIFICATE-----
33
- date: 2017-05-11 00:00:00.000000000 Z
33
+ date: 2017-05-15 00:00:00.000000000 Z
34
34
  dependencies:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: bundler
@@ -171,6 +171,7 @@ files:
171
171
  - docs/assets/js/pace.min.js
172
172
  - docs/index.md
173
173
  - docs/jekyll-theme-cayman.gemspec
174
+ - docs/other_langs.md
174
175
  - docs/script/bootstrap
175
176
  - docs/script/cibuild
176
177
  - docs/script/release
metadata.gz.sig CHANGED
Binary file