From 6f43ae23837f8336804b9b2e20a49196f13b82ad Mon Sep 17 00:00:00 2001 From: Marcin Chrzanowski Date: Sat, 24 Aug 2019 20:58:20 -0700 Subject: Modify state * Welcome message handled through room * Store last room, not last roll (fixes bug where Store would be entered even if a different room appeared beforehand) --- rooms.rb | 158 +++++++++++++-------------------------------------------------- 1 file changed, 33 insertions(+), 125 deletions(-) (limited to 'rooms.rb') diff --git a/rooms.rb b/rooms.rb index ff71507..2e0bc01 100644 --- a/rooms.rb +++ b/rooms.rb @@ -5,142 +5,23 @@ module Rooms end def resolve command - @command = command - if @engine.state == 'invalid' - @engine.state = 'play' - end - - if @engine.state == 'play' - _do_resolve - end - end - - def check_death - if @engine.health <= 0 - @engine.state = 'dead' - elsif @engine.endurance <= 0 - @engine.state = 'dead' - end - end - - def _do_resolve - do_resolve - check_death - if !instant_resolve - puts "Adding message: #{resolve_message}" - @engine.add_message resolve_message - end - end - - # TODO: limit weapon/armor levels - def do_resolve - case @command - when 'c' - when 'w' - if @engine.xp >= 50 - @engine.xp -= 50 - @engine.magic_weapon += 1 - @engine.add_message "You've upgraded your magic weapon!" - else - @engine.add_message 'Not enough XP to upgrade...' - end - when 'a' - if @engine.xp >= 50 - @engine.xp -= 50 - @engine.magic_armor += 1 - @engine.add_message "You've upgraded your magic armor!" - else - @engine.add_message 'Not enough XP to upgrade...' - end - else - do_invalid - end - end - - def do_invalid - @engine.state = 'invalid' - @engine.add_message "Invalid command: #{@command}" - enter - end - - def resolve_message - if @engine.state == 'dead' - if @engine.health <= 0 - death_message - elsif @engine.endurance <= 0 - exhaust_message - end - else - success_message - end - end - - def enter_message - '' - end - - def death_message - 'You die' - end - - def exhaust_message - 'You fall over exhausted' - end - - def success_message - '' - end - - def options - [ - 'continue', - ] - end - - def enter - @engine.add_message enter_message - if instant_resolve - do_instant_resolve - @engine.add_message resolve_message - end - - options.each do |option| - @engine.add_message ">[#{option[0]}]#{option[1..]}" - end - end - end - - class Store < Room - def instant_resolve - false - end - - def enter_message - 'You have enough XP to upgrade your equipment!' - end - - def options - [ - 'weapon upgrade', - 'armor upgrade' - ] - end - - def do_resolve case @command when 'a' @engine.xp -= 50 @engine.magic_armor += 1 - @engine.add_message "You've upgraded your magic armor!" + @message = "You've upgraded your magic armor!" when 'w' @engine.xp -= 50 @engine.magic_weapon += 1 - @engine.add_message "You've upgraded your magic weapon!" + @message = "You've upgraded your magic weapon!" else do_invalid end end + def to_s + 'store' + end end class Empty < Room @@ -181,6 +62,10 @@ module Rooms 'scavenge for food (+3 H, -1 E)' ] end + + def to_s + 'empty' + end end class Trap < Room @@ -218,6 +103,10 @@ module Rooms "disable trap (-#{@engine.level} E)" ] end + + def to_s + 'trap' + end end class Monster < Room @@ -254,6 +143,10 @@ module Rooms "fight (-#{@engine.level} H, -#{@engine.level} E, #{@engine.level} X)" ] end + + def to_s + 'monster' + end end class Treasure < Room @@ -285,6 +178,10 @@ module Rooms "You found some gold! (+#{@engine.level} X)" end end + + def to_s + 'treasure' + end end class Stairs < Room @@ -293,7 +190,6 @@ module Rooms end def do_instant_resolve - p 'increasing level' @engine.level += 1 end @@ -304,6 +200,10 @@ module Rooms def success_message 'You journey downwards.' end + + def to_s + 'stairs' + end end class Boss < Room @@ -322,6 +222,10 @@ module Rooms def success_message 'You defeat the fiend!' end + + def to_s + 'boss' + end end class Exit < Room @@ -336,5 +240,9 @@ module Rooms def success_message 'You won! Congratulations!' end + + def to_s + 'exit' + end end end -- cgit v1.2.3