module Rooms class Room def initialize engine @engine = engine end def resolve command case @command when 'a' @engine.xp -= 50 @engine.magic_armor += 1 @message = "You've upgraded your magic armor!" when 'w' @engine.xp -= 50 @engine.magic_weapon += 1 @message = "You've upgraded your magic weapon!" else do_invalid end end def to_s 'store' end end class Empty < Room def instant_resolve false end def do_resolve case @command when 'r' @engine.update_hex 1, 3, 0 when 's' @engine.update_hex 3, -1, 0 when 'm' else do_invalid end end def enter_message 'You enter an empty room. Nothing dangerous or interesting happening here.' end def success_message case @command when 'r' 'You rest for a bit. You feel refreshed!' when 's' 'After a while, you find some dried meat. It looks good to eat' when 'm' "You decide there's no time to waste. You continue down the corridor." end end def options [ 'rest (+1 H, +3 E)', 'scavenge for food (+3 H, -1 E)' ] end def to_s 'empty' end end class Trap < Room def instant_resolve false end def do_resolve case @command when 't' @engine.update_hex -@engine.level, 0, 0 when 'd' @engine.update_hex 0, -@engine.level, 0 else do_invalid end end def success_message case @command when 't' 'Ouch!' when 'd' 'Very carefully, you manage to disable the trap.' end end def enter_message 'You stop yourself short. Your foot was about to brush a tripwire!' end def options [ "trigger trap (-#{@engine.level} H)", "disable trap (-#{@engine.level} E)" ] end def to_s 'trap' end end class Monster < Room def instant_resolve false end def do_resolve case @command when 'r' when 'f' @engine.update_hex -@engine.level, -@engine.level, @engine.level else do_invalid end end def enter_message 'You turn the corner and see an ugly monster!' end def success_message case @command when 'r' 'You book it from there, heart beating fast. But you manage to lose the monster.' when 'f' 'The monster is defeated, your clothes still wet with blood, its and yours.' end end def options [ "run away", "fight (-#{@engine.level} H, -#{@engine.level} E, #{@engine.level} X)" ] end def to_s 'monster' end end class Treasure < Room def instant_resolve true end def do_instant_resolve roll = 1 + rand(6) case roll + @engine.level when 1..3 @found = 'key' @engine.keys += 1 else @found = 'gold' @engine.update_hex 0, 0, @engine.level end end def enter_message 'You enter a dusty room. Something shiny on the ground catches your eye.' end def success_message case @found when 'key' 'You find a key!' when 'gold' "You found some gold! (+#{@engine.level} X)" end end def to_s 'treasure' end end class Stairs < Room def instant_resolve true end def do_instant_resolve @engine.level += 1 end def enter_message 'You come across a set of cracked stairs.' end def success_message 'You journey downwards.' end def to_s 'stairs' end end class Boss < Room def instant_resolve true end def do_instant_resolve @engine.update_hex -2 * @engine.level, -2 * @engine.level, 2 * @engine.level end def enter_message "You encounter a giant boss monster. There's no escape routes, it's live or die!" end def success_message 'You defeat the fiend!' end def to_s 'boss' end end class Exit < Room def instant_resolve true end def do_instant_resolve @engine.state = 'win' end def success_message 'You won! Congratulations!' end def to_s 'exit' end end end