摘要:我回來了今天,我們真正會亮相的植物要出來了哦還有,我們敵人的基礎類我叫它也會閃亮登場。還有,這是第二篇。閑話少說,進入正題兩種植物和向日葵是,豌豆射手是。注增強版,你怎么看種植向日葵損失,它又產生成功現在,該編豌豆射手了。
我回來了!今天,我們真正會亮相的植物要出來了哦!還有,我們敵人的基礎類(我叫它BaseZombie)也會閃亮登(lai)場(xi)。很期待?那就開始吧!
注:我使用的是Python 3.7(但只要是3,變化應該都不大)。還有,這是第二篇。沒看過上篇的話,這是鏈接。閑話少說,進入正題!
兩種植物:Sunflower和Peashooter向日葵是Sunflower,豌豆射手是Peashooter。好,上代碼!
向日葵board = [0] * 10 sunlight = 50 class GameObject: indicating_char = "" # 子類已經出現,所以把基礎類的顯示字符刪除 pass # 剩余部分同前 class Plant(GameObject): pass # 同前,但將顯示字符刪除 class Sunflower(Plant): """ 向日葵 """ indicating_char = "s" def __init__(self, pos): """ 初始化,陽光50 """ super().__init__(pos, 50) def step(self): """ 生產陽光 """ global sunlight sunlight += 25
嗯,向日葵編好了。IPython(注:增強版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,它又產生25
成功!現在,該編豌豆射手了。
豌豆射手class Peashooter(Plant): indicating_char = "p" def __init__(self, pos): super().__init__(pos, 100) # 豌豆射手需要100陽光 def step(self): for obj in board[self.pos:]: if isinstance(obj, BaseZombie): # 就當BaseZombie存在 pass # 哎呀!
好好編程,“哎呀”什么?因為我突然發現,目前還沒有定義角色的生命值(你們盡情吐槽吧)!于是,在GameObject的__init__方法前面追加:
class GameObject: blood = 10 # 初始生命值 pass # 剩余同前
然后又突然想到,角色死沒死不也是用這個定義的嗎?于是加了幾個方法和屬性:
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()
好,現在把豌豆射手里的那個pass改成:
for obj in board[self.pos:]: if isinstance(obj, BaseZombie): obj.blood -= 1.5 # 這里原來是pass
但是因為沒有BaseZombie,我們也不能使用Peashooter。好,現在,3,2,1,放僵尸!
僵尸基礎類我們即將親手創造游戲中的大壞蛋:僵尸!來吧,面對這個基礎類······
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()
好,讓我們的新類們去IPython里大展身手吧!
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]
看來,豌豆射手打敗僵尸了!
下集預告下次,趕快把BaseZombie的子類編出來后,我們就要開始開發用戶界面了!歡迎來看!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42129.html
摘要:嗯,今天我們的從開始用寫一個命令行小游戲系列總算走到了我發布的時候。玩過我的正式版的話,你會發現現在的游戲還和正式版差別很大。好,現在就來順便補充一下,上次方法后追加僵尸被打敗是完成了好好慶祝一下 嗯,今天我們的從0開始用python寫一個命令行小游戲系列總算走到了我發布v1.0 beta 1的時候。玩過我的1.0正式版的話,你會發現現在的游戲還和正式版差別很大。不管怎么樣,現在就開始...
摘要:講點搞笑的,最近在開發時,發現最令程序猿頭疼的一點就是沒有語句。但自動的僵尸呢哎,別急,那是后話下集預告下次,我要把游戲變得全自動具體工作令僵尸自動出現,和讓用戶用命令控制游戲這些工作完成后,就可以發布了歡迎繼續關注 嗯,還是我,我又回來了——以后文章就兩天一篇吧。講點搞笑的,最近在開發v1.1 beta 3時,發現Python最令程序猿頭疼的一點就是沒有switch/case語句。要...
摘要:今天我時間有點緊張,所以不說廢話了,直接進入正題。好現在,游戲可以自動產生僵尸了。然后呢用戶可控的植物真正的植物大戰僵尸游戲可以讓玩家用鼠標控制游戲。由于這是命令行游戲,所以我們得用命令控制。 今天我時間有點緊張,所以不說廢話了,直接進入正題。前作鏈接: 從0開始用python寫一個命令行小游戲(一) 從0開始用python寫一個命令行小游戲(二) 從0開始用python寫一個命令行...
摘要:今天就開始由于整個游戲會有自己的一些屬性和行為,所以我決定把它編寫在類里。初始化游戲定義自己的屬性先定義這些。我計劃使用格式,以第幾步出現作為鍵,以出現的僵尸類型以后可能會出現不同類型的僵尸和是否在它被消滅后結束游戲作為值。 Hey, everyone! 文章遲到了一天,但我今天心情很好,因為有兩個好消息,你們想先聽哪個?哎,算了,反正都是好消息,一起聽吧。 本游戲的v1.1 bet...
摘要:前幾天出去旅游了,所以沒能更新文章,但轉眼間,從開始用寫一個命令行小游戲系列已經更新到了第十篇。閑話少說,今天我們要開始重構了但第一件事還是上篇的鏈接從開始用寫一個命令行小游戲九。所以,我們需要一個標志變量,以標志游戲的結束。 前幾天出去旅游了,所以沒能更新文章,但轉眼間,從0開始用python寫一個命令行小游戲系列已經更新到了第十篇。閑話少說,今天我們要開始重構了!但第一件事還是上篇...
閱讀 1743·2021-09-22 15:25
閱讀 1307·2019-08-29 12:34
閱讀 1907·2019-08-26 13:57
閱讀 3188·2019-08-26 10:48
閱讀 1443·2019-08-26 10:45
閱讀 792·2019-08-23 18:23
閱讀 733·2019-08-23 18:01
閱讀 1945·2019-08-23 16:07