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

最近在用python寫一個命令行遊戲:升(jian)級(hua)版植物大戰殭屍,順便鞏固一下python編程技巧。在這個過程當中,也收穫(cai)了很多樂趣(keng)。目前1.0版已經在GitHub上發佈,這是連接。今天就把全過程與你們分享~~~python

既然是植物大戰殭屍,確定要有遊戲盤。我想在一開始儘可能簡化遊戲,因此用了一個一維數組:git

# game.py
board = [0] * 10

我想先無論陽光的問題,用一個類實現基礎的植物大戰殭屍角色的功能。github

基礎類

先上代碼,基本功能都有了:面試

# game.py
board = [0] * 10

class GameObject:
    indicating_char = 'o'              # 在命令行顯示的字符
    
    def __init__(self, pos):
        """ 初始化,並把本身放上游戲盤 """
        if pos in range(10):
            self.pos = pos
            if board[self.pos] == 0:
                board[self.pos] = self
            else:
                print("Position already used.")
    
    def __str__(self):
        """ 字符串表示 """ 
        return self.indicating_char
    
    def __repr__(self):
        """ Python shell/print顯示 """
        return self.__str__()

嗯,去IPython裏面試試看!shell

In [1]: import game as g

In [2]: g.board
Out[2]: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

In [3]: g.GameObject(0)
Out[3]: o

In [4]: g.board
Out[4]: [o, 0, 0, 0, 0, 0, 0, 0, 0, 0]

不錯!可是,也該爲後續程序想一想呀。好比,要讓向日葵每步生產必定的陽光,或讓最後一個殭屍死去時結束遊戲,這些方法都應該在基礎類中定義。因而,我在GameObject類中追加了這些代碼:編程

def step(self):
    """ 每步執行的操做 """
    pass

def die(self):
    """ 死掉時的操做 """
    pass

好吧,兩個空方法,但很快,GameObject的子類們就會重寫它們,使它們變得有意義的!數組

對了,說到子類,咱們就先從植物開始吧!ui

植物基礎類

先想一想一株《植物大戰殭屍》裏的植物該有什麼屬性和行爲吧。除了基礎類裏定義好的以外······陽光!種植植物須要陽光,這不就是屬性嗎?還有,當初始化一株植物時,扣除必定的陽光,不就是行爲嗎?來,先把這些實現了!命令行

先在遊戲盤定義的後面加上一行:debug

sunlight = 50

而後就是植物基礎類Plant

class Plant(GameObject):
    indicating_char = 'p'
    
    def __init__(self, pos, sun_required):
        super().__init__(pos)
        global sunlight
        if sunlight >= sun_required:
            sunlight -= sun_required
        else:
            print("Sunlight not enough.")

好,這就成了。按照慣例,到IPython裏試一試(注意!第一個坑):

In [1]: from game import *        # 坑!

In [2]: Plant(0, 50)
Out[2]: p

In [3]: sunlight
Out[3]: 50

TMD怎麼可能!!!難道sunlight不該該是0嗎?!本身debug半天無果後我決定上思否提問。感謝思否!我上午提的問,下午就有了答案。因而,我趕快又去試了試:

In [1]: import game as g        # 命名空間問題!!!

In [2]: g.Plant(0, 50)
Out[2]: p

In [3]: g.sunlight
Out[3]: 0

成功!

下集預告

下次,我將秀出真正「看得見」、也一直沿用至今的兩個類:SunflowerPeashooter。還有,咱們的敵人:殭屍的基礎類也該出場了!歡迎來看哦!

相關文章
相關標籤/搜索