《笨辦法學(xué)Python》筆記30-----來(lái)自Percal 25號(hào)行星的哥頓人

來(lái)自Percal 25號(hào)行星的哥頓人

本節(jié)搭建了一個(gè)文字游戲,講述了科幻故事。一伙來(lái)自Percal 25號(hào)行星的哥頓人入侵飛船,昏迷中的你醒來(lái)發(fā)現(xiàn)全體船員都已陣亡,你與哥頓人斗智斗勇沖到武器庫(kù)中取出中子彈炸毀飛船并成功逃生。

CODE

#coding:utf-8

from sys import exit
from random import randint

def death():
    quips = ["你死了。你在這有點(diǎn)糟糕","干得漂亮,你死了,愚蠢的人類","失敗者","我有只小狗很擅長(zhǎng)這個(gè)"]
    print quips[randint(0,len(quips)-1)]
    exit(1)


def central_corridor():
    print "來(lái)自Percal25號(hào)行星的哥頓人入侵并破壞了你的飛船"
    print "你的全體船員已經(jīng)陣亡,你是最后的幸存者"
    print "任務(wù)是從武器庫(kù)中拿到中子自毀炸彈"
    print "把它放在艦橋上,在你進(jìn)入一個(gè)。。后炸毀飛船"
    print "逃生倉(cāng)"
    print "\n"
    print "你正奔跑在中央走廊到武器庫(kù)的路上"
    print "這時(shí)一個(gè)哥頓人跳出來(lái),紅皮膚,黑牙齒,邪惡的服裝"
    print "怨恨充斥著他的身體,他正在擋在武器庫(kù)的門外,好像正準(zhǔn)備扔出炸彈炸死你"

    action = raw_input("> ")

    if action == "shoot!":

        print "快速拔出你的槍并朝哥頓人開火"
        print "他靈活的移動(dòng)讓你失去了目標(biāo),你的激光槍擊中了他的服裝,這"
        print "讓他整個(gè)燃燒起來(lái)"    
        print "這讓他非常憤怒,不停的揍你的臉,直到"
        print "你死了,然后他吃了你"
        return "death"
    elif action == "dodge!":
        print "像一個(gè)世界級(jí)拳擊手,你躲閃"
        print "哥頓人的槍射穿了你的頭,然后把你吃了"
        return "death"
    elif action == "tell a joke":
        print "哥頓人喜歡聽笑話"
        print "你給他講了個(gè)非常搞笑的笑話,趁他不注意,你爆了他的頭"
        print "穿過(guò)了武器庫(kù)的門"    
        return "laser_weapon_armory"
    else:
        print "別想了"
        return 'central_corridor'

def laser_weapon_armory():
    print "你打了個(gè)洞進(jìn)入武器庫(kù)"
    print "這里死靜死靜的,好像埋伏著好多哥頓人"
    print "你發(fā)現(xiàn)了中子炸彈,但是它被密碼鎖鎖著"
    print "你需要代碼才能打開"
    print "如果輸錯(cuò)10次,密碼鎖將永遠(yuǎn)鎖著"
    print "提示:代碼是3個(gè)數(shù)字"
    code = "%d%d%d" % (randint(1,9),randint(1,9),randint(1,9))
    guess = raw_input("[keypad]> ")

    guesses = 0

    while guess != code and guesses < 10:
        print "BZZZZEDDD!"
        guesses += 1
        guess = raw_input("[keypad]> ")

    if guess == code:
        print "鎖打開了,飄蕩出白色的氣體"
        print "你帶著中子彈跑得越來(lái)越快"
        print "你必須把中子彈放在艦橋正確的位置"
        return "the_bridge"
    else:
        print "你最后一次聽到了滴滴聲"
        print "鎖永久鎖定了"
        print "你決定靜靜的坐著,最終哥頓人炸掉了飛船,你掛了"
        return "death"

def the_bridge():
    print "你帶著中子彈突然出現(xiàn)在艦橋"
    print "驚動(dòng)了5個(gè)哥頓人"
    print "他們正試圖控制飛船,他們每個(gè)人都穿著一套丑陋的服裝"
    print "他們還沒(méi)有拿出武器,因?yàn)樗麄兛吹侥闶稚险弥粋€(gè)已經(jīng)啟動(dòng)的炸彈,他們不想看著它爆炸"

    action = raw_input("> ")
    if action == "throw the bomb":
        print "恐慌中,你把炸彈扔向了哥頓人"
        print "這時(shí)一個(gè)哥頓人從背后把你射殺,你倒地的時(shí)候看見一個(gè)哥頓人正在解除炸彈"


        return "death"

    elif action == "slowly place the bomb":
        print "你指著手中的炸彈,哥頓人被嚇到了,他們舉起手開始驚慌,"
        print "你慢慢地移動(dòng)到門口,小心的把炸彈放到地上"
        print "你把門鎖住,哥頓人出不來(lái)。炸彈放置好了,你跑向逃生倉(cāng)"
        return "escape_pod"

    else:
        print "DOES NOT COMPUTE"
        return "the_bridge"


def escape_pod():
    print "你沖向逃生倉(cāng),爭(zhēng)取整個(gè)船爆炸前,"
    print "似乎船上沒(méi)有其他哥頓人,你一路很順利"
    print "你來(lái)到逃生倉(cāng),這里有5個(gè)倉(cāng)位,你要選擇一個(gè)"
    print "你選擇哪一個(gè)?"

    good_pod = randint(1, 5)
    guess = raw_input("[pod #]> ")


    if int(guess) != good_pod:
        print "你跳進(jìn) %s 號(hào)逃生倉(cāng),按下了彈出按鈕" % guess
        print "逃生倉(cāng)發(fā)生了爆炸"
        print "你掛了"

        return "death"

    else:

        print "你跳進(jìn) %s 號(hào)逃生倉(cāng),按下了彈出按鈕" % guess
        print "你贏了"

        exit(0)

ROOMS = {
    'death':death,
    'central_corridor':central_corridor,
    'laser_weapon_armory':laser_weapon_armory,
    'the_bridge':the_bridge,
    'escape_pod':escape_pod
}



def runner(map, start):
    next = start
    while True:
        room = map[next]
        print "\n-----------"
        next = room()



runner(ROOMS, 'central_corridor')


這個(gè)游戲其實(shí)是一個(gè)小版本的有限狀態(tài)機(jī)FSM

wiki FSM

有限狀態(tài)機(jī)(英語(yǔ):finite-state machine,縮寫:FSM)又稱有限狀態(tài)自動(dòng)機(jī),簡(jiǎn)稱狀態(tài)機(jī),是表示有限個(gè)狀態(tài)以及在這些狀態(tài)之間的轉(zhuǎn)移和動(dòng)作等行為的數(shù)學(xué)模型。

有限狀態(tài)機(jī)@維基百科

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,363評(píng)論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,497評(píng)論 3 416
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,305評(píng)論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,962評(píng)論 1 311
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,727評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,193評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,257評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,411評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,945評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,777評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,978評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,519評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,216評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,657評(píng)論 3 391
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,960評(píng)論 2 373

推薦閱讀更多精彩內(nèi)容

  • 練習(xí) 30:有限狀態(tài)機(jī) 原文:Exercise 30: Finite State Machines 譯者:飛龍 協(xié)...
    布客飛龍閱讀 1,336評(píng)論 0 2
  • 齊總給手算了萬(wàn)盛大溝,基礎(chǔ)資料我給的不準(zhǔn)確。還是要扎實(shí),避免僥幸心理啊。
    Uncle_Ma閱讀 359評(píng)論 0 0
  • 今天跟幾個(gè)朋友一起聚餐,看到胖子帶著他傳說(shuō)中的女神閃亮登場(chǎng)。 眼前的這一對(duì)才子佳人簡(jiǎn)直亮瞎了我們所有人的眼,怪不得...
    陳以壹閱讀 529評(píng)論 18 16
  • 【幸福女孩 唐墨軒 一年級(jí) 堅(jiān)持原創(chuàng)分享第90天 2017.12.1 星期五】 今天中午我到媽媽教室,先讀...
    何亞珂閱讀 188評(píng)論 0 0
  • 主隊(duì)列是GCD自帶的一種特殊串行隊(duì)列。放到主隊(duì)列的任務(wù)都會(huì)放到放到主線程執(zhí)行。 主隊(duì)列特點(diǎn):如果主隊(duì)列發(fā)現(xiàn)當(dāng)前主線...
    BEYOND黃閱讀 1,975評(píng)論 0 5