Walking Around in Our World
|
Ok, now that we can see our world, let's write some code that
lets us walk around in it. The function walk-direction
(not in the Functional style) takes a direction and lets
us walk there:
|
(defun walk-direction (direction)
(let ((next (assoc direction (cddr (assoc location map)))))
(cond (next (setf location (third next)) (look))
(t '(you cannot go that way -)))))
|
The special command let allows us to create the local
variable next, which we set to the path descriptor for
the direction the player wants to walk in - cdr just
chops the first item off of a list. If the user types in a
bogus direction, next will be nil. The
cond command is like a chain of if-then commands in
Lisp: Each row in a cond has a value to check and an
action to do. In this case, if the next location is not
nil, it will setf the player's location to
the third item in the path descriptor, which holds the symbol
describing the new direction, then gives the user a look of
the new place. If the next location is nil, it falls
through to the next line and admonishes the user. Let's try it:
|
(walk-direction 'west)
|
==> (you are in a beautiful garden -
there is a well in front of you -
there is a door going east from here -
you see a frog on the floor -
you see a chain on the floor -)
|
Now, we were able to simplify our description functions by
creating a look command that is easy for our player to
type. Similarly, it would be nice to adjust the
walk-direction command so that it doesn't have an
annoying quote mark in the command that the player has to type
in. But, as we have learned, when the interpreter reads a form
in Code mode, it will read all its parameters in
Code mode, unless a quote tells it not to. Is there
anything we can do to tell the interpreter that west
is just a piece of data without the quote?
|
<< begin
< previous -
next >
end >>
|