gemwarrior 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []