Python 让两类游戏互动

Python 让两类游戏互动,python,class,function,Python,Class,Function,所以我知道这个网站有太多关于Zed Shaw的《艰苦学习Python》的问题,但我正在经历ex42,额外的学分#3,让我挂断了电话 我很难让类引擎有效地启动并转换到类映射中,在那里游戏可以开始执行我定义的不同函数 代码如下: from sys import exit from random import randint class Map(object): def death(): print quips[randint (0, len(quips)-1)]

所以我知道这个网站有太多关于Zed Shaw的《艰苦学习Python》的问题,但我正在经历ex42,额外的学分#3,让我挂断了电话

我很难让类引擎有效地启动并转换到类映射中,在那里游戏可以开始执行我定义的不同函数

代码如下:

from sys import exit  
from random import randint

class Map(object):

    def death(): 
        print quips[randint (0, len(quips)-1)]
        exit(1)

    def princess_lives_here():
        print "You see a beautiful Princess with a shiny crown."
        print "She offers you some cake."

        eat_it = raw_input(">")

        if eat_it == "eat it":
            print "You explode like a pinata full of frogs."
            print "The Princess cackles and eats the frogs. Yum!"
            return 'death'

        elif eat_it == "do not eat it":
            print "She throws the cake at you and it cuts off your head."
            print "The last thing you see is her munching on your face. Yum!"
            return 'death'

        elif eat_it == "make her eat it":
            print "The Princess screams as you cram the cake in her mouth."
            print "Then she smiles and cries and thank you for saving her."
            print "She points to a tiny door and says, 'The Koi needs cake too.'"
            print "She gives you the very last bit of cake and shoves you in."
            return 'gold_koi_pond'

        else:
            print "The Princess looks at you confused and just points at the cake."
            return 'princess_lives_here'


class Engine(Map):

    def _init_(self, start):
        self.quips = [
            "You died. You suck at this.",
            "Your mom would be proud, if she were smarter",
            "Such a luser.",
            "I have a small puppy that's better at this."
        ]
        self.start = start

    def play(self):
        next = self.start

        while True:
            print "\n-----"
            room = getattr(self, next)
            next = room()

e = "princess_lives_here".Map.Engine
e.play()

现在的问题不是Map类中的其他函数,而是从类引擎到类Map的转换,这样游戏就可以继续了。它不是在类引擎中定义“Map”,就是在我最后设置的变量中定义“Map”,并尝试使用play()命令运行


任何其他链接,你可以指给我关于课堂互动将是伟大的。再一次

这里有很多错误

所示代码非法缩进;它看起来像是
\uu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

类的
\uuuu init\uuuu
两端需要双下划线,而不是单下划线

该行:

e = "princess_lives_here".Map.Engine
是荒谬的蟒蛇;它首先尝试在字符串中查找“Map”属性。如果您想实例一个类的新对象,您可以说

e = Engine( "princess_lives_here" ) # or Map( "...")?
我不清楚你们需要地图和引擎做什么,但我猜你们要么想让地图成为引擎的一个子类(引擎对所有游戏都是通用的,地图对这个游戏是特定的),要么想让它们成为独立的对象,引擎和地图相互引用

目前,引擎是Map的一个子类。如果它们应该是分开的,那么将引擎声明为一个对象,让它的
\uuuu init\uuuu
同时获取一个起点和一个映射实例,然后执行以下操作

m = Map()
e = Engine( m, "princess_lives_here" )

这里有很多错误

所示代码非法缩进;它看起来像是
\uu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

类的
\uuuu init\uuuu
两端需要双下划线,而不是单下划线

该行:

e = "princess_lives_here".Map.Engine
是荒谬的蟒蛇;它首先尝试在字符串中查找“Map”属性。如果您想实例一个类的新对象,您可以说

e = Engine( "princess_lives_here" ) # or Map( "...")?
我不清楚你们需要地图和引擎做什么,但我猜你们要么想让地图成为引擎的一个子类(引擎对所有游戏都是通用的,地图对这个游戏是特定的),要么想让它们成为独立的对象,引擎和地图相互引用

目前,引擎是Map的一个子类。如果它们应该是分开的,那么将引擎声明为一个对象,让它的
\uuuu init\uuuu
同时获取一个起点和一个映射实例,然后执行以下操作

m = Map()
e = Engine( m, "princess_lives_here" )

不应该是
e=Engine(“公主生活在这里”)
?不应该是
e=Engine(“公主生活在这里”)
?实际上,如果单击“编辑”,代码的缩进是正确的。也许markdown太挑剔了?@Russell-我把问题写错了。在我的代码中正确缩进了init()、play()、death()和princess_lives_here()。但thx用于初始化函数的提示。现在,在我将它们更正为独立并将引擎设置为一个对象之后,我得到了:TypeError:\uuuu init\uuuuu()正好接受2个参数(给出了3个参数)…在我的理解中,错误正在发生,因为我有self、start和quips在其中。请建议如何更正我给uu init_uuuuuuuuuuuuuuu()fcn构造函数调用的参数数量,以获得一个隐式的“self”,因此e=Engine(“princess_ulives_uhere”,quips)需要uuu init_uuuuuuuuu(self,start,quips)-我得到以下响应:getattr():属性名称必须是字符串…鉴于我创建了Map(),getattr()似乎应该简单地获取我们在类映射中指定的fcn,我们将其指定为“princess_lives_here”。在Engine()调用中传递的参数需要与类引擎的_uinit_u()中指定的参数匹配,除了“自我”。所以引擎(m,“公主生活在这里”)需要初始(self,map,to,use,start),而不是初始(self,start,quips)。实际上,如果单击“编辑”,代码的缩进是正确的。也许markdown太挑剔了?@Russell-我把问题写错了。在我的代码中正确缩进了init()、play()、death()和princess_lives_here()。但thx用于初始化函数的提示。现在,在我将它们更正为独立并将引擎设置为一个对象之后,我得到了:TypeError:\uuuu init\uuuuu()正好接受2个参数(给出了3个参数)…在我的理解中,错误正在发生,因为我有self、start和quips在其中。请建议如何更正我给uu init_uuuuuuuuuuuuuuu()fcn构造函数调用的参数数量,以获得一个隐式的“self”,因此e=Engine(“princess_ulives_uhere”,quips)需要uuu init_uuuuuuuuu(self,start,quips)-我得到以下响应:getattr():属性名称必须是字符串…鉴于我创建了Map(),getattr()似乎应该简单地获取我们在类映射中指定的fcn,我们将其指定为“princess_lives_here”。在Engine()调用中传递的参数需要与类引擎的_uinit_u()中指定的参数匹配,除了“自我”。所以引擎(m,“公主就住在这里”)需要初始化(self,map,to,use,start),而不是初始化(self,start,quips)。