gemwarrior 0.4.1 → 0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/bin/gemwarrior +0 -0
  3. data/lib/gemwarrior/entities/creature.rb +13 -18
  4. data/lib/gemwarrior/entities/entity.rb +3 -9
  5. data/lib/gemwarrior/entities/item.rb +6 -13
  6. data/lib/gemwarrior/entities/items/bed.rb +19 -0
  7. data/lib/gemwarrior/entities/items/feather.rb +19 -0
  8. data/lib/gemwarrior/entities/items/gun.rb +19 -0
  9. data/lib/gemwarrior/entities/items/stalactite.rb +19 -0
  10. data/lib/gemwarrior/entities/items/stone.rb +19 -0
  11. data/lib/gemwarrior/entities/items/tree.rb +19 -0
  12. data/lib/gemwarrior/entities/location.rb +38 -74
  13. data/lib/gemwarrior/entities/monster.rb +12 -35
  14. data/lib/gemwarrior/entities/monsters/alexandrat.rb +30 -0
  15. data/lib/gemwarrior/entities/monsters/amberoo.rb +30 -0
  16. data/lib/gemwarrior/entities/monsters/amethystle.rb +30 -0
  17. data/lib/gemwarrior/entities/monsters/apatiger.rb +30 -0
  18. data/lib/gemwarrior/entities/monsters/aquamarine.rb +30 -0
  19. data/lib/gemwarrior/entities/monsters/bloodstorm.rb +30 -0
  20. data/lib/gemwarrior/entities/monsters/citrinaga.rb +30 -0
  21. data/lib/gemwarrior/entities/monsters/coraliz.rb +30 -0
  22. data/lib/gemwarrior/entities/monsters/cubicat.rb +30 -0
  23. data/lib/gemwarrior/entities/monsters/diaman.rb +30 -0
  24. data/lib/gemwarrior/entities/player.rb +117 -154
  25. data/lib/gemwarrior/evaluator.rb +31 -16
  26. data/lib/gemwarrior/game.rb +28 -26
  27. data/lib/gemwarrior/inventory.rb +14 -16
  28. data/lib/gemwarrior/misc/version.rb +1 -1
  29. data/lib/gemwarrior/misc/wordlist.rb +7 -1
  30. data/lib/gemwarrior/repl.rb +2 -2
  31. data/lib/gemwarrior/world.rb +130 -298
  32. metadata +20 -7
  33. data/lib/gemwarrior/defaults.rb +0 -137
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 638aef0b767f40757bdadab429977bdcd2f23c22
4
- data.tar.gz: 9e7a30b926f56dee75605ac92a41a966c6886e7c
3
+ metadata.gz: dda7511ef167bd6776d0da74d168cb2d99b17635
4
+ data.tar.gz: ceb694fe92e5528d0ec89a1e312a1878b0058e5f
5
5
  SHA512:
6
- metadata.gz: a231f1497002ec5a325e913b156595b067a5ccfabd77f966c6e4861d73a07a6197e1dc8ddc096d912c309df82b2bbf34189a80ebe51c99799e567b437580b93e
7
- data.tar.gz: ddd8a4352f8e0691a67c6e382221b4a8cbb05c9c3de312f7ab7545e8e82a126e5812fba2fcf81bb4abfe6108a29343d2a0e9df06ee3a50501db8d516af4bfd64
6
+ metadata.gz: ce465c7fd3627748fdd14891dd203fe96606a39dedf287889ab49e947a3b11492d8a902adabc78273e554cda6fda32a9e9f899468f469d3c028118a095a9f636
7
+ data.tar.gz: 50f552b9b60c672ed408e9928aa2019aa6850090ac012f9cc9d82f6d4e96c306f17e763d266b402ef8c0ef5e1ecacb8b5cb57718344b1825e522f3a461cc6945
data/bin/gemwarrior CHANGED
File without changes
@@ -2,26 +2,21 @@
2
2
  # Creature base class
3
3
 
4
4
  require_relative 'entity'
5
- require_relative '../inventory'
6
5
 
7
6
  module Gemwarrior
8
7
  class Creature < Entity
9
- attr_accessor :id, :name, :description, :face, :hands, :mood,
10
- :level, :hp_cur, :hp_max, :inventory
11
-
12
- def initialize(options)
13
- self.id = options[:id]
14
- self.name = options[:name]
15
- self.description = options[:description]
16
- self.face = options[:face]
17
- self.hands = options[:hands]
18
- self.mood = options[:mood]
19
-
20
- self.level = options[:level]
21
- self.hp_cur = options[:hp_cur]
22
- self.hp_max = options[:hp_max]
23
-
24
- self.inventory = options[:inventory]
25
- end
8
+ attr_accessor :face,
9
+ :hands,
10
+ :mood,
11
+ :level,
12
+ :xp,
13
+ :hp_cur,
14
+ :hp_max,
15
+ :atk_lo,
16
+ :atk_hi,
17
+ :defense,
18
+ :dexterity,
19
+ :inventory,
20
+ :rox
26
21
  end
27
22
  end
@@ -3,18 +3,12 @@
3
3
 
4
4
  module Gemwarrior
5
5
  class Entity
6
- attr_reader :id, :name, :description
7
-
8
- def initialize(options)
9
- self.id = options[:id]
10
- self.name = options[:name]
11
- self.description = options[:description]
12
- end
13
-
6
+ attr_accessor :name,
7
+ :description
8
+
14
9
  def status
15
10
  status_text = name.ljust(20).upcase
16
11
  status_text << "#{description}\n"
17
- status_text.to_s
18
12
  end
19
13
  end
20
14
  end
@@ -5,18 +5,11 @@ require_relative 'entity'
5
5
 
6
6
  module Gemwarrior
7
7
  class Item < Entity
8
- attr_accessor :id, :name, :description,
9
- :atk_lo, :atk_hi, :takeable, :equippable, :equipped
10
-
11
- def initialize(options)
12
- self.id = options[:id]
13
- self.name = options[:name]
14
- self.description = options[:description]
15
- self.atk_lo = options[:atk_lo]
16
- self.atk_hi = options[:atk_hi]
17
- self.takeable = options[:takeable]
18
- self.equippable = options[:equippable]
19
- self.equipped = options[:equipped]
20
- end
8
+ attr_accessor :atk_lo,
9
+ :atk_hi,
10
+ :takeable,
11
+ :useable,
12
+ :equippable,
13
+ :equipped
21
14
  end
22
15
  end
@@ -0,0 +1,19 @@
1
+ # lib/gemwarrior/entities/items/bed.rb
2
+ # Item::Bed
3
+
4
+ require_relative '../item'
5
+
6
+ module Gemwarrior
7
+ class Bed < Item
8
+ def initialize
9
+ self.name = 'bed'
10
+ self.description = 'The place where you sleep when you are not adventuring.'
11
+ self.atk_lo = nil
12
+ self.atk_hi = nil
13
+ self.takeable = false
14
+ self.useable = true
15
+ self.equippable = false
16
+ self.equipped = false
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # lib/gemwarrior/entities/items/feather.rb
2
+ # Item::Feather
3
+
4
+ require_relative '../item'
5
+
6
+ module Gemwarrior
7
+ class Feather < Item
8
+ def initialize
9
+ self.name = 'feather'
10
+ self.description = 'A blue and green feather. It is soft and tender, unlike the craven bird that probably shed it.'
11
+ self.atk_lo = nil
12
+ self.atk_hi = nil
13
+ self.takeable = true
14
+ self.useable = true
15
+ self.equippable = false
16
+ self.equipped = false
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # lib/gemwarrior/entities/items/gun.rb
2
+ # Item::Gun
3
+
4
+ require_relative '../item'
5
+
6
+ module Gemwarrior
7
+ class Gun < Item
8
+ def initialize
9
+ self.name = 'gun'
10
+ self.description = 'Pew pew goes this firearm, you suspect.'
11
+ self.atk_lo = 3
12
+ self.atk_hi = 5
13
+ self.takeable = true
14
+ self.useable = true
15
+ self.equippable = true
16
+ self.equipped = false
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # lib/gemwarrior/entities/items/stalactite.rb
2
+ # Item::Stalactite
3
+
4
+ require_relative '../item'
5
+
6
+ module Gemwarrior
7
+ class Stalactite < Item
8
+ def initialize
9
+ self.name = 'stalactite'
10
+ self.description = 'Long protrusion of cave adornment, broken off and fallen to the ground, where the stalagmites sneer at it from.'
11
+ self.atk_lo = 2
12
+ self.atk_hi = 3
13
+ self.takeable = true
14
+ self.useable = true
15
+ self.equippable = true
16
+ self.equipped = false
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # lib/gemwarrior/entities/items/stone.rb
2
+ # Item::Stone
3
+
4
+ require_relative '../item'
5
+
6
+ module Gemwarrior
7
+ class Stone < Item
8
+ def initialize
9
+ self.name = 'stone'
10
+ self.description = 'A small, sharp mega pebble, suitable for tossing in amusement, and perhaps combat.'
11
+ self.atk_lo = 2
12
+ self.atk_hi = 3
13
+ self.takeable = true
14
+ self.useable = true
15
+ self.equippable = true
16
+ self.equipped = false
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # lib/gemwarrior/entities/items/tree.rb
2
+ # Item::Tree
3
+
4
+ require_relative '../item'
5
+
6
+ module Gemwarrior
7
+ class Tree < Item
8
+ def initialize
9
+ self.name = 'tree'
10
+ self.description = 'A mighty representation of nature, older than your father\'s father\'s second great-uncle.'
11
+ self.atk_lo = nil
12
+ self.atk_hi = nil
13
+ self.takeable = false
14
+ self.useable = false
15
+ self.equippable = false
16
+ self.equipped = false
17
+ end
18
+ end
19
+ end
@@ -12,62 +12,24 @@ module Gemwarrior
12
12
  DANGER_LEVEL = {:none => 0, :low => 15, :moderate => 30, :high => 55, :assured => 100}
13
13
 
14
14
  ## ERRORS
15
- ERROR_LOCATION_ITEM_REMOVE_INVALID = 'That item cannot be removed as it doesn\'t exist here.'
16
- ERROR_LOCATION_DESCRIBE_ENTITY_INVALID = 'You don\'t see that here.'
15
+ ERROR_LOCATION_ITEM_REMOVE_INVALID = 'That item cannot be removed as it does not exist here.'
16
+ ERROR_LOCATION_DESCRIBE_ENTITY_INVALID = 'You do not see that here.'
17
17
 
18
- attr_accessor :id, :name, :description, :locs_connected, :danger_level,
19
- :items, :monsters_available, :monsters_abounding, :checked_for_monsters
18
+ attr_accessor :coords, :locs_connected, :danger_level, :items,
19
+ :monsters_available, :monsters_abounding, :checked_for_monsters
20
20
 
21
21
  def initialize(options)
22
- self.id = options[:id]
23
- self.name = options[:name]
24
- self.description = options[:description]
25
- self.locs_connected = options[:locs_connected]
26
- self.danger_level = options[:danger_level]
27
- self.items = options[:items]
28
- self.monsters_available = options[:monsters_available]
22
+ self.name = options.fetch(:name)
23
+ self.description = options.fetch(:description)
24
+ self.coords = options.fetch(:coords)
25
+ self.locs_connected = options.fetch(:locs_connected)
26
+ self.danger_level = options.fetch(:danger_level)
27
+ self.items = options.fetch(:items)
28
+ self.monsters_available = options.fetch(:monsters_available)
29
29
  self.monsters_abounding = []
30
30
  self.checked_for_monsters = false
31
31
  end
32
-
33
- def describe
34
- desc_text = ""
35
- desc_text << "[ #{name} ]\n"
36
- desc_text << description
37
- unless checked_for_monsters?
38
- populate_monsters
39
- end
40
- unless list_items.nil?
41
- desc_text << list_items
42
- end
43
- unless list_monsters.nil?
44
- desc_text << list_monsters
45
- end
46
- desc_text << list_paths
47
32
 
48
- return desc_text
49
- end
50
-
51
- def describe_entity(entity_name)
52
- if items.map(&:name).include?(entity_name)
53
- items.each do |i|
54
- if i.name.eql?(entity_name)
55
- return "#{i.description}"
56
- end
57
- end
58
- elsif
59
- if monsters_abounding.map(&:name).include?(entity_name)
60
- monsters_abounding.each do |m|
61
- if m.name.eql?(entity_name)
62
- return "#{m.description}"
63
- end
64
- end
65
- end
66
- else
67
- ERROR_LOCATION_DESCRIBE_ENTITY_INVALID
68
- end
69
- end
70
-
71
33
  def remove_item(item_name)
72
34
  if items.map(&:name).include?(item_name)
73
35
  items.reject! { |item| item.name == item_name }
@@ -77,19 +39,23 @@ module Gemwarrior
77
39
  end
78
40
 
79
41
  def remove_monster(name)
80
- if has_monster_to_attack?(name)
81
- monsters_abounding.reject! { |monster| monster.name == name }
82
- end
42
+ monsters_abounding.reject! { |monster| monster.name == name }
83
43
  end
84
44
 
85
45
  def has_loc_to_the?(direction)
46
+ case direction
47
+ when 'n'
48
+ direction = 'north'
49
+ when 'e'
50
+ direction = 'east'
51
+ when 's'
52
+ direction = 'south'
53
+ when 'w'
54
+ direction = 'west'
55
+ end
86
56
  locs_connected[direction.to_sym]
87
57
  end
88
58
 
89
- def has_monster_to_attack?(name)
90
- monsters_abounding.map(&:name).include?(name.downcase)
91
- end
92
-
93
59
  def monster_by_name(name)
94
60
  monsters_abounding.each do |m|
95
61
  if m.name.eql?(name)
@@ -98,12 +64,24 @@ module Gemwarrior
98
64
  end
99
65
  end
100
66
 
101
- private
102
-
103
67
  def checked_for_monsters?
104
68
  checked_for_monsters
105
69
  end
106
70
 
71
+ def has_monster?
72
+ found = false
73
+ unless danger_level.eql?(:none)
74
+ max = DANGER_LEVEL[danger_level]
75
+ trigger_values = 0..max
76
+ actual_value = rand(1..100)
77
+
78
+ if trigger_values.include?(actual_value)
79
+ found = true
80
+ end
81
+ end
82
+ return found
83
+ end
84
+
107
85
  def list_items
108
86
  return "\n >> Shiny object(s): #{items.map(&:name).join(', ')}" if items.length > 0
109
87
  end
@@ -115,32 +93,18 @@ module Gemwarrior
115
93
  def list_paths
116
94
  valid_paths = []
117
95
  locs_connected.each do |key, value|
118
- unless value.nil?
96
+ if value
119
97
  valid_paths.push(key.to_s)
120
98
  end
121
99
  end
122
100
  return "\n >> Paths: #{valid_paths.join(', ')}"
123
101
  end
124
102
 
125
- def has_monster?
126
- found = false
127
- unless danger_level.eql?(:none)
128
- max = DANGER_LEVEL[danger_level]
129
- trigger_values = 0..max
130
- actual_value = rand(1..100)
131
-
132
- if trigger_values.include?(actual_value)
133
- found = true
134
- end
135
- end
136
- return found
137
- end
138
-
139
103
  def populate_monsters
140
104
  self.checked_for_monsters = true
141
105
  if has_monster?
142
106
  self.monsters_abounding = []
143
- return monsters_abounding.push(monsters_available[rand(0..monsters_available.length-1)])
107
+ monsters_abounding.push(monsters_available[rand(0..monsters_available.length-1)])
144
108
  else
145
109
  return nil
146
110
  end
@@ -5,44 +5,21 @@ require_relative 'creature'
5
5
 
6
6
  module Gemwarrior
7
7
  class Monster < Creature
8
- attr_accessor :xp, :atk_hi, :atk_lo, :dexterity,
9
- :rox_to_give, :xp_to_give, :battlecry
10
-
11
- def initialize(options)
12
- self.id = options[:id]
13
- self.name = options[:name]
14
- self.description = options[:description]
15
- self.face = options[:face]
16
- self.hands = options[:hands]
17
- self.mood = options[:mood]
18
-
19
- self.level = options[:level]
20
- self.hp_cur = options[:hp_cur]
21
- self.hp_max = options[:hp_max]
22
-
23
- self.atk_lo = options[:atk_lo]
24
- self.atk_hi = options[:atk_hi]
25
- self.dexterity = options[:dexterity]
26
-
27
- self.inventory = options[:inventory]
28
- self.rox_to_give = options[:rox_to_give]
29
- self.xp_to_give = options[:xp_to_give]
30
-
31
- self.battlecry = options[:battlecry]
32
- end
33
-
8
+ attr_accessor :battlecry
9
+
34
10
  def describe
35
- status_text = name.upcase.ljust(13)
11
+ status_text = name.upcase.ljust(20)
36
12
  status_text << "LEVEL: #{level.to_s.rjust(2)}, "
37
- status_text << "HP: #{hp_cur.to_s.rjust(3)}/#{hp_max.to_s.rjust(3)}, "
38
- status_text << "ATK: #{atk_lo.to_s.rjust(2)}-#{atk_hi.to_s.rjust(2)}, "
39
- status_text << "DEX: #{dexterity.to_s.rjust(3)}, "
40
- status_text << "XP: #{xp_to_give.to_s.rjust(3)}, "
41
- status_text << "ROX: #{rox_to_give.to_s.rjust(3)}, "
42
- status_text << "FACE: #{face.ljust(10)}, "
43
- status_text << "HANDS: #{hands.ljust(10)}, "
13
+ status_text << "HP: #{hp_cur.to_s.rjust(3)}/#{hp_max.to_s.rjust(3)} "
14
+ status_text << "ATK: #{atk_lo.to_s.rjust(2)}-#{atk_hi.to_s.rjust(2)} "
15
+ status_text << "DEF: #{defense.to_s.rjust(2)} "
16
+ status_text << "DEX: #{dexterity.to_s.rjust(2)} "
17
+ status_text << "INV: #{inventory.list_contents} "
18
+ status_text << "ROX: #{rox.to_s.rjust(3)} "
19
+ status_text << "XP: #{xp.to_s.rjust(3)} "
20
+ status_text << "FACE: #{face.ljust(10)} "
21
+ status_text << "HANDS: #{hands.ljust(11)} "
44
22
  status_text << "MOOD: #{mood.ljust(10)}\n"
45
- status_text.to_s
46
23
  end
47
24
 
48
25
  def take_damage(dmg)