好了,今天终于到了大家期待已久的多行+新僵尸。其实我原本想把它们放在两个beta里解决的,但后来忘了,因而打包起来,跳过beta 5,直接发布了beta 6,就是今天的结束状态。好,开始吧!上篇连接:从0开始用python写一个命令行小游戏(八)。python
一开始我为了尽量简化游戏,我用了一个单行数组,以模拟只有一行的游戏。由于如今要多行,因此要把单行数组补充为多行数组。因而(由于建立多行数组有一系列方法),我进入IPython
环境进行测试各类可能的方法:segmentfault
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
修改成:app
board = [[0] * 10 for i in range(5)]
而后,将全部类的__init__
方法的pos
参数都修改成x
和y
两个参数,并把全部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) # 超大伤害
而后就是配置,若是你有兴趣,能够效仿以前个人配置,这里我就再也不多说了。设计
下次,咱们要作一些重构工做了!欢迎继续关注!code