摘要:今天我時(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寫(xiě)一個(gè)命令行小游戲(一)
從0開(kāi)始用python寫(xiě)一個(gè)命令行小游戲(二)
從0開(kāi)始用python寫(xiě)一個(gè)命令行小游戲(三)
從0開(kāi)始用python寫(xiě)一個(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)在要做的就是每步都看看這一步有沒(méi)有在配置文件中出現(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),居然還得編寫(xiě)處理命令的方法!
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)
后來(lái)我又知道,可以把不依賴實(shí)例的方法聲明為@staticmethod,并把self參數(shù)去掉,于是把process_command改為:
@staticmethod def process_command(commands): pass # 同前
好了!至此,我們的三個(gè)需求只剩一個(gè)了,而這一個(gè)將會(huì)在第三步的后半步解決!歡迎繼續(xù)關(guān)注!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/42171.html
摘要:嗯,今天我們的從開(kāi)始用寫(xiě)一個(gè)命令行小游戲系列總算走到了我發(fā)布的時(shí)候。玩過(guò)我的正式版的話,你會(huì)發(fā)現(xiàn)現(xiàn)在的游戲還和正式版差別很大。好,現(xiàn)在就來(lái)順便補(bǔ)充一下,上次方法后追加僵尸被打敗是完成了好好慶祝一下 嗯,今天我們的從0開(kāi)始用python寫(xiě)一個(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ǔ)句。要...
摘要:前幾天出去旅游了,所以沒(méi)能更新文章,但轉(zhuǎn)眼間,從開(kāi)始用寫(xiě)一個(gè)命令行小游戲系列已經(jīng)更新到了第十篇。閑話少說(shuō),今天我們要開(kāi)始重構(gòu)了但第一件事還是上篇的鏈接從開(kāi)始用寫(xiě)一個(gè)命令行小游戲九。所以,我們需要一個(gè)標(biāo)志變量,以標(biāo)志游戲的結(jié)束。 前幾天出去旅游了,所以沒(méi)能更新文章,但轉(zhuǎn)眼間,從0開(kāi)始用python寫(xiě)一個(gè)命令行小游戲系列已經(jīng)更新到了第十篇。閑話少說(shuō),今天我們要開(kāi)始重構(gòu)了!但第一件事還是上篇...
摘要:今天就開(kāi)始由于整個(gè)游戲會(huì)有自己的一些屬性和行為,所以我決定把它編寫(xiě)在類里。初始化游戲定義自己的屬性先定義這些。我計(jì)劃使用格式,以第幾步出現(xiàn)作為鍵,以出現(xiàn)的僵尸類型以后可能會(huì)出現(xiàn)不同類型的僵尸和是否在它被消滅后結(jié)束游戲作為值。 Hey, everyone! 文章遲到了一天,但我今天心情很好,因?yàn)橛袃蓚€(gè)好消息,你們想先聽(tīng)哪個(gè)?哎,算了,反正都是好消息,一起聽(tīng)吧。 本游戲的v1.1 bet...
摘要:這項(xiàng)亂入的修改就是修改目錄結(jié)構(gòu),為多關(guān)卡作準(zhǔn)備上篇鏈接從開(kāi)始用寫(xiě)一個(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開(kāi)始用python寫(xiě)一個(gè)命令行小游戲(七)...
閱讀 845·2019-08-30 15:54
閱讀 3316·2019-08-29 15:33
閱讀 2701·2019-08-29 13:48
閱讀 1213·2019-08-26 18:26
閱讀 3333·2019-08-26 13:55
閱讀 1476·2019-08-26 10:45
閱讀 1164·2019-08-26 10:19
閱讀 305·2019-08-26 10:16