摘要:我回來(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)入正題!
兩種植物:Sunflower和Peashooter向日葵是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
摘要:嗯,今天我們的從開(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)始...
摘要:講點(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ǔ)句。要...
摘要:今天我時(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è)命令行...
摘要:今天就開(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...
摘要:前幾天出去旅游了,所以沒(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)了!但第一件事還是上篇...
閱讀 1845·2021-09-22 15:25
閱讀 1360·2019-08-29 12:34
閱讀 1989·2019-08-26 13:57
閱讀 3264·2019-08-26 10:48
閱讀 1496·2019-08-26 10:45
閱讀 859·2019-08-23 18:23
閱讀 793·2019-08-23 18:01
閱讀 2006·2019-08-23 16:07