[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Catching (or saving) errors.

Tim Mcd

8/5/2008 5:34:00 AM

So, I am currently working on an Interactive Fiction like game in Ruby,
and have stumbled across a bit of a problem. The 'move' function makes a
call to the room's 'exits' variable (exits[:north], for instance) but I
want it to catch if the variable :north doesn't exist to display
something like "You can't go taht way!". I can't figure out how to do
this with my meager skills. :(

Any help would be greatly appreciated!
--
Posted via http://www.ruby-....

4 Answers

Martin DeMello

8/5/2008 6:09:00 AM

0

On Mon, Aug 4, 2008 at 10:34 PM, Tim Mcd <tmcdowell@gmail.com> wrote:
> So, I am currently working on an Interactive Fiction like game in Ruby,
> and have stumbled across a bit of a problem. The 'move' function makes a
> call to the room's 'exits' variable (exits[:north], for instance) but I
> want it to catch if the variable :north doesn't exist to display
> something like "You can't go taht way!". I can't figure out how to do
> this with my meager skills. :(
>
> Any help would be greatly appreciated!

This should illustrate the basic approach:

exits = {:north => 'front of building', :east => 'fork in road'}
print "what now? > "
move = gets.chomp.downcase
dir = case move
when "n", "north"
:north
when "s", "south"
:south
when "e", "east"
:east
when "w", "west"
:west
else
nil
end

if dir
if exits[dir]
puts "moving to #{exits[dir]}"
else
puts "you can't go that way!"
end
else
puts "no such direction. please enter one of [n]orth, [s]outh, [e]ast
or [w]est"
end

martin

Tim Mcd

8/5/2008 2:29:00 PM

0



Didn't know a nice if like that would just take care of it! Also, did
you test that code? Or the concept? I'm pretty sure you can't do
exits[avar[. I did some testing with that earlier...
--
Posted via http://www.ruby-....

Martin DeMello

8/5/2008 2:47:00 PM

0

On Tue, Aug 5, 2008 at 7:28 AM, Tim Mcd <tmcdowell@gmail.com> wrote:
>
>
> Didn't know a nice if like that would just take care of it! Also, did
> you test that code? Or the concept? I'm pretty sure you can't do
> exits[avar[. I did some testing with that earlier...

Yep, I tested it before pasting it in. What I'm doing is this:

1. defining exits as a hash
2. writing a case statement to convert move from "N" or "n" or "north"
or "NORTH" to :north
3. using the converted move as a key to look up the exits hash

In the context of a larger game, you'd have a $rooms hash, with unique
identifiers like "front of building" as location keys. So you'd say

if dir
if exits[dir]
player.move_to(exits[dir])
end
end

where player.move_to(location) would be defined something like

def move_to(location)
loc = $rooms[location]
if loc
self.current_location = loc
end
end

martin

Tim Mcd

8/5/2008 4:12:00 PM

0

Thanks a ton! You've helped out a lot! Oh, and btw, I still think the
whole obj_sword.strike(:martin) bit is hilarious :P

--
Posted via http://www.ruby-....