studio-game-by-zsolo 0.1.0
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 +7 -0
- data/LICENSE +1 -0
- data/README +3 -0
- data/bin/fav_players.csv +4 -0
- data/bin/players.csv +4 -0
- data/bin/studio_game +31 -0
- data/lib/studio_game/auditable.rb +9 -0
- data/lib/studio_game/berserk_player.rb +41 -0
- data/lib/studio_game/clumsy_player.rb +43 -0
- data/lib/studio_game/die.rb +26 -0
- data/lib/studio_game/game.rb +106 -0
- data/lib/studio_game/game_turn.rb +35 -0
- data/lib/studio_game/iterators.rb +41 -0
- data/lib/studio_game/loaded_die.rb +23 -0
- data/lib/studio_game/mixins.rb +57 -0
- data/lib/studio_game/playable.rb +19 -0
- data/lib/studio_game/player.rb +74 -0
- data/lib/studio_game/treasure_trove.rb +29 -0
- metadata +83 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 4793c74478398a094b6c077b4ebb0b15852c1069ea5e1f43e7f32588674ebed1
|
4
|
+
data.tar.gz: 19891482a06bdc03ef8b442557efccdd235419c7d074991f81b7388361d5c645
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5465b65cefb8564de973ba76a7c3f9d9b1372e3961230dade50ab5420ad9cace7d26cf82fd00a4abf1d10ceb7ce4e7baec250aaaf88c53e3ce16840f98eb9cde
|
7
|
+
data.tar.gz: ca8905e543974c0513bcf415209616a9dbaeea3562a4e0156a06738323c00b787245e5280ae36c93510c98d5c6874aa79cf5ad8f8c32aed84e86d211c14e6c25
|
data/LICENSE
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
This software is distributed under the MIT license
|
data/README
ADDED
data/bin/fav_players.csv
ADDED
data/bin/players.csv
ADDED
data/bin/studio_game
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require_relative '../lib/studio_game/game'
|
4
|
+
require_relative '../lib/studio_game/clumsy_player'
|
5
|
+
require_relative '../lib/studio_game/berserk_player'
|
6
|
+
|
7
|
+
game = StudioGame::Game.new('knuckerheads')
|
8
|
+
|
9
|
+
default_player_file = File.join(File.dirname(__FILE__), 'players.csv')
|
10
|
+
game.load_players(ARGV.shift || default_player_file)
|
11
|
+
|
12
|
+
klutz = StudioGame::ClumsyPlayer.new('klutz', 105, 4)
|
13
|
+
game.add_player(klutz)
|
14
|
+
|
15
|
+
berserker = StudioGame::BerserkPlayer.new('berserker', 50)
|
16
|
+
game.add_player(berserker)
|
17
|
+
|
18
|
+
loop do
|
19
|
+
puts "\nHow many game rounds? ('quit' to exit)"
|
20
|
+
answer = gets.chomp.downcase
|
21
|
+
case answer
|
22
|
+
when /^\d+$/
|
23
|
+
game.play(answer.to_i)
|
24
|
+
when 'quit', 'exit'
|
25
|
+
game.print_stats
|
26
|
+
# game.save_high_scores
|
27
|
+
break
|
28
|
+
else
|
29
|
+
puts "Please type a number or 'quit'"
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require_relative 'player'
|
2
|
+
|
3
|
+
module StudioGame
|
4
|
+
class BerserkPlayer < Player
|
5
|
+
|
6
|
+
def initialize(name, health=100)
|
7
|
+
super(name, health)
|
8
|
+
@number_of_w00ts = 0
|
9
|
+
end
|
10
|
+
|
11
|
+
def w00t
|
12
|
+
super
|
13
|
+
@number_of_w00ts += 1
|
14
|
+
puts "#{@name} has become a berserker!" if berserk?
|
15
|
+
end
|
16
|
+
|
17
|
+
def blam
|
18
|
+
berserk? ? w00t : super
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def berserk?
|
24
|
+
@number_of_w00ts > 5
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
if __FILE__ == $0
|
30
|
+
berserk = BerserkPlayer.new('bob', 100)
|
31
|
+
|
32
|
+
puts berserk
|
33
|
+
|
34
|
+
3.times { berserk.blam }
|
35
|
+
6.times { berserk.w00t }
|
36
|
+
2.times { berserk.blam }
|
37
|
+
puts berserk.health
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require_relative 'player'
|
2
|
+
|
3
|
+
module StudioGame
|
4
|
+
class ClumsyPlayer < Player
|
5
|
+
|
6
|
+
attr_reader :boost_factor
|
7
|
+
|
8
|
+
def initialize(name, health=100, boost_factor=3)
|
9
|
+
super(name, health)
|
10
|
+
@boost_factor = boost_factor
|
11
|
+
end
|
12
|
+
|
13
|
+
def found_treasure(treasure)
|
14
|
+
damaged_treasure = TreasureTrove::Treasure.new(treasure.name, treasure.point / 2.0)
|
15
|
+
super(damaged_treasure)
|
16
|
+
end
|
17
|
+
|
18
|
+
def w00t
|
19
|
+
@boost_factor.times { super }
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
if __FILE__ == $0
|
25
|
+
klutz = ClumsyPlayer.new('klutz')
|
26
|
+
puts klutz
|
27
|
+
puts klutz.boost_factor
|
28
|
+
|
29
|
+
hammer = TreasureTrove::Treasure.new(:hammer, 50)
|
30
|
+
klutz.found_treasure(hammer)
|
31
|
+
klutz.found_treasure(hammer)
|
32
|
+
klutz.found_treasure(hammer)
|
33
|
+
|
34
|
+
crowbar = TreasureTrove::Treasure.new(:crowbar, 400)
|
35
|
+
klutz.found_treasure(crowbar)
|
36
|
+
|
37
|
+
klutz.each_found_treasure do |treasure|
|
38
|
+
puts "#{treasure.point} points of #{treasure.name}"
|
39
|
+
end
|
40
|
+
|
41
|
+
puts "#{klutz.treasure_points} total treasure_points"
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative 'auditable'
|
2
|
+
|
3
|
+
module StudioGame
|
4
|
+
class Die
|
5
|
+
include Auditable
|
6
|
+
|
7
|
+
attr_reader :number_rolled
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
roll
|
11
|
+
end
|
12
|
+
|
13
|
+
def roll
|
14
|
+
@number_rolled = rand(1..6)
|
15
|
+
audit
|
16
|
+
@number_rolled
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
if __FILE__ == $0
|
22
|
+
die = Die.new
|
23
|
+
die.roll
|
24
|
+
puts die.number_rolled
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require_relative 'player'
|
2
|
+
require_relative 'game_turn'
|
3
|
+
|
4
|
+
module StudioGame
|
5
|
+
class Game
|
6
|
+
|
7
|
+
attr_reader :name
|
8
|
+
|
9
|
+
def initialize(name)
|
10
|
+
@name = name.capitalize
|
11
|
+
@players = []
|
12
|
+
@total_treasure_points = 0
|
13
|
+
end
|
14
|
+
|
15
|
+
def load_players(from_file)
|
16
|
+
File.readlines(from_file).each do |line|
|
17
|
+
add_player(Player.from_CSV(line))
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def add_player(player)
|
22
|
+
@players << player
|
23
|
+
end
|
24
|
+
|
25
|
+
def play(num_of_turns)
|
26
|
+
|
27
|
+
puts '******************************'
|
28
|
+
puts "There are #{@players.size} players in #{@name}:"
|
29
|
+
@players.each do |player|
|
30
|
+
puts player
|
31
|
+
end
|
32
|
+
|
33
|
+
puts '******************************'
|
34
|
+
puts "There are #{TreasureTrove::TREASURES.size} treasures to be found:"
|
35
|
+
TreasureTrove::TREASURES.each do |t|
|
36
|
+
puts "A #{t.name} is worth #{t.point} points"
|
37
|
+
end
|
38
|
+
|
39
|
+
puts '******************************'
|
40
|
+
1.upto(num_of_turns) do |n|
|
41
|
+
puts "\nTurn #{n}:"
|
42
|
+
@players.each do |player|
|
43
|
+
GameTurn.take_turn(player)
|
44
|
+
puts player
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
def print_stats
|
51
|
+
puts '******************************'
|
52
|
+
puts "\n#{@name} Statistics:"
|
53
|
+
strong, wimpy = @players.partition { |p| p.strong? }
|
54
|
+
|
55
|
+
puts "#{strong.size} strong players:"
|
56
|
+
strong.each { |p| puts print_name_and_health(p) }
|
57
|
+
|
58
|
+
puts "#{wimpy.size} wimpy players:"
|
59
|
+
wimpy.each { |p| puts print_name_and_health(p) }
|
60
|
+
|
61
|
+
puts '******************************'
|
62
|
+
@players.each do |p|
|
63
|
+
puts "#{p.name}'s treasure point totals:"
|
64
|
+
p.each_found_treasure do |treasure|
|
65
|
+
puts "#{treasure.point} total point of #{treasure.name}"
|
66
|
+
end
|
67
|
+
puts "#{p.treasure_points} grand total points"
|
68
|
+
end
|
69
|
+
|
70
|
+
puts
|
71
|
+
puts "#{total_treasure_points} total points from treasures found."
|
72
|
+
|
73
|
+
puts '******************************'
|
74
|
+
puts "\n#{@name} High Scores:"
|
75
|
+
ranked_players.each { |p| puts format_high_scores(p) }
|
76
|
+
end
|
77
|
+
|
78
|
+
def save_high_scores(to_file="high_scores.txt")
|
79
|
+
File.open(to_file, 'w') do |file|
|
80
|
+
file.puts("#{@name} High Scores:")
|
81
|
+
ranked_players.each { |p| file.puts format_high_scores(p) }
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
private
|
86
|
+
|
87
|
+
def total_treasure_points
|
88
|
+
@players.reduce(0) { |sum, p| sum + p.treasure_points }
|
89
|
+
end
|
90
|
+
|
91
|
+
def print_name_and_health(player)
|
92
|
+
"#{player.name} (#{player.health})"
|
93
|
+
end
|
94
|
+
|
95
|
+
def ranked_players
|
96
|
+
@players.sort { |a, b| b.score <=> a.score}
|
97
|
+
end
|
98
|
+
|
99
|
+
def format_high_scores(player)
|
100
|
+
"#{player.name.ljust(20, '.')} #{player.score}"
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require_relative 'loaded_die'
|
2
|
+
require_relative 'treasure_trove'
|
3
|
+
|
4
|
+
module StudioGame
|
5
|
+
module GameTurn
|
6
|
+
|
7
|
+
def self.take_turn(player)
|
8
|
+
die = LoadedDie.new
|
9
|
+
number_rolled = die.roll
|
10
|
+
|
11
|
+
case number_rolled
|
12
|
+
when 1..2
|
13
|
+
player.blam
|
14
|
+
when 5..6
|
15
|
+
player.w00t
|
16
|
+
else
|
17
|
+
puts "#{player.name} was skipped."
|
18
|
+
end
|
19
|
+
|
20
|
+
treasure = TreasureTrove.get_random_treasure
|
21
|
+
player.found_treasure(treasure)
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.what_is_self
|
26
|
+
self
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
if __FILE__ == $0
|
32
|
+
puts self
|
33
|
+
puts GameTurn.what_is_self
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
def twice
|
2
|
+
puts "Before running your block"
|
3
|
+
if block_given?
|
4
|
+
puts yield(1)
|
5
|
+
result = yield(2)
|
6
|
+
puts "After running your block"
|
7
|
+
puts "Result: #{result}"
|
8
|
+
else
|
9
|
+
puts "No block given!"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
twice { |n| n * 2 }
|
14
|
+
|
15
|
+
numbers = (1..10).to_a
|
16
|
+
|
17
|
+
puts numbers.select { |n| n.even? }
|
18
|
+
|
19
|
+
def my_select(arr)
|
20
|
+
new_arr = []
|
21
|
+
if block_given?
|
22
|
+
arr.each { |el| new_arr << el if yield(el) }
|
23
|
+
new_arr
|
24
|
+
else
|
25
|
+
"No block given"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
puts my_select(numbers) { |n| n.odd? }
|
30
|
+
|
31
|
+
puts "********************"
|
32
|
+
|
33
|
+
def n_times(number)
|
34
|
+
1.upto(number) { |c| yield c }
|
35
|
+
end
|
36
|
+
|
37
|
+
n_times(3) do |n|
|
38
|
+
puts "#{n} situps"
|
39
|
+
puts "#{n} pushups"
|
40
|
+
puts "#{n} chinups"
|
41
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require_relative 'die'
|
2
|
+
require_relative 'auditable'
|
3
|
+
|
4
|
+
module StudioGame
|
5
|
+
class LoadedDie < Die
|
6
|
+
include Auditable
|
7
|
+
|
8
|
+
def roll
|
9
|
+
numbers = [1, 4, 5, 5, 6, 6, 6]
|
10
|
+
@number_rolled = numbers.sample
|
11
|
+
audit
|
12
|
+
@number_rolled
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
if __FILE__ == $0
|
18
|
+
loaded_die = LoadedDie.new
|
19
|
+
puts loaded_die.number_rolled
|
20
|
+
loaded_die.roll
|
21
|
+
puts loaded_die.number_rolled
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module Rankable
|
2
|
+
|
3
|
+
def increase_rank
|
4
|
+
self.rank += 20
|
5
|
+
end
|
6
|
+
|
7
|
+
def decrease_rank
|
8
|
+
self.rank -= 10
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
class Movie
|
14
|
+
include Rankable
|
15
|
+
|
16
|
+
attr_accessor :rank, :title
|
17
|
+
|
18
|
+
def initialize(title, rank=10)
|
19
|
+
@title = title.capitalize
|
20
|
+
@rank = rank
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_s
|
24
|
+
"#{@title} has a rank of #{@rank}"
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
class Song
|
30
|
+
include Rankable
|
31
|
+
|
32
|
+
attr_accessor :rank, :name
|
33
|
+
|
34
|
+
def initialize(name, rank=0)
|
35
|
+
@name = name.capitalize
|
36
|
+
@rank = rank
|
37
|
+
end
|
38
|
+
|
39
|
+
def to_s
|
40
|
+
"The song #{@name} has a popularity of #{@rank}"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
if __FILE__ == $0
|
45
|
+
movie = Movie.new('ghostbusters')
|
46
|
+
song = Song.new('Alpha', 30)
|
47
|
+
|
48
|
+
puts movie
|
49
|
+
puts song
|
50
|
+
puts movie.rank
|
51
|
+
puts song.rank
|
52
|
+
|
53
|
+
10.times { movie.increase_rank }
|
54
|
+
puts movie
|
55
|
+
5.times { song.increase_rank }
|
56
|
+
puts song
|
57
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require_relative 'treasure_trove'
|
2
|
+
require_relative 'playable'
|
3
|
+
|
4
|
+
module StudioGame
|
5
|
+
class Player
|
6
|
+
include Playable
|
7
|
+
|
8
|
+
attr_accessor :name, :health
|
9
|
+
|
10
|
+
def self.from_CSV(line)
|
11
|
+
name, health = line.split(',')
|
12
|
+
self.new(name, Integer(health))
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(name, health=100)
|
16
|
+
@name = name.capitalize
|
17
|
+
@health = health
|
18
|
+
@found_treasures = Hash.new(0)
|
19
|
+
end
|
20
|
+
|
21
|
+
def found_treasure(treasure)
|
22
|
+
@found_treasures[treasure.name] += treasure.point
|
23
|
+
puts "#{@name} found a #{treasure.name} worth #{treasure.point} points"
|
24
|
+
puts "#{@name}'s treasures: #{@found_treasures}"
|
25
|
+
end
|
26
|
+
|
27
|
+
def treasure_points
|
28
|
+
@found_treasures.values.reduce(0, :+)
|
29
|
+
end
|
30
|
+
|
31
|
+
def each_found_treasure
|
32
|
+
@found_treasures.each do |name, value|
|
33
|
+
yield TreasureTrove::Treasure.new(name, value)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Virtual attribute
|
38
|
+
def score
|
39
|
+
@health + treasure_points
|
40
|
+
end
|
41
|
+
|
42
|
+
# def health
|
43
|
+
# @health
|
44
|
+
# end
|
45
|
+
|
46
|
+
# def name
|
47
|
+
# @name
|
48
|
+
# end
|
49
|
+
|
50
|
+
|
51
|
+
def name=(new_name)
|
52
|
+
@name = new_name.capitalize
|
53
|
+
end
|
54
|
+
|
55
|
+
def to_s
|
56
|
+
"I'm #{@name} with health = #{@health}, points = #{treasure_points} and score = #{score}"
|
57
|
+
end
|
58
|
+
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
# __FILE - the name of this file, player.rb
|
63
|
+
# $0 - the name of the file that is being run - can be player.rb or app.rb, etc.
|
64
|
+
# the file being run is can also be accessed by $PROGRAM_FILE
|
65
|
+
if __FILE__ == $0
|
66
|
+
player1 = Player.new('zsolt', 95)
|
67
|
+
puts player1.name
|
68
|
+
|
69
|
+
player1.w00t
|
70
|
+
player1.w00t
|
71
|
+
|
72
|
+
puts player1
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module StudioGame
|
2
|
+
module TreasureTrove
|
3
|
+
|
4
|
+
Treasure = Struct.new(:name, :point)
|
5
|
+
|
6
|
+
TREASURES = [
|
7
|
+
Treasure.new(:pie, 5),
|
8
|
+
Treasure.new(:bottle, 25),
|
9
|
+
Treasure.new(:hammer, 50),
|
10
|
+
Treasure.new(:skillet, 100),
|
11
|
+
Treasure.new(:broomstick, 200),
|
12
|
+
Treasure.new(:crowbar, 400)
|
13
|
+
]
|
14
|
+
|
15
|
+
def self.get_random_treasure
|
16
|
+
TREASURES.sample
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
if __FILE__ == $0
|
22
|
+
puts TreasureTrove.get_random_treasure
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
|
metadata
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: studio-game-by-zsolo
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Zsolt Szalma
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-02-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.8'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 2.8.0
|
23
|
+
type: :development
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '2.8'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 2.8.0
|
33
|
+
description: |
|
34
|
+
A simple command line game created as a guided project for the Pragmatic Studio Ruby course.
|
35
|
+
|
36
|
+
To run the game type: ./bin/app
|
37
|
+
email: zsolt.szalma@gmail.com
|
38
|
+
executables:
|
39
|
+
- studio_game
|
40
|
+
extensions: []
|
41
|
+
extra_rdoc_files: []
|
42
|
+
files:
|
43
|
+
- LICENSE
|
44
|
+
- README
|
45
|
+
- bin/fav_players.csv
|
46
|
+
- bin/players.csv
|
47
|
+
- bin/studio_game
|
48
|
+
- lib/studio_game/auditable.rb
|
49
|
+
- lib/studio_game/berserk_player.rb
|
50
|
+
- lib/studio_game/clumsy_player.rb
|
51
|
+
- lib/studio_game/die.rb
|
52
|
+
- lib/studio_game/game.rb
|
53
|
+
- lib/studio_game/game_turn.rb
|
54
|
+
- lib/studio_game/iterators.rb
|
55
|
+
- lib/studio_game/loaded_die.rb
|
56
|
+
- lib/studio_game/mixins.rb
|
57
|
+
- lib/studio_game/playable.rb
|
58
|
+
- lib/studio_game/player.rb
|
59
|
+
- lib/studio_game/treasure_trove.rb
|
60
|
+
homepage: http://szalmazsolt.com
|
61
|
+
licenses:
|
62
|
+
- MIT
|
63
|
+
metadata: {}
|
64
|
+
post_install_message:
|
65
|
+
rdoc_options: []
|
66
|
+
require_paths:
|
67
|
+
- lib
|
68
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '1.9'
|
73
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
requirements: []
|
79
|
+
rubygems_version: 3.2.22
|
80
|
+
signing_key:
|
81
|
+
specification_version: 4
|
82
|
+
summary: A simple turn-based command line game
|
83
|
+
test_files: []
|