从0开始用python写一个命令行小游戏(九)

好了,今天终于到了你们期待已久的多行+新僵尸。其实我本来想把它们放在两个beta里解决的,但后来忘了,于是打包起来,跳过beta 5,直接发布了beta 6,就是今天的结束状态。好,开始吧!上篇链接:从0开始用python写一个命令行小游戏(八)

多行游戏

一开始我为了尽可能简化游戏,我用了一个单行数组,以模拟只有一行的游戏。因为现在要多行,所以要把单行数组补充为多行数组。于是(因为创建多行数组有一系列方法),我进入IPython环境进行测试各种可能的方法:

In [1]: test_list = [[0] * 10] * 5

In [2]: test_list
Out[2]: 
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

In [3]: test_list[0][0] = 1

In [4]: test_list
Out[4]: 
[[1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]]                     # 不太对!

In [5]: test_list = [[0] * 10 for i in range(5)]

In [6]: test_list
Out[6]: 
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

In [7]: test_list[0][0] = 1

In [8]: test_list
Out[8]: 
[[1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]                     # 正常了

这里说一说In [5]处我的代码意思:Python有一种叫做列表生成式的语法,它由一个表达式(如[0] * 10)和一个类似for循环开头的语句(for i in range(5))组成,还有包裹整个列表生成式的方括号。一个形如[exp for i in seq]的列表生成式等价于:

result = []
for i in seq:
    result.append(exp)

运行后的result列表。注意表达式可以包含i(也可以不包含),就像在真正的for循环里面一样。回到正题,将game_obj.py中的board修改为:

board = [[0] * 10 for i in range(5)]

然后,将所有类的__init__方法的pos参数都修改为xy两个参数,并把所有board[self.pos]都改为board[self.y][self.x]。此外,game.py中的Game类也需要修改,具体方法可参见我的GitHub上的v1.0 release代码。然后,就···该让新僵尸出场了!

新的僵尸

说实话,你刚才是不是以为我会说“然后就没有然后了”?不管怎么样,开始吧!我想设计一种一来到植物身边就可以把它“踢飞”的僵尸,以增加游戏的刺激性。其实,它的难点在于设计,不是代码:

class KickerZombie(BaseZombie):
    indicating_char = color(31, 'k')          # 红色
    
    def __init__(self, x, y, die_to_exit=False):
        super().__init__(x, y, 1, 30, die_to_exit)          # 超大伤害

然后就是配置,如果你有兴趣,可以效仿之前我的配置,这里我就不再多说了。

下集预告

下次,我们要做一些重构工作了!欢迎继续关注!

    原文作者:leosz
    原文地址: https://segmentfault.com/a/1190000016039817
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞