gemwarrior 0.2.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.
@@ -0,0 +1,92 @@
1
+ # lib/gemwarrior/repl.rb
2
+ # My own, simple, Read Evaluate Print Loop module
3
+
4
+ require 'readline'
5
+ require 'os'
6
+
7
+ require_relative 'constants'
8
+ require_relative 'version'
9
+ require_relative 'evaluator'
10
+
11
+ module Gemwarrior
12
+ class Repl
13
+ private
14
+
15
+ def clear_screen
16
+ if OS.windows?
17
+ system('cls')
18
+ else
19
+ system('clear')
20
+ end
21
+ end
22
+
23
+ def print_splash_message
24
+ 0.upto(SPLASH_MESSAGE.length-1) do print "=" end
25
+ print "\n"
26
+ puts SPLASH_MESSAGE
27
+ 0.upto(SPLASH_MESSAGE.length-1) do print "=" end
28
+ print "\n"
29
+ end
30
+
31
+ def print_fortune
32
+ noun1_vals = ["abutments", "bains", "crocuses", "chapes", "civility", "fingering", "gabardines", "nooks", "scalawags", "squiggles"]
33
+ noun2_vals = ["asterisms", "deniers", "diastoles", "extremities", "payments", "specters", "splats", "thalamuses", "wallets", "xylophones"]
34
+ noun3_vals = ["blebs", "blowholes", "dancers", "dinges", "dualism", "ebullitions", "gullets", "knops", "phaetons", "snickers"]
35
+
36
+ puts "* Remember: #{noun1_vals[rand(0..9)]} and #{noun2_vals[rand(0..9)]} are the key to #{noun3_vals[rand(0..9)]} *\n\n"
37
+ end
38
+
39
+ def setup_screen(initialCommand = nil)
40
+ # welcome player to game
41
+ clear_screen
42
+ print_splash_message
43
+ print_fortune
44
+
45
+ # hook to do something right off the bat
46
+ puts @eval.evaluate(initialCommand) unless initialCommand.nil?
47
+ end
48
+
49
+ def prompt
50
+ prompt_template = "\n[LV:%3s][XP:%3s][HP:%3s|%-3s][STM:%2s|%-2s] -- [%s @ %s]"
51
+ prompt_vars_arr = [
52
+ @world.player.level,
53
+ @world.player.xp,
54
+ @world.player.hp_cur,
55
+ @world.player.hp_max,
56
+ @world.player.stam_cur,
57
+ @world.player.stam_max,
58
+ @world.player.name,
59
+ @world.player.cur_loc.name
60
+ ]
61
+ puts (prompt_template % prompt_vars_arr)
62
+ end
63
+
64
+ def read_line
65
+ Readline.readline(' GW> ', true).to_s
66
+ end
67
+
68
+ public
69
+
70
+ def initialize(world, evaluator)
71
+ @world = world
72
+ @eval = evaluator
73
+ end
74
+
75
+ def start(initialCommand = nil)
76
+ setup_screen(initialCommand)
77
+
78
+ # main loop
79
+ loop do
80
+ prompt
81
+ begin
82
+ input = read_line
83
+ puts @eval.evaluate(input)
84
+ rescue Interrupt
85
+ puts
86
+ puts QUIT_MESSAGE
87
+ exit(0)
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,6 @@
1
+ # lib/gemwarrior/version.rb
2
+ # Version of Gem Warrior
3
+
4
+ module Gemwarrior
5
+ VERSION = "0.2.0"
6
+ end
@@ -0,0 +1,269 @@
1
+ # lib/gemwarrior/world.rb
2
+ # World where the locations, monsters, items, etc. exist
3
+
4
+ require_relative 'constants'
5
+ require_relative 'monster'
6
+ require_relative 'item'
7
+ require_relative 'location'
8
+
9
+ module Gemwarrior
10
+ class World
11
+ private
12
+
13
+ include Entities::Monsters
14
+ include Entities::Items
15
+ include Entities::Locations
16
+
17
+ def init_monsters
18
+ @monsters = []
19
+ @monsters.push(Monster.new(
20
+ MOB_ID_ALEXANDRAT,
21
+ MOB_NAME_ALEXANDRAT,
22
+ MOB_DESC_ALEXANDRAT,
23
+ 'ugly',
24
+ 'gnarled',
25
+ 'unsurprisingly unchipper',
26
+ MOB_LEVEL_ALEXANDRAT
27
+ )
28
+ )
29
+ @monsters.push(Monster.new(
30
+ MOB_ID_AMBEROO,
31
+ MOB_NAME_AMBEROO,
32
+ MOB_DESC_AMBEROO,
33
+ 'punchy',
34
+ 'balled',
35
+ 'jumpy',
36
+ MOB_LEVEL_AMBEROO
37
+ )
38
+ )
39
+ @monsters.push(Monster.new(
40
+ MOB_ID_AMETHYSTLE,
41
+ MOB_NAME_AMETHYSTLE,
42
+ MOB_DESC_AMETHYSTLE,
43
+ 'sharp',
44
+ 'loose',
45
+ 'mesmerizing',
46
+ MOB_LEVEL_AMETHYSTLE
47
+ )
48
+ )
49
+ @monsters.push(Monster.new(
50
+ MOB_ID_AQUAMARINE,
51
+ MOB_NAME_AQUAMARINE,
52
+ MOB_DESC_AQUAMARINE,
53
+ 'strained',
54
+ 'hairy',
55
+ 'tempered',
56
+ MOB_LEVEL_AQUAMARINE
57
+ )
58
+ )
59
+ @monsters.push(Monster.new(
60
+ MOB_ID_APATIGER,
61
+ MOB_NAME_APATIGER,
62
+ MOB_DESC_APATIGER,
63
+ 'calloused',
64
+ 'soft',
65
+ 'apathetic',
66
+ MOB_LEVEL_APATIGER
67
+ )
68
+ )
69
+ @monsters.push(Monster.new(
70
+ MOB_ID_BLOODSTORM,
71
+ MOB_NAME_BLOODSTORM,
72
+ MOB_DESC_BLOODSTORM,
73
+ 'bloody',
74
+ 'bloody',
75
+ 'boiling',
76
+ MOB_LEVEL_BLOODSTORM
77
+ )
78
+ )
79
+ @monsters.push(Monster.new(
80
+ MOB_ID_CITRINAGA,
81
+ MOB_NAME_CITRINAGA,
82
+ MOB_DESC_CITRINAGA,
83
+ 'shiny',
84
+ 'glistening',
85
+ 'staid',
86
+ MOB_LEVEL_CITRINAGA
87
+ )
88
+ )
89
+ @monsters.push(Monster.new(
90
+ MOB_ID_CORALIZ,
91
+ MOB_NAME_CORALIZ,
92
+ MOB_DESC_CORALIZ,
93
+ 'spotted',
94
+ 'slippery',
95
+ 'emotionless',
96
+ MOB_LEVEL_CORALIZ
97
+ )
98
+ )
99
+ @monsters.push(Monster.new(
100
+ MOB_ID_CUBICAT,
101
+ MOB_NAME_CUBICAT,
102
+ MOB_DESC_CUBICAT,
103
+ 'striking',
104
+ 'grippy',
105
+ 'salacious',
106
+ MOB_LEVEL_CUBICAT
107
+ )
108
+ )
109
+ @monsters.push(Monster.new(
110
+ MOB_ID_DIAMAN,
111
+ MOB_NAME_DIAMAN,
112
+ MOB_DESC_DIAMAN,
113
+ 'bright',
114
+ 'jagged',
115
+ 'adamant',
116
+ MOB_LEVEL_DIAMAN
117
+ )
118
+ )
119
+ end
120
+
121
+ def init_items
122
+ @items = []
123
+ @items.push(Item.new(
124
+ ITEM_ID_STONE,
125
+ ITEM_NAME_STONE,
126
+ ITEM_DESC_STONE,
127
+ true
128
+ )
129
+ )
130
+ @items.push(Item.new(
131
+ ITEM_ID_BED,
132
+ ITEM_NAME_BED,
133
+ ITEM_DESC_BED,
134
+ false
135
+ )
136
+ )
137
+ @items.push(Item.new(
138
+ ITEM_ID_STALACTITE,
139
+ ITEM_NAME_STALACTITE,
140
+ ITEM_DESC_STALACTITE,
141
+ true
142
+ )
143
+ )
144
+ @items.push(Item.new(
145
+ ITEM_ID_FEATHER,
146
+ ITEM_NAME_FEATHER,
147
+ ITEM_DESC_FEATHER,
148
+ true
149
+ )
150
+ )
151
+ @items.push(Item.new(
152
+ ITEM_ID_GUN,
153
+ ITEM_NAME_GUN,
154
+ ITEM_DESC_GUN,
155
+ true
156
+ )
157
+ )
158
+ end
159
+
160
+ def init_locations
161
+ @locations = []
162
+ @locations.push(Location.new(
163
+ LOC_ID_HOME,
164
+ LOC_NAME_HOME,
165
+ LOC_DESC_HOME,
166
+ LOC_CONNECTIONS_HOME,
167
+ :none,
168
+ [item_by_id(0), item_by_id(1)],
169
+ @monsters
170
+ )
171
+ )
172
+ @locations.push(Location.new(
173
+ LOC_ID_CAVE_ENTRANCE,
174
+ LOC_NAME_CAVE_ENTRANCE,
175
+ LOC_DESC_CAVE_ENTRANCE,
176
+ LOC_CONNECTIONS_CAVE_ENTRANCE,
177
+ :low,
178
+ [],
179
+ @monsters
180
+ )
181
+ )
182
+ @locations.push(Location.new(
183
+ LOC_ID_CAVE_ROOM1,
184
+ LOC_NAME_CAVE_ROOM1,
185
+ LOC_DESC_CAVE_ROOM1,
186
+ LOC_CONNECTIONS_CAVE_ROOM1,
187
+ :moderate,
188
+ [item_by_id(2)],
189
+ @monsters
190
+ )
191
+ )
192
+ @locations.push(Location.new(
193
+ LOC_ID_FOREST,
194
+ LOC_NAME_FOREST,
195
+ LOC_DESC_FOREST,
196
+ LOC_CONNECTIONS_FOREST,
197
+ :low,
198
+ [item_by_id(3)],
199
+ @monsters
200
+ )
201
+ )
202
+ @locations.push(Location.new(
203
+ LOC_ID_SKYTOWER,
204
+ LOC_NAME_SKYTOWER,
205
+ LOC_DESC_SKYTOWER,
206
+ LOC_CONNECTIONS_SKYTOWER,
207
+ :high,
208
+ [item_by_id(4)],
209
+ @monsters
210
+ )
211
+ )
212
+ end
213
+
214
+ public
215
+
216
+ attr_reader :locations
217
+ attr_accessor :player
218
+
219
+ def initialize
220
+ @monsters = init_monsters
221
+ @items = init_items
222
+ @locations = init_locations
223
+ @player = nil
224
+ end
225
+
226
+ def item_by_id(id)
227
+ @items.each do |item|
228
+ if item.id.to_i.equal? id
229
+ return item
230
+ end
231
+ end
232
+ return nil
233
+ end
234
+
235
+ def list_locations
236
+ world_locations = []
237
+ @locations.each do |loc|
238
+ world_locations.push(loc.name)
239
+ end
240
+ return"The world consists of #{world_locations.join(', ')}"
241
+ end
242
+
243
+ def loc_by_id(id)
244
+ @locations.each do |loc|
245
+ if loc.id.to_i.equal? id
246
+ return loc
247
+ end
248
+ end
249
+ return nil
250
+ end
251
+
252
+ def list_monsters
253
+ world_monsters = []
254
+ @monsters.each do |mob|
255
+ world_monsters.push(mob.name)
256
+ end
257
+ return "The world's monsters consist of #{world_monsters.join(', ')}"
258
+ end
259
+
260
+ def mob_by_id(id)
261
+ @monsters.each do |mob|
262
+ if mob.id.to_i.equal? id
263
+ return mob
264
+ end
265
+ end
266
+ return nil
267
+ end
268
+ end
269
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe Rubywarrior do
4
+ it 'has a version number' do
5
+ expect(Rubywarrior::VERSION).not_to be nil
6
+ end
7
+
8
+ it 'does something useful' do
9
+ expect(false).to eq(true)
10
+ end
11
+ end
@@ -0,0 +1,2 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+ require 'rubywarrior'
metadata ADDED
@@ -0,0 +1,158 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gemwarrior
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Michael Chadwick
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-05-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: os
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.9'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.9.6
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '0.9'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.9.6
33
+ - !ruby/object:Gem::Dependency
34
+ name: pry-byebug
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '3.0'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '3.0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: bundler
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.8'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.8'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rake
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '10.0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '10.0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: rspec
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '3.0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '3.0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: rubocop
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '0.29'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '0.29'
103
+ description: A fun role-playing game in the form of a RubyGem!
104
+ email: mike@codana.me
105
+ executables:
106
+ - gemwarrior
107
+ extensions: []
108
+ extra_rdoc_files: []
109
+ files:
110
+ - ".gitignore"
111
+ - ".rspec"
112
+ - ".travis.yml"
113
+ - Gemfile
114
+ - LICENSE.txt
115
+ - README.md
116
+ - Rakefile
117
+ - bin/gemwarrior
118
+ - gemwarrior.gemspec
119
+ - lib/gemwarrior.rb
120
+ - lib/gemwarrior/constants.rb
121
+ - lib/gemwarrior/creature.rb
122
+ - lib/gemwarrior/evaluator.rb
123
+ - lib/gemwarrior/game.rb
124
+ - lib/gemwarrior/inventory.rb
125
+ - lib/gemwarrior/item.rb
126
+ - lib/gemwarrior/location.rb
127
+ - lib/gemwarrior/monster.rb
128
+ - lib/gemwarrior/player.rb
129
+ - lib/gemwarrior/repl.rb
130
+ - lib/gemwarrior/version.rb
131
+ - lib/gemwarrior/world.rb
132
+ - spec/rubywarrior_spec.rb
133
+ - spec/spec_helper.rb
134
+ homepage: http://rubygems.org/gems/gemwarrior
135
+ licenses:
136
+ - MIT
137
+ metadata: {}
138
+ post_install_message:
139
+ rdoc_options: []
140
+ require_paths:
141
+ - lib
142
+ required_ruby_version: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ required_rubygems_version: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ requirements: []
153
+ rubyforge_project:
154
+ rubygems_version: 2.4.6
155
+ signing_key:
156
+ specification_version: 4
157
+ summary: RPG as RubyGem
158
+ test_files: []