| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1210 人关注过本帖
标题:类内部属性的调用
只看楼主 加入收藏
LanXX
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2019-8-5
结帖率:16.67%
收藏
 问题点数:0 回复次数:0 
类内部属性的调用
rom sys import exit
from random import randint

你好,大神们,想问下这段代码最后Map类里面def next_scene(self, scene_name):
        return (Map.scenes).get(scene_name),这段调用类Map里面的scenes属性,为什么是Map.scenes而不是self.scenes,两者我都试过,都可以运行,用Map.scenes有什么特别原因吗?求大神们告诉我,十分感谢!

# Scene是一个总类
class Scene(object):
    def enter(self):
        print("此Scence尚未配置,实例化它并实现enter()。")
        exit(1)
 
 
# Engine是一个总类
class Engine(object):
    def __init__(self, scene_map):
        (self.scene_map) = scene_map
 
    def play(self):
        current_scene = (self.scene_map).opening_scene()
        while True:
            print("\n-----------")
            next_scene_name = (current_scene).enter()
            current_scene = (self.scene_map).next_scene(next_scene_name)
 
 
# Death is-a Scene,Death和Scene两个类存在从属关系,以下同理。
class Death(Scene):
    quips = [
        "你挂了。你这方面有点烂。",
        "如果你妈妈更聪明点……她会为你骄傲的。",
        "这样的一个失败者……",
        "我有一只小狗,它更擅长这个。"
    ]
 
    def enter(self):
        print(Death.quips[randint(0, len(self.quips) - 1)])
        exit(1)
 
 
class CentralCorridor(Scene):
    def enter(self):
        print("来自Percal25号行星的哥顿人已经入侵并消灭了你的飞船上全体船员,")
        print("你是最后一个幸存的成员。")
        print("你的最后一个任务是从激光武器库中取出中子毁灭弹,")
        print("将它放在主控舱,然后进入逃生舱后将飞船炸了。")
        print("\n")
        print("你正沿着中央走廊往武库跑的时候,")
        print("一只长着红色鳞片皮肤的哥顿人跳了出来。黑暗肮脏的牙齿,邪恶的小丑服装在他庞大的身体似乎要撑爆开来,")
        print("它挡着激光武器库的门正要拔出武器来攻击你。")
        print("这时候,你有三种选择:")
        print("A.射击!    B.闪避!    C.讲个笑话!    ")
 
        action = input("你的选择是:")
 
        if action == "A" or action == "a":
            print("你快速拔枪,拔出你的爆能枪,朝那个哥顿人开火,")
            print("它的小丑戏服忽然牵动它的身体飘动,偏离了你的目标,")
            print("你的激光击中了它的服装,但完全没有击中它,")
            print("这完全毁了它妈妈给它买的新衣服,这让它勃然大怒,")
            print("它以闪电之势瞬移到你的身边,不停地打你的脸,直到你死了。")
            print("然后你死了。")
 
            return 'death'
 
        elif action == 'B' or action == 'b':
            print("你就像一个世界级的拳击手一般,当哥顿人的激光发射器从你的头顶掠过时,")
            print("你会躲闪、滑铲和跳跃,在你巧妙的躲闪过程中,")
            print("你的脚滑倒了,你的头撞在了金属墙上,晕了过去。")
            print("你醒来后不久后,你绝望地发现哥顿人正准备踩你的头,把你吃掉。")
            print("你死了。")
 
            return 'death'
 
        elif action == 'C' or action == 'c':
            print("幸运的是,你在学院里正好学习了哥顿人的语言。")
            print("你讲了一个你所知道的哥顿人的笑话。")
            print("Lbhe zbgure vf fb sng,jura fur fvgf nebhaq gur ubhfr,fur fvgf nrbhaq gur ubhfr。")
            print("哥顿人听完之后僵硬地停了下来,试图不笑。随后就爆发出大笑,笑得动弹不得。")
            print("当它笑的时候,你跑过去给它的脑袋开了一枪,然后进去了激光哭泣库的门。")
 
            return 'laser_weapon_armory'
 
        else:
            print("请你遵循游戏规则,正确输入选择。")
 
            return 'central_corridor'
 
 
class LaserWeaponArmory(Scene):
    def enter(self):
        print("你以动作翻滚的方式进入武器库,蹲下,扫视房间,")
        print("死一般的寂静,太安静了,可能有更多的哥顿人隐藏起来。")
        print("你站起来,跑到房间的另一边,发现中子弹在一个盒子里,")
        print("盒子上有个键盘锁,你需要密码把炸弹取出来。")
        print("如果你错了10次,锁就会永远关闭,你就得不到炸弹了。密码是3位数字。")
        code = "%d%d%d" % (randint(1, 9), randint(1, 9), randint(1, 9))
        guess = input("[keypad]> ")
        guesses = 1
 
        while guess != code and guesses < 10:
            print("嗡嗡嗡!")
            guesses += 1
            print("秘籍:", code)  # 秘籍
            guess = input("[keypad]> ")
 
        if guess == code:
            print("容器咔哒一声打开,密封就破裂了,气体就出来了。")
            print("你抓起中子弹,以最快的速度跑到主控舱,你必须把它放在正确的位置上。")
            return 'the_bridge'
        else:
            print("锁最后一次发出嗡嗡声,然后你听到一种令你心悸的熔化声,因为机械装置被熔在一起了。")
            print("你此时惊在慌无措,四目张望。")
            print("最后哥特人离开了这艘飞船,并把船给炸了。")
            print("你的任务失败了。")
            return 'death'
 
 
class TheBridge(Scene):
    def enter(self):
        print("你胳膊下夹着中子毁灭炸弹冲进主控室,让试图控制这艘船的5个哥顿人大吃一惊。")
        print("他们每个人都有比上一个哥顿人更丑的小丑服装。")
        print("他们还没把武器拿出来,因为他们看到你腋下的炸弹,不想引爆。")
        print("现在这个局面,你有两个选择:")
        print("A.扔炸弹    B.慢慢地放置炸弹")
 
        action = input("> ")
        if action == "A" or action == "a":
            print("在恐慌中,你向哥顿人扔了炸弹,然后朝门跳去。")
            print("就在你掉下去的时候,一个哥顿人从背后朝你开枪打死了你。")
            print("当你死的时候,你看到另一个哥顿人疯狂地试图解除炸弹。")
            print("当你死的时候,你可能知道它们会爆炸。")
            print("你死了。")
            return 'death'
 
        elif action == "B" or action == "b":
            print("你把你的爆能枪对准你腋下的炸弹。")
            print("哥特人举起手来,开始微微出汗。")
            print("你一寸一寸地退到门口,打开它,然后小心地把炸弹放在地板上,用你的爆震器对准它。")
            print("然后你从门里跳回去,按下关闭按钮,然后把锁炸开,这样哥特一家就出不去了")
            print("既然炸弹已经放好了,你就跑到逃生舱,从这个易拉罐上下来。")
            return 'escape_pod'
 
        else:
            print("请你遵循游戏规则,正确输入选择。")
            return 'the_bridge'
 
 
class EscapePod(Scene):
    def enter(self):
        print("你拼命地冲过飞船,想在整个飞船爆炸前赶到逃生舱。")
        print("看来船上几乎没有哥顿人,所以你的计划没有任何干扰。")
        print("你进入逃生舱房间,现在需要选择一个逃生舱。")
        print("其中四个可能会被损坏,但是你没有时间去看。")
        print("有五个逃生舱,你选择哪一个?")
 
        good_pod = randint(1, 5)
        print("秘籍:", good_pod)  # 秘籍
        guess = input("[pod]> ")
        if int(guess) != good_pod:
            print("你跳进了%s号逃生舱并按下了弹出按钮。" % guess)
            print("逃生舱逃到太空中,然后随着船体的破裂而爆裂,把你的身体压碎成火腿三明治")
            print("很可惜,就差那么一点了,你死了。")
            return 'death'
        else:
            print("")
            print("逃生舱很轻易地滑进太空,飞向下面的行星。")
            print("当它飞向这颗行星时,你回头看,看到那艘飞船爆炸了,")
            print("像一颗明亮的恒星一样,同时摧毁了哥特人的飞船。")
            print("恭喜你,你成功地逃生出来了。")
            return 'finished'
 
 
# Map是一个总类
class Map(object):
    scenes = {
        'central_corridor': CentralCorridor(),
        'laser_weapon_armory': LaserWeaponArmory(),
        'the_bridge': TheBridge(),
        'escape_pod': EscapePod(),
        'death': Death()
    }
 
    def __init__(self, start_scene):
        (self.start_scene) = start_scene
 
    def opening_scene(self):
        return self.next_scene(self.start_scene)
 
    def next_scene(self, scene_name):
        return (Map.scenes).get(scene_name)
 
 
a_map = Map('central_corridor')
a_game = Engine(a_map)
a_game.play()
搜索更多相关主题的帖子: print return action Map def 
2020-02-06 12:11
快速回复:类内部属性的调用
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019958 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved