让两个级别的游戏互动

时间:2011-05-31 21:48:42

标签: python class function

所以我知道这个网站有太多关于Zed Shaw的学习Python困难的问题,但是我要经历ex42。,额外的学分#3,让我挂断了。

我无法让类引擎有效地启动并转换到类Map中,游戏可以开始通过我定义的不同函数

代码如下:

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类中的其他函数,而是从类Engine转换到类Map,因此游戏可以继续。它要么不在类Engine中定义'Map',要么在我最后设置的变量中定义'Map'并尝试使用play()命令运行。

您可以指出我关于课堂互动的任何其他链接都会很棒。 thnx再次

2 个答案:

答案 0 :(得分:3)

这里有很多错误。

您显示的代码是非法缩进的;看起来__init__()play()应该缩进为类Engine的成员,death()princess_lives_here()缩进Map。

类的__init__在每一端都需要双下划线而不是单个下划线。

该行:

e = "princess_lives_here".Map.Engine

是荒谬的蟒蛇;它首先尝试在字符串中查找“Map”属性。如果你想要实例化一个类的新对象,你会说

e = Engine( "princess_lives_here" ) # or Map( "...")?

我不清楚你需要Map和Engine,但我猜你要么想要Map是Engine的子类(Engine对所有游戏都是通用的,而Map是特定于这个游戏的)或者你想要它们作为单独的对象,其中引擎和地图互相引用。

目前,您将Engine作为Map的子类。如果它们应该是分开的,则将Engine声明为对象,让其__init__同时获取起点和地图实例,然后执行

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

答案 1 :(得分:1)

from sys import exit
from random import randint

class Map(object):

def __init__(self):
    self.quips = [
    "You died. You kinda 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."
    ]

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


def princess_lives_here(self):
    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 torso. 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 thanks 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'

def gold_koi_pond(self):
    print "There is a garden with a koi pond in the center."
    print "You walk close and see a massive fin poke out."
    print "You peek in and a creepy looking huge Koi stares at you."
    print "It opens its mouth waiting for food."

    feed_it = raw_input("> ")

    if feed_it == "feed it":
        print "The Koi jumps up, and rather than eating the cake, eats your arm."
        print "You fall in and the Koi shrugs than eats you."
        print "You are then pooped out sometime later."
        return 'death'

    elif feed_it == "do not feed it":
        print "The Koi grimaces, then thrashes around for a second."
        print "It rushes to the other end of the pond, braces against the wall..."
        print "then it *lunges* out of the water, up in the air and over your"
        print "entire body, cake and all."
        print "You are then pooped out a week later."
        return 'death'

    elif feed_it == "throw it in":
        print "The Koi wiggles, then leaps into the air to eat the cake."
        print "You can see it's happy, it then grunts, thrashes..."
        print "and finally rolls over and poops a magic diamond into the air"
        print "at your feet."
        return 'bear_with_sword'

    else:
        print "The Koi gets annoyed and wiggles a bit."
        return 'gold_koi_pond'


def bear_with_sword(self):
    print "Puzzled, you are about to pick up the fish poop diamond when"
    print "a bear bearing a load bearing sword walks in."
    print '"Hey! That\' my diamond! Where\'d you get that!?"'
    print "It holds its paw out and looks at you."

    give_it = raw_input("> ")

    if give_it == "give it":
        print "The bear swipes at your hand to grab the diamond and"
        print "rips your hand off in the process. It then looks at"
        print 'your bloody stump and says, "Oh crap, sorry about that."'
        print "It tries to put your hand back on, but you collapse."
        print "The last thing you see is the bear shrug and eat you."
        return 'death'

    elif give_it == "say no":
        print "The bear looks shocked. Nobody ever told a bear"
        print "with a broadsword 'no'. It asks, "
        print '"Is it because it\'s not a katana? I could go get one!"'
        print "It then runs off and now you notice a big iron gate."
        print '"Where the hell did that come from?" You say.'
        return 'big_iron_gate'

def big_iron_gate(self):
    print "You walk up to the big iron gate and see there's a handle."

    open_it = raw_input("> ")

    if open_it == 'open it':
        print "You open it and you are free!"
        print "There are mountains. And berries! And..."
        print "Oh, but then the bear comes with his katana and stabs you."
        print '"Who\'s laughing now!? Love this katana."'
        return 'death'

    else:
        print "That doesn't seem sensible. I mean, the door's right there."
        return 'big_iron_gate'


class Engine(object):

def __init__(self, o, map):
    self.map = map
    self.obj = o

def play(self):
    nextmap = self.map

    while True:
        print "\n--------"
        room = getattr(self.obj, nextmap)
        nextmap = room()


a_map = Map()
a_eng = Engine(a_map, "princess_lives_here")

a_eng.play()