《笨办法学Python》笔记30-----来自Percal 25号行星的哥顿人

来自Percal 25号行星的哥顿人

本节搭建了一个文字游戏,讲述了科幻故事。一伙来自Percal 25号行星的哥顿人入侵飞船,昏迷中的你醒来发现全体船员都已阵亡,你与哥顿人斗智斗勇冲到武器库中取出中子弹炸毁飞船并成功逃生。

CODE

#coding:utf-8

from sys import exit
from random import randint

def death():
    quips = ["你死了。你在这有点糟糕","干得漂亮,你死了,愚蠢的人类","失败者","我有只小狗很擅长这个"]
    print quips[randint(0,len(quips)-1)]
    exit(1)


def central_corridor():
    print "来自Percal25号行星的哥顿人入侵并破坏了你的飞船"
    print "你的全体船员已经阵亡,你是最后的幸存者"
    print "任务是从武器库中拿到中子自毁炸弹"
    print "把它放在舰桥上,在你进入一个。。后炸毁飞船"
    print "逃生仓"
    print "\n"
    print "你正奔跑在中央走廊到武器库的路上"
    print "这时一个哥顿人跳出来,红皮肤,黑牙齿,邪恶的服装"
    print "怨恨充斥着他的身体,他正在挡在武器库的门外,好像正准备扔出炸弹炸死你"

    action = raw_input("> ")

    if action == "shoot!":

        print "快速拔出你的枪并朝哥顿人开火"
        print "他灵活的移动让你失去了目标,你的激光枪击中了他的服装,这"
        print "让他整个燃烧起来"    
        print "这让他非常愤怒,不停的揍你的脸,直到"
        print "你死了,然后他吃了你"
        return "death"
    elif action == "dodge!":
        print "像一个世界级拳击手,你躲闪"
        print "哥顿人的枪射穿了你的头,然后把你吃了"
        return "death"
    elif action == "tell a joke":
        print "哥顿人喜欢听笑话"
        print "你给他讲了个非常搞笑的笑话,趁他不注意,你爆了他的头"
        print "穿过了武器库的门"    
        return "laser_weapon_armory"
    else:
        print "别想了"
        return 'central_corridor'

def laser_weapon_armory():
    print "你打了个洞进入武器库"
    print "这里死静死静的,好像埋伏着好多哥顿人"
    print "你发现了中子炸弹,但是它被密码锁锁着"
    print "你需要代码才能打开"
    print "如果输错10次,密码锁将永远锁着"
    print "提示:代码是3个数字"
    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 "你带着中子弹跑得越来越快"
        print "你必须把中子弹放在舰桥正确的位置"
        return "the_bridge"
    else:
        print "你最后一次听到了滴滴声"
        print "锁永久锁定了"
        print "你决定静静的坐着,最终哥顿人炸掉了飞船,你挂了"
        return "death"

def the_bridge():
    print "你带着中子弹突然出现在舰桥"
    print "惊动了5个哥顿人"
    print "他们正试图控制飞船,他们每个人都穿着一套丑陋的服装"
    print "他们还没有拿出武器,因为他们看到你手上正拿着一个已经启动的炸弹,他们不想看着它爆炸"

    action = raw_input("> ")
    if action == "throw the bomb":
        print "恐慌中,你把炸弹扔向了哥顿人"
        print "这时一个哥顿人从背后把你射杀,你倒地的时候看见一个哥顿人正在解除炸弹"


        return "death"

    elif action == "slowly place the bomb":
        print "你指着手中的炸弹,哥顿人被吓到了,他们举起手开始惊慌,"
        print "你慢慢地移动到门口,小心的把炸弹放到地上"
        print "你把门锁住,哥顿人出不来。炸弹放置好了,你跑向逃生仓"
        return "escape_pod"

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


def escape_pod():
    print "你冲向逃生仓,争取整个船爆炸前,"
    print "似乎船上没有其他哥顿人,你一路很顺利"
    print "你来到逃生仓,这里有5个仓位,你要选择一个"
    print "你选择哪一个?"

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


    if int(guess) != good_pod:
        print "你跳进 %s 号逃生仓,按下了弹出按钮" % guess
        print "逃生仓发生了爆炸"
        print "你挂了"

        return "death"

    else:

        print "你跳进 %s 号逃生仓,按下了弹出按钮" % 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')


这个游戏其实是一个小版本的有限状态机FSM

wiki FSM

有限状态机(英语:finite-state machine,缩写:FSM)又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。

有限状态机@维基百科

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容

  • 练习 30:有限状态机 原文:Exercise 30: Finite State Machines 译者:飞龙 协...
    布客飞龙阅读 1,322评论 0 2
  • 齐总给手算了万盛大沟,基础资料我给的不准确。还是要扎实,避免侥幸心理啊。
    Uncle_Ma阅读 293评论 0 0
  • 今天跟几个朋友一起聚餐,看到胖子带着他传说中的女神闪亮登场。 眼前的这一对才子佳人简直亮瞎了我们所有人的眼,怪不得...
    陈以壹阅读 518评论 18 16
  • 【幸福女孩 唐墨轩 一年级 坚持原创分享第90天 2017.12.1 星期五】 今天中午我到妈妈教室,先读...
    何亚珂阅读 184评论 0 0
  • 主队列是GCD自带的一种特殊串行队列。放到主队列的任务都会放到放到主线程执行。 主队列特点:如果主队列发现当前主线...
    BEYOND黄阅读 1,951评论 0 5