摘要:今天我時(shí)間有點(diǎn)緊張,所以不說廢話了,直接進(jìn)入正題。好現(xiàn)在,游戲可以自動(dòng)產(chǎn)生僵尸了。然后呢用戶可控的植物真正的植物大戰(zhàn)僵尸游戲可以讓玩家用鼠標(biāo)控制游戲。由于這是命令行游戲,所以我們得用命令控制。
今天我時(shí)間有點(diǎn)緊張,所以不說廢話了,直接進(jìn)入正題。前作鏈接:
從0開始用python寫一個(gè)命令行小游戲(一)
從0開始用python寫一個(gè)命令行小游戲(二)
從0開始用python寫一個(gè)命令行小游戲(三)
從0開始用python寫一個(gè)命令行小游戲(四)
用戶界面:第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=" ")
這個(gè)類離全自動(dòng)還差這些元素:
自動(dòng)出現(xiàn)的僵尸;
用戶可控的植物;
自動(dòng)重復(fù)執(zhí)行step()的方法。
下面就先解決前兩個(gè)!
自動(dòng)出現(xiàn)的僵尸之前,我們已經(jīng)有了配置文件。我們現(xiàn)在要做的就是每步都看看這一步有沒有在配置文件中出現(xiàn)。
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)
好!現(xiàn)在,游戲可以自動(dòng)產(chǎn)生僵尸了。然后呢?
用戶可控的植物真正的植物大戰(zhàn)僵尸游戲可以讓玩家用鼠標(biāo)控制游戲。由于這是命令行游戲,所以我們得用命令控制。我突然發(fā)現(xiàn),居然還得編寫處理命令的方法!
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.")
好,用用它吧(當(dāng)然,是在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)
后來我又知道,可以把不依賴實(shí)例的方法聲明為@staticmethod,并把self參數(shù)去掉,于是把process_command改為:
@staticmethod def process_command(commands): pass # 同前
好了!至此,我們的三個(gè)需求只剩一個(gè)了,而這一個(gè)將會在第三步的后半步解決!歡迎繼續(xù)關(guān)注!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/42171.html
摘要:嗯,今天我們的從開始用寫一個(gè)命令行小游戲系列總算走到了我發(fā)布的時(shí)候。玩過我的正式版的話,你會發(fā)現(xiàn)現(xiàn)在的游戲還和正式版差別很大。好,現(xiàn)在就來順便補(bǔ)充一下,上次方法后追加僵尸被打敗是完成了好好慶祝一下 嗯,今天我們的從0開始用python寫一個(gè)命令行小游戲系列總算走到了我發(fā)布v1.0 beta 1的時(shí)候。玩過我的1.0正式版的話,你會發(fā)現(xiàn)現(xiàn)在的游戲還和正式版差別很大。不管怎么樣,現(xiàn)在就開始...
摘要:講點(diǎn)搞笑的,最近在開發(fā)時(shí),發(fā)現(xiàn)最令程序猿頭疼的一點(diǎn)就是沒有語句。但自動(dòng)的僵尸呢哎,別急,那是后話下集預(yù)告下次,我要把游戲變得全自動(dòng)具體工作令僵尸自動(dòng)出現(xiàn),和讓用戶用命令控制游戲這些工作完成后,就可以發(fā)布了歡迎繼續(xù)關(guān)注 嗯,還是我,我又回來了——以后文章就兩天一篇吧。講點(diǎn)搞笑的,最近在開發(fā)v1.1 beta 3時(shí),發(fā)現(xiàn)Python最令程序猿頭疼的一點(diǎn)就是沒有switch/case語句。要...
摘要:前幾天出去旅游了,所以沒能更新文章,但轉(zhuǎn)眼間,從開始用寫一個(gè)命令行小游戲系列已經(jīng)更新到了第十篇。閑話少說,今天我們要開始重構(gòu)了但第一件事還是上篇的鏈接從開始用寫一個(gè)命令行小游戲九。所以,我們需要一個(gè)標(biāo)志變量,以標(biāo)志游戲的結(jié)束。 前幾天出去旅游了,所以沒能更新文章,但轉(zhuǎn)眼間,從0開始用python寫一個(gè)命令行小游戲系列已經(jīng)更新到了第十篇。閑話少說,今天我們要開始重構(gòu)了!但第一件事還是上篇...
摘要:今天就開始由于整個(gè)游戲會有自己的一些屬性和行為,所以我決定把它編寫在類里。初始化游戲定義自己的屬性先定義這些。我計(jì)劃使用格式,以第幾步出現(xiàn)作為鍵,以出現(xiàn)的僵尸類型以后可能會出現(xiàn)不同類型的僵尸和是否在它被消滅后結(jié)束游戲作為值。 Hey, everyone! 文章遲到了一天,但我今天心情很好,因?yàn)橛袃蓚€(gè)好消息,你們想先聽哪個(gè)?哎,算了,反正都是好消息,一起聽吧。 本游戲的v1.1 bet...
摘要:這項(xiàng)亂入的修改就是修改目錄結(jié)構(gòu),為多關(guān)卡作準(zhǔn)備上篇鏈接從開始用寫一個(gè)命令行小游戲七多關(guān)卡目錄結(jié)構(gòu)我計(jì)劃把目錄結(jié)構(gòu)改成這樣關(guān)卡文件,是關(guān)卡用完后的默認(rèn)配置其中是目前的關(guān)卡數(shù),為表示關(guān)卡已經(jīng)用完,使用默認(rèn)關(guān)卡。 今天,我突然想起了另一項(xiàng)修改,所以原計(jì)劃的多行+新僵尸就改到第九篇再介紹。這項(xiàng)亂入的修改就是:修改目錄結(jié)構(gòu),為多關(guān)卡作準(zhǔn)備!上篇鏈接:從0開始用python寫一個(gè)命令行小游戲(七)...
閱讀 910·2019-08-30 15:54
閱讀 3390·2019-08-29 15:33
閱讀 2764·2019-08-29 13:48
閱讀 1371·2019-08-26 18:26
閱讀 3384·2019-08-26 13:55
閱讀 1568·2019-08-26 10:45
閱讀 1236·2019-08-26 10:19
閱讀 359·2019-08-26 10:16