來(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 "哥頓人喜歡聽(tīng)笑話"
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 "你最后一次聽(tīng)到了滴滴聲"
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í)候看見(jiàn)一個(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é)模型丧荐。