《易学Python》——6.4 财宝

本节书摘来自异步社区《易学Python》一书中的第6章,第6.4节,作者[澳]Anthony Briggs,王威,袁国忠 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。

6.4 财宝

咱们现在在游戏中添加一些更有趣的元素。首先,您希望在游戏开始时给玩家一些装备或财宝,以吸引玩家玩下去,进而不能自拔。没有宝剑和财宝,游戏就不是冒险游戏,因此咱们先来添加这些物品。然而,这样做之前需要更深入地思考一下游戏设计。

6.4.1 方法该放在什么地方

显然,您需要与这些物品交互,这意味着您至少需要能够执行GET SWORD、LOOK SWORD和DROP SWORD等命令。按您当前的行事方式,这意味着需要有处理这些命令的方法。

一种选择是将这个方法放在Player类中——毕竟,执行捡拾和放下操作的是玩家。您一不小心就会这样想,但进行面向对象编程时,应尽可能放权。例如,以后您可能添加玩家无法捡拾的物品,如笨重的箱子或雕像。这好办,只需检查对象,看其immovable标记是否被设置。如果仅当箱子非常坚固时,玩家才能捡拾,该如何办呢?再进行检查。您完全能够想见这样做的后果:等到游戏编写好时,Player的get()方法可能包含五六个甚至二十个条件。

注意:

刚开始设计类时,可能感觉很棘手。需要牢记的要点是,经验很重要,因此您会越做越顺手。另外,别忘了您可尝试不同的设计,并从中挑选最佳的设计。

一种更佳的方式是,让物品自己负责判断玩家能否捡拾它。箱子“知道”自己的重量,还能通过检查确保仅当玩家有权获取其中的物品时,才能捡拾箱子。这听起来怪怪的,但Player对象不应负责检查物品的重要以及怪物如何搏斗,因为将这些物品加入Player对象将导致它过于复杂。下面来看看如何实现可供玩家寻找的对象,然后修改这些对象,使其可供玩家捡拾。

程序清单6.5 一个可供玩家寻找的对象


screenshot

Item对象需要知道的事情与对象Player和Cave很像:名称和所处的位置。您可以在创建Item实例时提供所有这些信息。

当前,Item对象只对一个命令做出响应:LOOK。玩家发出命令LOOK,并将Item对象的名称作为命令中的名词时,将调用方法look,而这个方法只是返回指定Item对象的描述。


screenshot

6.4.2 寻宝

另外,您还需修改洞穴的描述,让玩家知道洞穴中都有些什么。在这里,您将效仿前面的做法,将Player类的方法look()删除,并在Cave类中添加方法look()。

程序清单6.6 修改命令look()

screenshot
screenshot

在冒险游戏中添加物品,设置其名称、描述和位置,Item对象将负责处理其他的事情。

如果您现在运行这个冒险游戏,应该能够寻找财宝和闪亮的宝剑,但不能捡拾,因此接下来需添加捡拾功能。

6.4.3 捡宝

现在,需要让物品对捡拾命令做出响应。为此,需要做两方面的修改:一是给Item类添加方法get()和drop();二是修改Player类,使其能够携带物品。程序清单6.8演示了如何在游戏中添加这些命令。

程序清单6.8 物品自己让玩家能够捡拾它

screenshot


screenshot

程序清单6.9演示了如何更新Player类,使其能够存储物品;还添加了一些命令,让Player对象能够显示财产目录和错误消息;最后,在查找与命令对应的方法时,还检查了财产目录。

程序清单6.9 更新Player类

screenshot
screenshot

至此,玩家可寻找和捡拾宝剑和闪闪发光的钱币,还可丢弃它们(虽然这样做不存在什么冒险性)。有了宝剑和财宝在手,该在洞穴迷宫中继续前行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值