pc 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 8a2fea4f3614c7570e83780e38056f2b76da1717b296fd7c7bb7c35cf3117ec3
4
+ data.tar.gz: e4c4cff0c80bf71edb0c16b28dad145ff91c6d02fceb139a942845fec0d03d63
5
+ SHA512:
6
+ metadata.gz: 27c00563d967c8d4afa5f7a3a246ddcea54f8319694c0ffc210a8e3aedafa26a173331268b71a29b3d3313f67f1550ea43a6f1a73215e400a08b909ce256471c
7
+ data.tar.gz: 382d917448450fceced47a1a82462f88e1ab25f77e079903814f07dc6f09d442343b8934cf1e6cc29645e38e7b6a4ffa154e9f8a3b25d0210f75576c5c9660fc
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'debugger'
4
+
5
+ # Specify your gem's dependencies in pc.gemspec
6
+ gemspec
data/HISTORY.md ADDED
@@ -0,0 +1,15 @@
1
+ v0.0.4 - 2014/02/09
2
+
3
+ * Rewritten with Module, no Singleton class
4
+ * More compact files for each game and interface
5
+ * Room for separate player modules (Human, Random, Smart)
6
+
7
+ v0.0.3 - 2014/02/05
8
+
9
+ * Add Odd Or Evens game
10
+ * Separate interface, game and moves into modules
11
+ * Integrate Campfire with Nico gem
12
+
13
+ v0.0.2 - 2014/02/05
14
+
15
+ * Shell-only Rock Paper Scissors game
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 claudiob
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,33 @@
1
+ # Pc
2
+
3
+ King of the Game Jungle
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'pc'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install pc
18
+
19
+ ## Usage
20
+
21
+ From the command line run:
22
+
23
+ $ pc
24
+
25
+ To use Campfire as an interface, define the following environment variables: `CAMPFIRE_SUBDOMAIN`, `CAMPFIRE_ROOM_ID` and `CAMPFIRE_TOKEN`.
26
+
27
+ ## Contributing
28
+
29
+ 1. Fork it ( http://github.com/claudiob/pc/fork )
30
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
31
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
32
+ 4. Push to the branch (`git push origin my-new-feature`)
33
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/tarzan ADDED
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'pc'
5
+ rescue LoadError
6
+ require 'rubygems'
7
+ require 'pc'
8
+ end
9
+
10
+ puts %{Pick [S]hell, [C]ampfire, or [D]esktop: }
11
+ interface = case gets.strip
12
+ when 'S'
13
+ require 'pc/interfaces/shell'
14
+ Pc::Tournament.run Pc::Shell
15
+ when 'C'
16
+ require 'pc/interfaces/campfire'
17
+ Pc::Tournament.run Pc::Campfire, subdomain: ENV['CAMPFIRE_SUBDOMAIN'], room_id: ENV['CAMPFIRE_ROOM_ID'], token: ENV['CAMPFIRE_TOKEN']
18
+ when 'D'
19
+ require 'pc/interfaces/desktop'
20
+ Pc::Tournament.run Pc::Desktop
21
+ end
data/lib/pc.rb ADDED
@@ -0,0 +1 @@
1
+ require 'pc/tournament'
data/lib/pc/game.rb ADDED
@@ -0,0 +1,50 @@
1
+ require 'pc/loop'
2
+
3
+ module Pc
4
+ module Game
5
+ include Loop
6
+
7
+ def self.included(base)
8
+ base.extend base
9
+ end
10
+
11
+ def welcome
12
+ say %{Rules: #{rules}}, next: ->{prompt_move}
13
+ end
14
+
15
+ def rules
16
+ '[no rules defined]'
17
+ end
18
+
19
+ def moves
20
+ {}
21
+ end
22
+
23
+ def prompt_move
24
+ ask %{Choose a move}, Hash[*moves.map{|k, v| [k, ->{choose v}]}.flatten]
25
+ end
26
+
27
+ def choose(choice)
28
+ @move_p1 = choice
29
+ @move_p2 = random_move
30
+ say %{You played #{@move_p1} - I played #{@move_p2}}, next: ->{show_outcome}
31
+ end
32
+
33
+ def random_move
34
+ moves.values.sample
35
+ end
36
+
37
+ def show_outcome
38
+ outcome = case compare_moves(@move_p1, @move_p2)
39
+ when 1 then %{You win!}
40
+ when -1 then %{You lose!}
41
+ when 0 then %{It’s a tie!}
42
+ end
43
+ say outcome, next: ->{exit}
44
+ end
45
+
46
+ def compare_moves(move_a, move_b)
47
+ move_a <=> move_b
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,22 @@
1
+ require 'pc/game'
2
+
3
+ module Pc
4
+ module OddsAndEvens
5
+ include Game
6
+
7
+ def rules
8
+ 'Odd sum wins, even sum loses'
9
+ end
10
+
11
+ def moves
12
+ {'1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5}
13
+ end
14
+
15
+ def compare_moves(move_a, move_b)
16
+ case move_a + move_b # might need finger_offset
17
+ when ->(sum) { sum.odd? } then 1
18
+ when ->(sum) { sum.even? } then -1
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,23 @@
1
+ require 'pc/game'
2
+
3
+ module Pc
4
+ module RockPaperScissors
5
+ include Game
6
+
7
+ def rules
8
+ 'Rock beats Scissors beats Paper beats Rock'
9
+ end
10
+
11
+ def moves
12
+ {rock: 'R', paper: 'P', scissors: 'S'}
13
+ end
14
+
15
+ def compare_moves(move_a, move_b)
16
+ case "#{move_a}#{move_b}"
17
+ when 'RS', 'SP', 'PR' then 1
18
+ when 'RP', 'SR', 'PS' then -1
19
+ else 0
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,13 @@
1
+ module Pc
2
+ module Interface
3
+ def self.included(base)
4
+ base.extend base
5
+ end
6
+
7
+ def run(options = {})
8
+ end
9
+
10
+ def enqueue(message, choices = {})
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,39 @@
1
+ require 'pc/interface'
2
+ require 'nico'
3
+ require 'net/http'
4
+
5
+ module Pc
6
+ module Campfire
7
+ include Interface
8
+
9
+ def run(options = {})
10
+ @room ||= Nico::Room.new options
11
+ while action = (@actions ||= []).shift
12
+ say action[:message]
13
+ choose(action[:choices]).call
14
+ run
15
+ end
16
+ end
17
+
18
+ def enqueue(message, choices = {})
19
+ (@actions ||= []).push message: message, choices: choices
20
+ end
21
+
22
+ def say(message)
23
+ @room.say message
24
+ end
25
+
26
+ def choose(choices = {})
27
+ if choices[:next]
28
+ sleep 0.2
29
+ choices[:next]
30
+ else
31
+ say %{Pick one: #{choices.keys.join ' - '} }
32
+ @room.each_message do |message|
33
+ choice = choices.select{|k,v| k.to_s == message}.values.first
34
+ return choice if choice
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,17 @@
1
+ require 'pc/interface'
2
+ require 'pc/interfaces/desktop/window'
3
+
4
+ module Pc
5
+ module Desktop
6
+ include Interface
7
+
8
+ def run(options = {})
9
+ Window.instance.show
10
+ end
11
+
12
+ def enqueue(message, choices = {})
13
+ Window.instance.set_alert message
14
+ Window.instance.set_buttons choices
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,91 @@
1
+ require 'singleton'
2
+ require 'gosu'
3
+
4
+ module Pc
5
+ class Window < Gosu::Window
6
+ include Singleton
7
+
8
+ def initialize
9
+ super 640, 480, is_fullscreen
10
+ self.caption = 'Game Hall'
11
+ @font = Gosu::Font.new self, Gosu::default_font_name, 20
12
+ end
13
+
14
+ def set_alert(message)
15
+ @alert = message
16
+ end
17
+
18
+ def set_buttons(choices = {})
19
+ @buttons = choices.map.with_index do |(key, value), index|
20
+ {timeout: Time.now + 1.2, label: key, action: value, x1: 100, x2: 200, y1: 30+index*30, y2: 50+index*30}
21
+ end
22
+ end
23
+
24
+ # This method is called once every #update_interval milliseconds while the window is being shown.
25
+ def update
26
+ @buttons.each do |button, index|
27
+ if button[:timeout] < Time.now && button[:label] == :next
28
+ @buttons = nil
29
+ button[:action].call
30
+ break
31
+ end
32
+ end if @buttons
33
+ end
34
+
35
+ def draw_text(text)
36
+ @font.draw @alert, 200, 450, 2 # TO DO: center the text
37
+ end
38
+
39
+ def draw_rectangle(button)
40
+ c1, c2 = [Gosu::Color.new(0xFF1EB1FA), Gosu::Color.new(0xFF1D4DB5)]
41
+ x1, x2, y1, y2 = [button[:x1], button[:x2], button[:y1], button[:y2]]
42
+ z_index = 0
43
+ draw_quad x1, y1, c1, x2, y1, c1, x1, y2, c2, x2, y2, c2, z_index
44
+ end
45
+
46
+ def draw_buttons(buttons)
47
+ buttons.reject{|button| button[:label] == :next}.each do |button|
48
+ draw_rectangle button
49
+ @font.draw button[:label], button[:x1], button[:y1], 2
50
+ end
51
+ end
52
+
53
+ # This method is called after every update and whenever the OS wants the window to repaint itself.
54
+ def draw
55
+ draw_text @alert if @alert
56
+ draw_buttons @buttons if @buttons
57
+ end
58
+
59
+ # This method is called whenever a key is pressed down
60
+ def button_down(id)
61
+ case id
62
+ when Gosu::KbEscape then close
63
+ end
64
+ end
65
+
66
+ # This method is called whenever a key is pressed up
67
+ def button_up(id)
68
+ case id
69
+ when Gosu::MsLeft
70
+ @buttons.each do |button, index|
71
+ if button[:y1] < mouse_y && mouse_y < button[:y2] && button[:x1] < mouse_x && mouse_x < button[:x2]
72
+ @buttons = nil
73
+ button[:action].call
74
+ break
75
+ end
76
+ end if @buttons
77
+ end
78
+ end
79
+
80
+ private
81
+
82
+ def is_fullscreen
83
+ false
84
+ end
85
+
86
+ # [from Gosu::Window] Whether the system cursor should be shown
87
+ def needs_cursor?
88
+ true
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,34 @@
1
+ require 'pc/interface'
2
+
3
+ module Pc
4
+ module Shell
5
+ include Interface
6
+
7
+ def run(options = {})
8
+ while action = (@actions ||= []).shift
9
+ say action[:message]
10
+ choose(action[:choices]).call
11
+ run
12
+ end
13
+ end
14
+
15
+ def enqueue(message, choices = {})
16
+ (@actions ||= []).push message: message, choices: choices
17
+ end
18
+
19
+ def say(message)
20
+ puts message
21
+ end
22
+
23
+ def choose(choices = {})
24
+ if choices[:next]
25
+ sleep 0.2
26
+ choices[:next]
27
+ else
28
+ say %{Pick one: #{choices.keys.join ' - '} }
29
+ choice = gets.strip
30
+ choices.select{|k,v| k.to_s == choice}.values.first || prompt(choices)
31
+ end
32
+ end
33
+ end
34
+ end
data/lib/pc/loop.rb ADDED
@@ -0,0 +1,31 @@
1
+ module Pc
2
+ module Loop
3
+ def self.included(base)
4
+ base.extend base
5
+ end
6
+
7
+ def run(interface, options = {})
8
+ @interface ||= interface
9
+ @options ||= options
10
+ welcome
11
+ catch(:exit) { @interface.run @options }
12
+ end
13
+
14
+ def welcome
15
+ say %{Welcome}, next: ->{goodbye}
16
+ end
17
+
18
+ def goodbye
19
+ say %{Goodbye}, next: ->{exit}
20
+ end
21
+
22
+ def exit
23
+ throw :exit
24
+ end
25
+
26
+ def say(message, choices = {})
27
+ @interface.enqueue message, choices
28
+ end
29
+ alias :ask :say
30
+ end
31
+ end
@@ -0,0 +1 @@
1
+ # This will include prompt for a human player
@@ -0,0 +1 @@
1
+ # This will always make a random choice
@@ -0,0 +1,6 @@
1
+ # This will always make a smart choice
2
+
3
+ # For instance see http://www.nytimes.com/interactive/science/rock-paper-scissors.html?_r=0
4
+ # RRRS SPRR > R
5
+ # SRRR PSPR > P
6
+ # PSRR SPSP > R
@@ -0,0 +1,32 @@
1
+ require 'pc/loop'
2
+
3
+ module Pc
4
+ module Tournament
5
+ include Loop
6
+
7
+ def welcome
8
+ say %{Welcome}, next: ->{select_game}
9
+ end
10
+
11
+ def select_game
12
+ ask %{Pick a game}, loaded_games
13
+ end
14
+
15
+ def loaded_games
16
+ Dir[File.dirname(__FILE__) + '/games/*.rb'].each {|file| require file }
17
+
18
+ {exit: -> {goodbye}}.tap do |games|
19
+ ObjectSpace.each_object(Game) do |game|
20
+ unless game == Pc::Game
21
+ games[game.to_s] = ->{play game}
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ def play(game)
28
+ game.run @interface, @options
29
+ say %{Get ready for the next one}, next: ->{select_game}
30
+ end
31
+ end
32
+ end
data/lib/pc/version.rb ADDED
@@ -0,0 +1,3 @@
1
+ module Pc
2
+ VERSION = "0.0.3"
3
+ end
data/pc.gemspec ADDED
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'pc/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'pc'
8
+ spec.version = Pc::VERSION
9
+ spec.authors = ['claudiob']
10
+ spec.email = ['claudiob@gmail.com']
11
+ spec.summary = %q{King of the Game Jungle.}
12
+ spec.description = %q{Step-by-step tutorial to modular games in Ruby}
13
+ spec.homepage = 'https://github.com/claudiob/pc'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_dependency 'nico', '>= 0.1.1' # Campfire integration
22
+ spec.add_dependency 'gosu' # 2D graphic engine for OS X
23
+
24
+ spec.add_development_dependency 'bundler', '~> 1.5'
25
+ spec.add_development_dependency 'rake', '~> 0'
26
+ spec.add_development_dependency 'rspec'
27
+ end
@@ -0,0 +1,19 @@
1
+ require 'pc/games/odds_and_evens'
2
+
3
+ module Pc
4
+ describe 'OddsAndEvens.compare_moves' do
5
+ context 'given a first hand of 3 fingers' do
6
+ let (:move_a) { 3 }
7
+
8
+ context 'versus a second hand of 4 fingers' do
9
+ let (:move_b) { 4 }
10
+ it { expect(OddsAndEvens.compare_moves move_a, move_b).to eq 1}
11
+ end
12
+
13
+ context 'versus a second hand of 5 fingers' do
14
+ let (:move_b) { 5 }
15
+ it { expect(OddsAndEvens.compare_moves move_a, move_b).to eq -1}
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,24 @@
1
+ require 'pc/games/rock_paper_scissors'
2
+
3
+ module Pc
4
+ describe 'RockPaperScissors.compare_moves' do
5
+ context 'given a first hand of Rock' do
6
+ let (:move_a) { 'R' }
7
+
8
+ context 'versus a second hand of Scissors' do
9
+ let (:move_b) { 'S' }
10
+ it { expect(RockPaperScissors.compare_moves move_a, move_b).to eq 1}
11
+ end
12
+
13
+ context 'versus a second hand of Paper' do
14
+ let (:move_b) { 'P' }
15
+ it { expect(RockPaperScissors.compare_moves move_a, move_b).to eq -1}
16
+ end
17
+
18
+ context 'versus a second hand of Rock' do
19
+ let (:move_b) { 'R' }
20
+ it { expect(RockPaperScissors.compare_moves move_a, move_b).to eq 0}
21
+ end
22
+ end
23
+ end
24
+ end
metadata ADDED
@@ -0,0 +1,142 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pc
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - claudiob
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-06-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nico
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.1.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 0.1.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: gosu
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.5'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.5'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Step-by-step tutorial to modular games in Ruby
84
+ email:
85
+ - claudiob@gmail.com
86
+ executables:
87
+ - tarzan
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - ".gitignore"
92
+ - ".rspec"
93
+ - Gemfile
94
+ - HISTORY.md
95
+ - LICENSE.txt
96
+ - README.md
97
+ - Rakefile
98
+ - bin/tarzan
99
+ - lib/pc.rb
100
+ - lib/pc/game.rb
101
+ - lib/pc/games/odds_and_evens.rb
102
+ - lib/pc/games/rock_paper_scissors.rb
103
+ - lib/pc/interface.rb
104
+ - lib/pc/interfaces/campfire.rb
105
+ - lib/pc/interfaces/desktop.rb
106
+ - lib/pc/interfaces/desktop/window.rb
107
+ - lib/pc/interfaces/shell.rb
108
+ - lib/pc/loop.rb
109
+ - lib/pc/players/human.rb
110
+ - lib/pc/players/random.rb
111
+ - lib/pc/players/smart.rb
112
+ - lib/pc/tournament.rb
113
+ - lib/pc/version.rb
114
+ - pc.gemspec
115
+ - spec/tarzan/games/odds_and_evens_spec.rb
116
+ - spec/tarzan/games/rock_paper_scissors_spec.rb
117
+ homepage: https://github.com/claudiob/pc
118
+ licenses:
119
+ - MIT
120
+ metadata: {}
121
+ post_install_message:
122
+ rdoc_options: []
123
+ require_paths:
124
+ - lib
125
+ required_ruby_version: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ required_rubygems_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ requirements: []
136
+ rubygems_version: 3.0.3
137
+ signing_key:
138
+ specification_version: 4
139
+ summary: King of the Game Jungle.
140
+ test_files:
141
+ - spec/tarzan/games/odds_and_evens_spec.rb
142
+ - spec/tarzan/games/rock_paper_scissors_spec.rb