好了,今天終於到了大家期待已久的多行+新殭屍。其實我原本想把它們放在兩個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