亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

從0開(kāi)始用python寫一個(gè)命令行小游戲(二)

chanjarster / 3392人閱讀

摘要:我回來(lái)了今天,我們真正會(huì)亮相的植物要出來(lái)了哦還有,我們敵人的基礎(chǔ)類我叫它也會(huì)閃亮登場(chǎng)。還有,這是第二篇。閑話少說(shuō),進(jìn)入正題兩種植物和向日葵是,豌豆射手是。注增強(qiáng)版,你怎么看種植向日葵損失,它又產(chǎn)生成功現(xiàn)在,該編豌豆射手了。

我回來(lái)了!今天,我們真正會(huì)亮相的植物要出來(lái)了哦!還有,我們敵人的基礎(chǔ)類(我叫它BaseZombie)也會(huì)閃亮登(lai)場(chǎng)(xi)。很期待?那就開(kāi)始吧!

注:我使用的是Python 3.7(但只要是3,變化應(yīng)該都不大)。還有,這是第二篇。沒(méi)看過(guò)上篇的話,這是鏈接。閑話少說(shuō),進(jìn)入正題!

兩種植物:SunflowerPeashooter

向日葵是Sunflower,豌豆射手是Peashooter。好,上代碼!

向日葵
board = [0] * 10
sunlight = 50

class GameObject:
    indicating_char = ""       # 子類已經(jīng)出現(xiàn),所以把基礎(chǔ)類的顯示字符刪除
    pass                       # 剩余部分同前

class Plant(GameObject):
    pass                       # 同前,但將顯示字符刪除

class Sunflower(Plant):
    """ 向日葵 """
    indicating_char = "s"
    
    def __init__(self, pos):
        """ 初始化,陽(yáng)光50 """
        super().__init__(pos, 50)
    
    def step(self):
        """ 生產(chǎn)陽(yáng)光 """
        global sunlight
        sunlight += 25

嗯,向日葵編好了。IPython(注:增強(qiáng)版Python shell),你怎么看?

In [1]: import game as g

In [2]: g.sunlight
Out[2]: 50

In [3]: g.Sunflower(0)
Out[3]: s

In [4]: g.board[0].step()

In [5]: g.sunlight
Out[5]: 25                    # 種植向日葵損失50,它又產(chǎn)生25

成功!現(xiàn)在,該編豌豆射手了。

豌豆射手
class Peashooter(Plant):
    indicating_char = "p"
    
    def __init__(self, pos):
        super().__init__(pos, 100)           # 豌豆射手需要100陽(yáng)光
    
    def step(self):
        for obj in board[self.pos:]:
            if isinstance(obj, BaseZombie):  # 就當(dāng)BaseZombie存在
                pass                         # 哎呀!

好好編程,“哎呀”什么?因?yàn)槲彝蝗话l(fā)現(xiàn),目前還沒(méi)有定義角色的生命值(你們盡情吐槽吧)!于是,在GameObject__init__方法前面追加:

class GameObject:
    blood = 10             # 初始生命值
    pass                   # 剩余同前

然后又突然想到,角色死沒(méi)死不也是用這個(gè)定義的嗎?于是加了幾個(gè)方法和屬性:

class GameObject:
    indicating_char = ""
    blood = 10
    alive = True
    
    def __init__(self, pos):
        pass                   # 同前
    
    def step(self):
        pass
    
    def die(self):
        pass
    
    def check(self):
        if self.blood < 1:
            self.alive = False
    
    def full_step(self):
        self.check()
        if not self.alive:
            board[self.pos] = 0
            self.die()
        else:
            self.step()

好,現(xiàn)在把豌豆射手里的那個(gè)pass改成:

for obj in board[self.pos:]:
    if isinstance(obj, BaseZombie):
        obj.blood -= 1.5            # 這里原來(lái)是pass

但是因?yàn)闆](méi)有BaseZombie,我們也不能使用Peashooter。好,現(xiàn)在,3,2,1,放僵尸!

僵尸基礎(chǔ)類

我們即將親手創(chuàng)造游戲中的大壞蛋:僵尸!來(lái)吧,面對(duì)這個(gè)基礎(chǔ)類······

class BaseZombie(GameObject):
    indicating_char = "b"
    
    def __init__(self, pos, speed, harm, die_to_exit=False):
        super().__init__(pos)
        self.speed = speed
        self.harm = harm
        self.die_to_exit = die_to_exit
    
    def step(self):
        if board[self.pos - self.speed] == 0:
            orig_pos = self.pos
            self.pos -= self.speed
            board[orig_pos] = 0
            board[self.pos] = self
        elif isinstance(board[self.pos - 1], Plant):
            board[self.pos - 1].blood -= 1
        else:
            self.pos -= 1
            board[self.pos + 1] = 0
            board[self.pos] = self
    
    def die(self):
        if self.die_to_exit:
            import sys
            sys.exit()

好,讓我們的新類們?nèi)Python里大展身手吧!

In [1]: import game as g

In [2]: def step():
   ...:     for obj in g.board:
   ...:         if isinstance(obj, g.GameObject):
   ...:             obj.step()
   ...: 

In [3]: g.Sunflower(0)

In [4]: step()

In [5]: step()

In [6]: step()

In [7]: step()

In [8]: g.sunlight
Out[8]: 100

In [9]: g.Peashooter(1)

In [10]: g.BaseZombie(9, 1, 1)

In [11]: step()

In [12]: step()

......
In [18]: step()

In [19]: g.board
Out[19]: [s, p, 0, 0, 0, 0, 0, 0, 0, 0]

看來(lái),豌豆射手打敗僵尸了!

下集預(yù)告

下次,趕快把BaseZombie的子類編出來(lái)后,我們就要開(kāi)始開(kāi)發(fā)用戶界面了!歡迎來(lái)看!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/42129.html

相關(guān)文章

  • 0開(kāi)始python一個(gè)命令游戲(六)

    摘要:嗯,今天我們的從開(kāi)始用寫一個(gè)命令行小游戲系列總算走到了我發(fā)布的時(shí)候。玩過(guò)我的正式版的話,你會(huì)發(fā)現(xiàn)現(xiàn)在的游戲還和正式版差別很大。好,現(xiàn)在就來(lái)順便補(bǔ)充一下,上次方法后追加僵尸被打敗是完成了好好慶祝一下 嗯,今天我們的從0開(kāi)始用python寫一個(gè)命令行小游戲系列總算走到了我發(fā)布v1.0 beta 1的時(shí)候。玩過(guò)我的1.0正式版的話,你會(huì)發(fā)現(xiàn)現(xiàn)在的游戲還和正式版差別很大。不管怎么樣,現(xiàn)在就開(kāi)始...

    channg 評(píng)論0 收藏0
  • 0開(kāi)始python一個(gè)命令游戲(四)

    摘要:講點(diǎn)搞笑的,最近在開(kāi)發(fā)時(shí),發(fā)現(xiàn)最令程序猿頭疼的一點(diǎn)就是沒(méi)有語(yǔ)句。但自動(dòng)的僵尸呢哎,別急,那是后話下集預(yù)告下次,我要把游戲變得全自動(dòng)具體工作令僵尸自動(dòng)出現(xiàn),和讓用戶用命令控制游戲這些工作完成后,就可以發(fā)布了歡迎繼續(xù)關(guān)注 嗯,還是我,我又回來(lái)了——以后文章就兩天一篇吧。講點(diǎn)搞笑的,最近在開(kāi)發(fā)v1.1 beta 3時(shí),發(fā)現(xiàn)Python最令程序猿頭疼的一點(diǎn)就是沒(méi)有switch/case語(yǔ)句。要...

    graf 評(píng)論0 收藏0
  • 0開(kāi)始python一個(gè)命令游戲(五)

    摘要:今天我時(shí)間有點(diǎn)緊張,所以不說(shuō)廢話了,直接進(jìn)入正題。好現(xiàn)在,游戲可以自動(dòng)產(chǎn)生僵尸了。然后呢用戶可控的植物真正的植物大戰(zhàn)僵尸游戲可以讓玩家用鼠標(biāo)控制游戲。由于這是命令行游戲,所以我們得用命令控制。 今天我時(shí)間有點(diǎn)緊張,所以不說(shuō)廢話了,直接進(jìn)入正題。前作鏈接: 從0開(kāi)始用python寫一個(gè)命令行小游戲(一) 從0開(kāi)始用python寫一個(gè)命令行小游戲(二) 從0開(kāi)始用python寫一個(gè)命令行...

    skinner 評(píng)論0 收藏0
  • 0開(kāi)始python一個(gè)命令游戲(三)

    摘要:今天就開(kāi)始由于整個(gè)游戲會(huì)有自己的一些屬性和行為,所以我決定把它編寫在類里。初始化游戲定義自己的屬性先定義這些。我計(jì)劃使用格式,以第幾步出現(xiàn)作為鍵,以出現(xiàn)的僵尸類型以后可能會(huì)出現(xiàn)不同類型的僵尸和是否在它被消滅后結(jié)束游戲作為值。 Hey, everyone! 文章遲到了一天,但我今天心情很好,因?yàn)橛袃蓚€(gè)好消息,你們想先聽(tīng)哪個(gè)?哎,算了,反正都是好消息,一起聽(tīng)吧。 本游戲的v1.1 bet...

    Tony_Zby 評(píng)論0 收藏0
  • 0開(kāi)始python一個(gè)命令游戲(十)

    摘要:前幾天出去旅游了,所以沒(méi)能更新文章,但轉(zhuǎn)眼間,從開(kāi)始用寫一個(gè)命令行小游戲系列已經(jīng)更新到了第十篇。閑話少說(shuō),今天我們要開(kāi)始重構(gòu)了但第一件事還是上篇的鏈接從開(kāi)始用寫一個(gè)命令行小游戲九。所以,我們需要一個(gè)標(biāo)志變量,以標(biāo)志游戲的結(jié)束。 前幾天出去旅游了,所以沒(méi)能更新文章,但轉(zhuǎn)眼間,從0開(kāi)始用python寫一個(gè)命令行小游戲系列已經(jīng)更新到了第十篇。閑話少說(shuō),今天我們要開(kāi)始重構(gòu)了!但第一件事還是上篇...

    OnlyLing 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

chanjarster

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<