摘要:今天我時間有點緊張,所以不說廢話了,直接進入正題。好現在,游戲可以自動產生僵尸了。然后呢用戶可控的植物真正的植物大戰僵尸游戲可以讓玩家用鼠標控制游戲。由于這是命令行游戲,所以我們得用命令控制。
今天我時間有點緊張,所以不說廢話了,直接進入正題。前作鏈接:
從0開始用python寫一個命令行小游戲(一)
從0開始用python寫一個命令行小游戲(二)
從0開始用python寫一個命令行小游戲(三)
從0開始用python寫一個命令行小游戲(四)
用戶界面:第2.5步(第三步的前半步)上次我們的Game類是這樣的:
import game_obj as o class Game: def __init__(self): o.sunlight = 50 o.board = [0] * 10 self.sunlight = o.sunlight self.board = o.board import json with open("level.json") as fr: self.steps = json.load(fr) def step(self): print("Sunlight: %d." % self.sunlight) print("Current state:") for obj in self.board: if isinstance(obj, o.GameObject): obj.step() print(obj, end=" ")
這個類離全自動還差這些元素:
自動出現的僵尸;
用戶可控的植物;
自動重復執行step()的方法。
下面就先解決前兩個!
自動出現的僵尸之前,我們已經有了配置文件。我們現在要做的就是每步都看看這一步有沒有在配置文件中出現。
import game_obj as o class Game: def __init__(self): o.sunlight = 50 o.board = [0] * 10 self.sunlight = o.sunlight self.board = o.board self.step_num = 0 import json with open("level.json") as fr: self.steps = json.load(fr) def step(self): self.step_num += 1 print("Sunlight: %d." % self.sunlight) print("Current state:") for obj in self.board: if isinstance(obj, o.GameObject): obj.step() print(obj, end=" ") if str(self.step_num) in self.steps.keys(): action = self.steps[str(self.step_num)] if action == "zombie": o.Zombie(9) elif action == "exit zombie": o.Zombie(9, die_to_exit=True)
好!現在,游戲可以自動產生僵尸了。然后呢?
用戶可控的植物真正的植物大戰僵尸游戲可以讓玩家用鼠標控制游戲。由于這是命令行游戲,所以我們得用命令控制。我突然發現,居然還得編寫處理命令的方法!
def process_command(self, commands): for command in commands: command_list = command.split() if command_list[0] == "plant" and len(command_list) == 3: plant_type = command_list[1] try: pos = int(command_list[2]) except ValueError: print("Invalid command.") else: if plant_type == "s": o.Sunflower(pos) elif plant_type == "p": o.Peashooter(pos) else: print("Invalid command.")
好,用用它吧(當然,是在step()里面)!
def step(self): pass # 同前 first_command = input("next step: ") if first_command: commands = [first_command] next_command = "some content" while next_command: next_command = input(" -: ") commands.append(next_command) else: commands = [] self.process_command(commands)
后來我又知道,可以把不依賴實例的方法聲明為@staticmethod,并把self參數去掉,于是把process_command改為:
@staticmethod def process_command(commands): pass # 同前
好了!至此,我們的三個需求只剩一個了,而這一個將會在第三步的后半步解決!歡迎繼續關注!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/42171.html
摘要:嗯,今天我們的從開始用寫一個命令行小游戲系列總算走到了我發布的時候。玩過我的正式版的話,你會發現現在的游戲還和正式版差別很大。好,現在就來順便補充一下,上次方法后追加僵尸被打敗是完成了好好慶祝一下 嗯,今天我們的從0開始用python寫一個命令行小游戲系列總算走到了我發布v1.0 beta 1的時候。玩過我的1.0正式版的話,你會發現現在的游戲還和正式版差別很大。不管怎么樣,現在就開始...
摘要:講點搞笑的,最近在開發時,發現最令程序猿頭疼的一點就是沒有語句。但自動的僵尸呢哎,別急,那是后話下集預告下次,我要把游戲變得全自動具體工作令僵尸自動出現,和讓用戶用命令控制游戲這些工作完成后,就可以發布了歡迎繼續關注 嗯,還是我,我又回來了——以后文章就兩天一篇吧。講點搞笑的,最近在開發v1.1 beta 3時,發現Python最令程序猿頭疼的一點就是沒有switch/case語句。要...
摘要:前幾天出去旅游了,所以沒能更新文章,但轉眼間,從開始用寫一個命令行小游戲系列已經更新到了第十篇。閑話少說,今天我們要開始重構了但第一件事還是上篇的鏈接從開始用寫一個命令行小游戲九。所以,我們需要一個標志變量,以標志游戲的結束。 前幾天出去旅游了,所以沒能更新文章,但轉眼間,從0開始用python寫一個命令行小游戲系列已經更新到了第十篇。閑話少說,今天我們要開始重構了!但第一件事還是上篇...
摘要:今天就開始由于整個游戲會有自己的一些屬性和行為,所以我決定把它編寫在類里。初始化游戲定義自己的屬性先定義這些。我計劃使用格式,以第幾步出現作為鍵,以出現的僵尸類型以后可能會出現不同類型的僵尸和是否在它被消滅后結束游戲作為值。 Hey, everyone! 文章遲到了一天,但我今天心情很好,因為有兩個好消息,你們想先聽哪個?哎,算了,反正都是好消息,一起聽吧。 本游戲的v1.1 bet...
摘要:這項亂入的修改就是修改目錄結構,為多關卡作準備上篇鏈接從開始用寫一個命令行小游戲七多關卡目錄結構我計劃把目錄結構改成這樣關卡文件,是關卡用完后的默認配置其中是目前的關卡數,為表示關卡已經用完,使用默認關卡。 今天,我突然想起了另一項修改,所以原計劃的多行+新僵尸就改到第九篇再介紹。這項亂入的修改就是:修改目錄結構,為多關卡作準備!上篇鏈接:從0開始用python寫一個命令行小游戲(七)...
閱讀 860·2019-08-30 15:54
閱讀 3327·2019-08-29 15:33
閱讀 2710·2019-08-29 13:48
閱讀 1236·2019-08-26 18:26
閱讀 3343·2019-08-26 13:55
閱讀 1499·2019-08-26 10:45
閱讀 1177·2019-08-26 10:19
閱讀 318·2019-08-26 10:16