glitch-game 0.0.1
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/.gitignore +2 -0
- data/.travis.yml +3 -0
- data/Gemfile +3 -0
- data/README.markdown +16 -0
- data/Rakefile +8 -0
- data/bin/glitch +5 -0
- data/glitch-game.gemspec +19 -0
- data/lib/game.rb +169 -0
- data/lib/glitch.rb +8 -0
- data/lib/glitch_string.rb +53 -0
- data/lib/player.rb +21 -0
- data/lib/type.rb +72 -0
- data/spec/lib/player_spec.rb +36 -0
- data/spec/lib/type_spec.rb +59 -0
- metadata +100 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a60d336dfa3cba758f03c1b349b8aa6ad6a6878d
|
4
|
+
data.tar.gz: b9411ce3b606516596dc824747021001056b8aa5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b42c21aa73bab39ec7bbe80067eea39e914b90f87dda61e95040cb2a62e91b81bd5d84bb3bb42b74845f00bfc6ba4a966538c251c6f232a1f8574a4ba20ae784
|
7
|
+
data.tar.gz: 0340ad3857521fd1296b5446604cf7b2631bff8400e7755a0f8ae8804c0a833e1c9df245ac2f37bb84a02355fda0edd0f5d3ad596054c3257f6f56a46205f43f
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.markdown
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# g̠̼͕̋ḻͤi͖͊̄̕t̞ͫͪ̆c̹̎̀h̞͙̀̚
|
2
|
+
|
3
|
+
A terminal based [Cookie Clicker] style game.
|
4
|
+
|
5
|
+
[](https://travis-ci.org/twe4ked/glitch)
|
6
|
+
|
7
|
+
### Installing and Running
|
8
|
+
|
9
|
+
```
|
10
|
+
git clone git@github.com:twe4ked/glitch.git
|
11
|
+
cd glitch
|
12
|
+
bundle install
|
13
|
+
bundle exec ./bin/glitch
|
14
|
+
```
|
15
|
+
|
16
|
+
[Cookie Clicker]: http://en.wikipedia.org/wiki/Cookie_Clicker
|
data/Rakefile
ADDED
data/bin/glitch
ADDED
data/glitch-game.gemspec
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'glitch'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'glitch-game'
|
8
|
+
spec.version = Glitch::VERSION
|
9
|
+
spec.authors = ['Odin Dutton']
|
10
|
+
spec.summary = 'A terminal based Cookie Clicker style game.'
|
11
|
+
spec.homepage = 'https://github.com/twe4ked/glitch'
|
12
|
+
spec.license = 'MIT'
|
13
|
+
spec.files = `git ls-files -z`.split("\x0")
|
14
|
+
spec.executables << 'glitch'
|
15
|
+
spec.require_paths = ['.']
|
16
|
+
spec.add_runtime_dependency 'curses', '~> 1.0'
|
17
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
18
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
19
|
+
end
|
data/lib/game.rb
ADDED
@@ -0,0 +1,169 @@
|
|
1
|
+
require 'curses'
|
2
|
+
|
3
|
+
module Glitch
|
4
|
+
class Game
|
5
|
+
def initialize
|
6
|
+
@player = Glitch::Player.new
|
7
|
+
@bit_multiplier = 0
|
8
|
+
@last_second = 0
|
9
|
+
|
10
|
+
@types = {}
|
11
|
+
[
|
12
|
+
Glitch::Type.new('atom', initial_price: 10, multiplier: 1, count_available: 20, :description => 'a boring little atom, so lonely'),
|
13
|
+
Glitch::Type.new('uber', initial_price: 100, multiplier: 10),
|
14
|
+
Glitch::Type.new('matrix', initial_price: 150, multiplier: 11),
|
15
|
+
Glitch::Type.new('hundo', initial_price: 99999, multiplier: 100),
|
16
|
+
Glitch::Type.new('board', initial_price: 500, multiplier: 0, count_available: 4, price_calc: -> (type) { [type.initial_price * (type.count + 1), 2000].min }),
|
17
|
+
Glitch::Type.new('clock', initial_price: 1337, multiplier: 0, count_available: 1, price_calc: -> (type) { type.initial_price }),
|
18
|
+
].each { |type| @types[type.shortcut] = type }
|
19
|
+
|
20
|
+
@message_board_length = 30
|
21
|
+
@messages = [
|
22
|
+
'welcome to glitch',
|
23
|
+
'you need bits',
|
24
|
+
"you're not sure why",
|
25
|
+
'you know you do',
|
26
|
+
'survive...',
|
27
|
+
]
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.run
|
31
|
+
self.new.run
|
32
|
+
end
|
33
|
+
|
34
|
+
def run
|
35
|
+
draw_screen
|
36
|
+
|
37
|
+
Curses.curs_set 0
|
38
|
+
Curses.timeout = 1000
|
39
|
+
Curses.start_color
|
40
|
+
|
41
|
+
loop do
|
42
|
+
tick
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def tick
|
47
|
+
input = Curses.getch
|
48
|
+
|
49
|
+
if input
|
50
|
+
case
|
51
|
+
when input == ' '
|
52
|
+
@player.increment_bits
|
53
|
+
add_message '1 bit'
|
54
|
+
when available_types.map(&:shortcut).include?(input)
|
55
|
+
type = @types[input]
|
56
|
+
|
57
|
+
case
|
58
|
+
when !type.available?
|
59
|
+
add_message 'none left :('
|
60
|
+
when @player.can_decrement_bits_by?(type.price)
|
61
|
+
@player.decrement_bits type.price
|
62
|
+
type.increment
|
63
|
+
@bit_multiplier = @bit_multiplier + type.multiplier
|
64
|
+
add_message "1 #{type.name}"
|
65
|
+
else
|
66
|
+
add_message "you've not enough bits for #{type.name}"
|
67
|
+
end
|
68
|
+
else
|
69
|
+
add_message 'nope'
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
# only once per second
|
74
|
+
this_second = Time.now.to_i
|
75
|
+
if this_second > @last_second
|
76
|
+
@player.increment_bits 1 * @bit_multiplier
|
77
|
+
@last_second = this_second
|
78
|
+
end
|
79
|
+
|
80
|
+
@messages = @messages.last(10)
|
81
|
+
|
82
|
+
draw_screen
|
83
|
+
end
|
84
|
+
|
85
|
+
def draw_screen
|
86
|
+
Curses.clear
|
87
|
+
|
88
|
+
print_line_break
|
89
|
+
print_glitch_string 'glitch!', 5
|
90
|
+
print_line_break
|
91
|
+
|
92
|
+
if @types['c'].count == 1
|
93
|
+
print_glitch_string 'clock: ', 1, false
|
94
|
+
print_glitch_string Time.now.to_s
|
95
|
+
end
|
96
|
+
|
97
|
+
@one_bit = true if !@one_bit && @player.bits > 0
|
98
|
+
if @one_bit
|
99
|
+
print_glitch_string 'bits: ', 1, false
|
100
|
+
print_glitch_string @player.bits.to_s + (@bit_multiplier > 5 ? " (#{@bit_multiplier}/bps)" : '')
|
101
|
+
print_line_break
|
102
|
+
end
|
103
|
+
|
104
|
+
print_glitch_string '-' * message_board_length
|
105
|
+
if @messages
|
106
|
+
@messages.each do |message|
|
107
|
+
print_glitch_string message[0..message_board_length-4], 3, false
|
108
|
+
if message.length > message_board_length-4
|
109
|
+
Curses.addstr '...'
|
110
|
+
end
|
111
|
+
print_line_break
|
112
|
+
end
|
113
|
+
else
|
114
|
+
print_glitch_string '...', 1, true, true
|
115
|
+
end
|
116
|
+
print_glitch_string '-' * message_board_length
|
117
|
+
|
118
|
+
draw_types
|
119
|
+
|
120
|
+
print_line_break
|
121
|
+
Curses.addstr ':'
|
122
|
+
end
|
123
|
+
|
124
|
+
private
|
125
|
+
|
126
|
+
def add_message(message)
|
127
|
+
@messages << message
|
128
|
+
end
|
129
|
+
|
130
|
+
def draw_types
|
131
|
+
unless available_types.empty?
|
132
|
+
print_line_break
|
133
|
+
available_types.each do |type|
|
134
|
+
print_type_info = -> (*args) {
|
135
|
+
Curses.addstr '- '
|
136
|
+
print_glitch_string type.info_string, 1, false
|
137
|
+
print_glitch_string " - #{type.description}"
|
138
|
+
}
|
139
|
+
|
140
|
+
if @player.can_decrement_bits_by?(type.price) && type.available?
|
141
|
+
print_type_info.call
|
142
|
+
else
|
143
|
+
Curses.attron(Curses.color_pair(8)|Curses::A_BOLD, &print_type_info)
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
def available_types
|
150
|
+
@types.values.select do |type|
|
151
|
+
@player.can_decrement_bits_by?(type.price - type.price/100.0*10) || type.count > 0
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
def message_board_length
|
156
|
+
@message_board_length + 10 * (@types['b'].count + 1)
|
157
|
+
end
|
158
|
+
|
159
|
+
def print_glitch_string(string, amount = 1, line_break = true, random = false)
|
160
|
+
string = Glitch::GlitchString.new.glitch(string, amount, random)
|
161
|
+
Curses.addstr string
|
162
|
+
print_line_break if line_break
|
163
|
+
end
|
164
|
+
|
165
|
+
def print_line_break
|
166
|
+
Curses.addstr "\n"
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
data/lib/glitch.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
module Glitch
|
2
|
+
class GlitchString
|
3
|
+
# http://en.wikipedia.org/wiki/Combining_Diacritical_Marks
|
4
|
+
COMBINING_DIACRITICAL_MARKS = ("\u0300".."\u036F").to_a
|
5
|
+
|
6
|
+
def glitch(string, amount = 1, random = false, index_offset = 0)
|
7
|
+
result = string.chars.map.each_with_index do |char, index|
|
8
|
+
index = index + index_offset
|
9
|
+
srand(string.chars.map(&:ord).join.to_i + index + (random ? Time.now.to_i : 0))
|
10
|
+
|
11
|
+
add_mark = case amount
|
12
|
+
when 1
|
13
|
+
index % 5 == 0
|
14
|
+
when 2
|
15
|
+
index % 4 == 0
|
16
|
+
when 3
|
17
|
+
index % 3 == 0
|
18
|
+
when 4
|
19
|
+
index % 3 == 0
|
20
|
+
when 5
|
21
|
+
true
|
22
|
+
else
|
23
|
+
raise 'invalid amount (0..5)'
|
24
|
+
end
|
25
|
+
|
26
|
+
case char
|
27
|
+
when ' '
|
28
|
+
char
|
29
|
+
else
|
30
|
+
if add_mark
|
31
|
+
mark = COMBINING_DIACRITICAL_MARKS.sample
|
32
|
+
char + mark
|
33
|
+
else
|
34
|
+
char
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end.join
|
38
|
+
|
39
|
+
case amount
|
40
|
+
when 2
|
41
|
+
glitch result, 1, random, amount
|
42
|
+
when 3
|
43
|
+
glitch result, 2, random, amount
|
44
|
+
when 4
|
45
|
+
glitch result, 3, random, amount
|
46
|
+
when 5
|
47
|
+
glitch result, 4, random, amount
|
48
|
+
else
|
49
|
+
result
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/lib/player.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
module Glitch
|
2
|
+
class Player
|
3
|
+
attr_reader :bits
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@bits = 0
|
7
|
+
end
|
8
|
+
|
9
|
+
def increment_bits(number = 1)
|
10
|
+
@bits = @bits + number
|
11
|
+
end
|
12
|
+
|
13
|
+
def can_decrement_bits_by?(number)
|
14
|
+
@bits >= number
|
15
|
+
end
|
16
|
+
|
17
|
+
def decrement_bits(number)
|
18
|
+
@bits = @bits - number
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/type.rb
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
module Glitch
|
2
|
+
class Type
|
3
|
+
attr_reader :name, :multiplier, :count, :initial_price
|
4
|
+
|
5
|
+
def initialize(name, options = {})
|
6
|
+
@name = name
|
7
|
+
@initial_price = options[:initial_price]
|
8
|
+
@multiplier = options[:multiplier]
|
9
|
+
@count_available = options[:count_available] || :infinite
|
10
|
+
@price_calc = options[:price_calc]
|
11
|
+
@description = options[:description]
|
12
|
+
@count = 0
|
13
|
+
end
|
14
|
+
|
15
|
+
def shortcut
|
16
|
+
@name[0]
|
17
|
+
end
|
18
|
+
|
19
|
+
def name_with_shortcut
|
20
|
+
@name.sub(shortcut, "[#{shortcut}]")
|
21
|
+
end
|
22
|
+
|
23
|
+
def price
|
24
|
+
if @price_calc
|
25
|
+
@price_calc.call(self)
|
26
|
+
else
|
27
|
+
[
|
28
|
+
@initial_price,
|
29
|
+
@initial_price * @count * (@count >= 10 ? 10 : 1) + @count
|
30
|
+
].max
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def increment
|
35
|
+
@count = @count + 1
|
36
|
+
if @count_available.is_a? Integer
|
37
|
+
@count_available = @count_available - 1
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def available?
|
42
|
+
infinite? || @count_available > 0
|
43
|
+
end
|
44
|
+
|
45
|
+
def total_available
|
46
|
+
if infinite?
|
47
|
+
'??'
|
48
|
+
else
|
49
|
+
@count + @count_available
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def info_string
|
54
|
+
string = []
|
55
|
+
string << name_with_shortcut
|
56
|
+
string << "[#{price} bits]"
|
57
|
+
string << "(#{@count}/#{total_available})" if @count > 0
|
58
|
+
string << "*#{@multiplier}"
|
59
|
+
string.join ' '
|
60
|
+
end
|
61
|
+
|
62
|
+
def description
|
63
|
+
@description || '??'
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
def infinite?
|
69
|
+
@count_available == :infinite
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require_relative '../../lib/player.rb'
|
2
|
+
|
3
|
+
describe Glitch::Player do
|
4
|
+
let(:player) { Glitch::Player.new }
|
5
|
+
|
6
|
+
describe '#increment_bits' do
|
7
|
+
it 'increments by 1 if no argument is supplied' do
|
8
|
+
expect { player.increment_bits }.to change { player.bits }.from(0).to(1)
|
9
|
+
expect { player.increment_bits }.to change { player.bits }.from(1).to(2)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'increments by the number supplied as an argument' do
|
13
|
+
player.increment_bits
|
14
|
+
expect { player.increment_bits 41 }.to change { player.bits }.from(1).to(42)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '#can_decrement_bits_by?' do
|
19
|
+
it 'returns true if the player has enough bits' do
|
20
|
+
expect(player.can_decrement_bits_by? 0).to eq true
|
21
|
+
player.increment_bits
|
22
|
+
expect(player.can_decrement_bits_by? 1).to eq true
|
23
|
+
end
|
24
|
+
|
25
|
+
it "returns false if the player doesn't have enough bits" do
|
26
|
+
expect(player.can_decrement_bits_by? 42).to eq false
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe 'decrement_bits' do
|
31
|
+
it 'decrements bits by the number supplied' do
|
32
|
+
player.increment_bits
|
33
|
+
expect { player.decrement_bits 1 }.to change { player.bits }.from(1).to(0)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require_relative '../../lib/type.rb'
|
2
|
+
|
3
|
+
describe Glitch::Type do
|
4
|
+
let(:type) { Glitch::Type.new 'foo', initial_price: 10, multiplier: 1 }
|
5
|
+
|
6
|
+
describe '#shortcut' do
|
7
|
+
it 'returns a single letter shortcut' do
|
8
|
+
expect(type.shortcut).to eq 'f'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '#name_with_shortcut' do
|
13
|
+
it 'returns the name with the shortcut surrounded in brackets' do
|
14
|
+
expect(type.name_with_shortcut).to eq '[f]oo'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '#price' do
|
19
|
+
it 'returns different amounts based on the count' do
|
20
|
+
expect(type.price).to eq 10
|
21
|
+
|
22
|
+
type.instance_variable_set('@count', 1)
|
23
|
+
expect(type.price).to eq 11
|
24
|
+
|
25
|
+
type.instance_variable_set('@count', 9)
|
26
|
+
expect(type.price).to eq 99
|
27
|
+
|
28
|
+
type.instance_variable_set('@count', 10)
|
29
|
+
expect(type.price).to eq 1010
|
30
|
+
|
31
|
+
type.instance_variable_set('@count', 11)
|
32
|
+
expect(type.price).to eq 1111
|
33
|
+
|
34
|
+
type.instance_variable_set('@count', 99)
|
35
|
+
expect(type.price).to eq 9999
|
36
|
+
|
37
|
+
type.instance_variable_set('@count', 100)
|
38
|
+
expect(type.price).to eq 10100
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'allows adding a lambda to change the price' do
|
42
|
+
type = Glitch::Type.new 'foo', initial_price: 40, multiplier: 1, price_calc: -> (type) { type.initial_price + 2 }
|
43
|
+
expect(type.price).to eq 42
|
44
|
+
|
45
|
+
type.instance_variable_set('@count', 1)
|
46
|
+
expect(type.price).to eq 42
|
47
|
+
|
48
|
+
type.instance_variable_set('@count', 2)
|
49
|
+
expect(type.price).to eq 42
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe '#increment' do
|
54
|
+
it 'increments the count' do
|
55
|
+
expect { type.increment }.to change { type.count }.from(0).to(1)
|
56
|
+
expect { type.increment }.to change { type.count }.from(1).to(2)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
metadata
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: glitch-game
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Odin Dutton
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-09-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: curses
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
55
|
+
description:
|
56
|
+
email:
|
57
|
+
executables:
|
58
|
+
- glitch
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- ".gitignore"
|
63
|
+
- ".travis.yml"
|
64
|
+
- Gemfile
|
65
|
+
- README.markdown
|
66
|
+
- Rakefile
|
67
|
+
- bin/glitch
|
68
|
+
- glitch-game.gemspec
|
69
|
+
- lib/game.rb
|
70
|
+
- lib/glitch.rb
|
71
|
+
- lib/glitch_string.rb
|
72
|
+
- lib/player.rb
|
73
|
+
- lib/type.rb
|
74
|
+
- spec/lib/player_spec.rb
|
75
|
+
- spec/lib/type_spec.rb
|
76
|
+
homepage: https://github.com/twe4ked/glitch
|
77
|
+
licenses:
|
78
|
+
- MIT
|
79
|
+
metadata: {}
|
80
|
+
post_install_message:
|
81
|
+
rdoc_options: []
|
82
|
+
require_paths:
|
83
|
+
- "."
|
84
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
requirements: []
|
95
|
+
rubyforge_project:
|
96
|
+
rubygems_version: 2.2.2
|
97
|
+
signing_key:
|
98
|
+
specification_version: 4
|
99
|
+
summary: A terminal based Cookie Clicker style game.
|
100
|
+
test_files: []
|