;;;;LOL Wizard game start | |
#| | |
$ rlwrap ecl -load lisp.house | |
> (look) | |
I am in a living-room | |
Exits to: (LADDER DOOR) | |
NIL | |
> (traverse 'ladder) | |
I am in an attic | |
Exits to: (LADDER) | |
NIL | |
> (traverse 'ladder) | |
I am in a living-room | |
Exits to: (LADDER DOOR) | |
NIL | |
> (traverse 'door) | |
I am in a garden | |
Exits to: (DOOR) | |
NIL | |
> *room* | |
#1=(CURRENT GARDEN #2=(DOOR LIVING-ROOM (LADDER ATTIC #2#) #1#)) | |
|# | |
#| | |
I was inspired by Land of Lisp's use of #'ASH | |
which does bitshifting in the number-guess-game | |
to be cute with travelling between rooms in the | |
start of making my wizard game using circles and #'rplaca. | |
|# | |
(setq *print-circle* t) | |
#| | |
I'm also social media detoxing right now. | |
Can someone help havoc dig in? | |
Also ldbeth and mhcat I want to see your historical | |
wizard games if you have them (and everyone's) | |
While I'm here nm03 I would like to hear your synth | |
|# | |
(setq *room* '(current living-room | |
(ladder attic) | |
(door garden))) | |
#| | |
listen, I grew this organically. | |
I think it makes sense that travelling back and | |
forth through a door ends up in the same place | |
even though you are only going forwards (in the | |
singly linked list using cdr) | |
Here I manually circle-ise each of two connected | |
rooms. | |
Since I wanted to go through a door, but arrive | |
in a room, the list got a bit complicated. | |
|# | |
(setf (cdr (cdadr (cdr *room*))) (list *room*) | |
(cdr (cdaddr (cdr *room*))) (list *room*)) | |
(defvar *vowels* '(#\a #\e #\i #\o #\u)) | |
(defun look () " | |
(look) | |
I am in an attic | |
Exits to: (LADDER) | |
" | |
(let ((string (format nil "~(~a~)" (cadr *room*))) | |
(exits (mapcar 'car (cddr *room*)))) | |
(format t "I am in a~@[n~1*~] ~a~%" | |
(find (char string 0) *vowels*) | |
string) | |
#| "Seedy underbelly of lisp" ha ha ha |# | |
(format t "Exits to: ~a" exits))) | |
(defun traverse (edge) " | |
(traverse 'door) | |
" | |
(let ((destination (assoc edge (cddr *room*)))) | |
(cond (destination (rplaca *room* edge) | |
(setq *room* destination) | |
(rplaca *room* 'current)) | |
((null destination) (format t "~a not found~%" edge)) | |
(t (error "Mystery error")))) | |
(look)) | |
#| | |
Since I had just read five chapters introducing | |
bits of lisp culture and the whole thing with | |
parens syntax and conses, the moment the wizard | |
game concept was mentioned I went for broke so | |
I might have diverged from the book. | |
|# | |
#| | |
someone got my experimental search to break before. | |
so it's off right now. I wrote a new one, but | |
didn't roll it out yet. | |
|# | |