摘要:最近在用寫一個命令行游戲升級版植物大戰僵尸,順便鞏固一下編程技巧。目前版已經在上發布,這是鏈接。我想在一開始盡量簡化游戲,所以用了一個一維數組我想先不管陽光的問題,用一個類實現基礎的植物大戰僵尸角色的功能。
最近在用python寫一個命令行游戲:升(jian)級(hua)版植物大戰僵尸,順便鞏固一下python編程技巧。在這個過程中,也收獲(cai)了不少樂趣(keng)。目前1.0版已經在GitHub上發布,這是鏈接。今天就把全過程與大家分享~~~
既然是植物大戰僵尸,肯定要有游戲盤。我想在一開始盡量簡化游戲,所以用了一個一維數組:
# game.py board = [0] * 10
我想先不管陽光的問題,用一個類實現基礎的植物大戰僵尸角色的功能。
基礎類先上代碼,基本功能都有了:
# 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里面試試看!
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的子類們就會重寫它們,使它們變得有意義的!
對了,說到子類,我們就先從植物開始吧!
植物基礎類先想想一株《植物大戰僵尸》里的植物該有什么屬性和行為吧。除了基礎類里定義好的之外······陽光!種植植物需要陽光,這不就是屬性嗎?還有,當初始化一株植物時,扣除一定的陽光,不就是行為嗎?來,先把這些實現了!
先在游戲盤定義的后面加上一行:
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
成功!
下集預告下次,我將秀出真正“看得見”、也一直沿用至今的兩個類:Sunflower和Peashooter。還有,我們的敵人:僵尸的基礎類也該出場了!歡迎來看哦!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42114.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...
摘要:好了,今天終于到了你們期待已久的多行新僵尸。好,開始吧上篇鏈接從開始用寫一個命令行小游戲八。多行游戲一開始我為了盡可能簡化游戲,我用了一個單行數組,以模擬只有一行的游戲。一個形如的列表生成式等價于運行后的列表。 好了,今天終于到了你們期待已久的多行+新僵尸。其實我本來想把它們放在兩個beta里解決的,但后來忘了,于是打包起來,跳過beta 5,直接發布了beta 6,就是今天的結束狀態...
閱讀 3463·2021-11-25 09:43
閱讀 1062·2021-11-15 11:36
閱讀 3313·2021-11-11 16:54
閱讀 3974·2021-09-27 13:35
閱讀 4364·2021-09-10 11:23
閱讀 5675·2021-09-07 10:22
閱讀 3032·2021-09-04 16:40
閱讀 769·2021-08-03 14:03