感觉好多了! 现在我们来创建一个命令来收集游戏里的物品
(defn pickup-object [object]
(cond (is-at? object location object-locations)
(do
(def object-locations (assoc object-locations object 'body))
`(you are now carrying the ~object))
:else '(you cannot get that.)))
这个函数检查物品是否在当前地点的地上-如果在,则将它放到list里面,并返回成功提示!否则提示失败! 现在我们来创建另一个SPEL来简化这条命令:
(defspel pickup [object] `(spel-print (pickup-object '~object)))
调用
(pickup whiskey-bottle)user=> (pickup whiskey-bottle)
(you are now carrying the whiskey-bottle)
现在我们来添加更多有用的命令-首先,一个能让我们查看我们捡到的物品的函 数:
(defn inventory []
(filter (fn [x] (is-at? x 'body object-locations)) objects))

以及一个检查我们是否有某个物品的函数:
(defn have? [object]
(some #{object} (inventory)))
现在我们只剩下一件事情需要做了:添加一些特殊动作,使得玩家能够赢得游戏.第一条命令是让玩家在阁楼里给水桶焊接链条.
(def chain-welded false)
(defn weld [subject object]
(cond (and (= location 'attic)
(= subject 'chain)
(= object 'bucket)
(have? 'chain)
(have? 'bucket)
(not chain-welded))
(do (def chain-welded true)
'(the chain is now securely welded to the bucket -))
:else '(you cannot weld like that -)))
首先我们创建了一个新的全局变量来进行判断,我们是否进行了此操作.然后我们创建了一个weld函数,来确认此操作的条件是否完成,如果已完成则进行此操作.
来试一下:
(weld 'chain 'bucket)user=> (weld 'chain 'bucket)
(you cannot weld like that -)
Oops...我们没有水桶,也没有链条,是吧?周围也没有焊接的机器!
现在,让我们创建一条命令来将链条和水桶放到井里:
(def bucket-filled false)
(defn dunk [subject object]
(cond (and (= location 'garden)
(= subject 'bucket)
(= object 'well)
(have? 'bucket)
chain-welded)
(do (def bucket-filled true)
'(the bucket is now full of water))
:else '(you cannot dunk like that -)))
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/shumachanpin/article-41579-6.html
让美彻底放弃冷战思维除非衰退加速