從0開始用python寫一個命令列小遊戲(十)

leosz發表於2019-02-16

前幾天出去旅遊了,所以沒能更新文章,但轉眼間,“從0開始用python寫一個命令列小遊戲”系列已經更新到了第十篇。閒話少說,今天我們要開始重構了!但第一件事還是上篇的連結:從0開始用python寫一個命令列小遊戲(九)

重構

控制遊戲結束

之前我們是直接sys.exit()結束程式的,靈活性不高,尤其是需要連續玩遊戲時。所以,我們需要一個標誌變數,以標誌遊戲的結束。所以,在game_obj.py開頭加上:

exited = False

然後把BaseZombie類中的die()方法修改為:

def die(self):
    if self.die_to_exit:
        exited = True

然後把game.py中的Game類的start()方法的while迴圈改為:

while not o.exited:
    pass            # 內部同前

這裡說明一下:為了減少我的打字量,之後會把類似於 game.py中的Game類的start()方法” 改寫為Python path的形式,即:game.Game.start()方法。

然後我們會發現,之前我們使用的在遊戲最後判斷輸贏並輸出的程式碼不再能正確地判斷輸贏了,它永遠報告你輸了,即使你贏了也是如此。那怎麼辦呢?答案是:再使用一個標誌變數!

判斷輸贏

為解決剛才的問題,可以使用另一個標誌變數:plant_win。顧名思義,它指的是植物是否贏了。在game_obj.py開頭再次新增:

plant_win = False

然後把game_obj.BaseZombie.die()方法改為:

if self.die_to_exit:
    exited = True
    plant_win = True

在這個類的step()方法開頭新增:

if self.x == 0:
    exited = True
    plant_win = False

至於如何根據這個標誌判斷輸贏,呃,你們自己想吧,太明顯了。

下集預告

下次,我們將引入一個配置檔案,使程式碼變得更加優雅。敬請繼續關注!

相關文章