《易学Python》——6.4 财宝

6.4 财宝

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

6.4.1 方法该放在什么地方

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

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

注意:

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

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

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

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

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

6.4.2 寻宝

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

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


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

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

6.4.3 捡宝

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

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

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

程序清单6.9 更新Player类


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

时间: 2024-09-17 04:45:24

《易学Python》——6.4 财宝的相关文章

《易学Python》——第6章 类与面向对象编程 6.1 类是什么

第6章 类与面向对象编程 本章介绍如下内容: 一种看待类的更简单方式: 如何使用类来设计程序. 在本书前面,始终未涉及Python中组织程序的基本方式之一:类.类和面向对象编程通常被认为是一个庞大而吓人的主题,仅供真正的程序员用来编写程序,因此您可能认为,要正确地使用它们,需要大量的理论知识.没有比这种看法更离谱的了.在Python中,使用类和面向编程易如反掌. 在本章中,您将首先复习第2章为游戏Hunt the Wumpus编写的洞穴生成代码,并了解到使用类编写这些代码容易得多:然后,您将以此

《易学Python》——导读

前 言 自序 受邀编写本书时,我无意再编写一本介绍性图书,而想采取不同的做法.我阅读过的编程图书无不罗列功能:列表可用于存储信息,您可调用len(mylist)来获悉它包含多少项信息,调用pop()来删除末尾的元素,调用append()来添加元素,等等.这些就是您需要知道的有关列表的全部知识,接下来介绍下一项功能.在这样的图书中,即便有示例程序,也要么只包含寥寥数行代码,要么出现在最后几章,作为对全书内容的总结. 我自己在最初学习编程时,并不是先从头到尾阅读整本编程图书,等对一切都熟悉后再开始编

《易学Python》——1.2 是什么让Python如此杰出

1.2 是什么让Python如此杰出 本书介绍Python,这也是我最喜欢的编程语言.对刚开始学习编程的初学者来说,Python是理想选择,其中的原因很多. 1.2.1 Python简单易学 如果将Python与其他编程语言进行比较,您首先将注意到它易于理解.Python的语法清晰得不能再清晰.下述特征让Python对用户非常友好. 它没有使用{.}.$./和等标点符号字符. Python使用缩进(而不是大括号)将程序分块. Python提倡程序员确保其程序清晰易读. Python支持很多程序结

《易学Python》—— 1.2 是什么让Python如此杰出

1.2 是什么让Python如此杰出 本书介绍Python,这也是我最喜欢的编程语言.对刚开始学习编程的初学者来说,Python是理想选择,其中的原因很多. 1.2.1 Python简单易学 如果将Python与其他编程语言进行比较,您首先将注意到它易于理解.Python的语法清晰得不能再清晰.下述特征让Python对用户非常友好. 它没有使用{.}.$./和等标点符号字符. Python使用缩进(而不是大括号)将程序分块. Python提倡程序员确保其程序清晰易读. Python支持很多程序结

《易学Python》——6.8 接下来如何做

6.8 接下来如何做 本章介绍了一些类和方法,这些只是可加入到游戏中的类和方法的冰山一角.您可根据喜好,沿任何方向进一步开发这个游戏,下面是一些有关如何扩展该游戏的想法. 6.8.1 增加怪物和财宝 当前,只有一个兽人和两个物品.您可添加其他类型的怪物和财宝(威力更大的武器或以不同方式影响怪物的武器).您还可以存储得分(该得分可通过Player类的score方法进行访问),并在玩家结束游戏或死亡时将得分打印出来. 6.8.2 扩展格斗方式和物品 您可以扩展Item类或方法Player.attac

《易学Python》——1.6 排除故障

1.6 排除故障 如果运行Python程序时没有看到窗口,问题可能出在几个地方.在您学习编程的过程中,可能经常遇到类似这样的错误.要解决问题,一个不错的做法是,将运行程序时出现的错误消息或症状作为关键字,在网上进行搜索.另外,深陷困境时,要大胆地寻求帮助,如通过Python邮件列表.下面介绍一些常见问题. 1.6.1 语法错误 如果您输入的程序代码有误,可能看到窗口出现后迅速消失.请核查输入的代码,确保所有代码都准确无误后,再次运行程序.如果程序依然不能正确运行,可尝试从命令行运行它,这让您能够

《易学Python》——1.4 Linux

1.4 Linux 如何在Linux系统上使用Python呢?这介绍起来比较麻烦,因为有很多不同的Linux版本,它们的工作方式存在细微差别.这里以Gnome和Ubuntu为例,其他Linux版本的情况与之类似. 1.4.1 在Linux系统上安装Python 在Linux系统上,并非必须手动安装Python,这取决于您使用的是哪种版本.大多数Linux版本都默认安装了Python,但通常不是最新版本.要获悉当前安装的是哪个版本,可使用命令python -V. 在Linux系统上安装Python

《易学Python》——6.7 危险与刺激

6.7 危险与刺激 本章游戏的最后一部分是让玩家和怪物相互攻击.对游戏来说,竞争氛围必不可少:格斗能力.速度.谁建造的城市最大.谁建造的房子最好等.在这里,您编写的是一个地下城冒险游戏,因此格斗必不可少:<龙与地下城>玩家都希望能够痛击兽人.鉴于格斗将在玩家和怪物之间展开,您首先给Player类添加一个attack方法,如程序清单6.15所示. 程序清单6.15 攻击其他参与者 这就是在游戏中支持格斗所需做的全部工作!鉴于妥善地封装了所有类,因此不需要对Cave.Item和Game类做任何修改

《易学Python》——6.3 玩家输入

6.3 玩家输入 大多数冒险游戏的玩法都是这样的:玩家输入指令,如往北走.拾剑.杀怪物和检宝,游戏再显示操作结果,以及有关玩家所处房间和房间中物件的描述.这里采取同样的方法,并利用一些对象的属性简化程序的扩展工作.别忘了,您还需让代码易于测试,因此将把处理用户输入的代码放在独立的函数中. 6.3.1 名词的动词化 您将首先寻找一种不错的方式,在类结构中编写将名词转换为动词的接口.通常情况下,对象为名词,而操作对象的方法为动词,因此命令GET SWORD应在当前房间找到Sword对象,并调用其Ge