0

作業コードはこちら: http://codepad.org/L0OkeHlk

from sys import exit

class Map(object):

    def __init__(self, start):
        self.start = start

    def play(self):
        next = self.start

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

    def death(self):
        exit(1)

    def redroom(self):
        prompt = raw_input("> ")
        if "white" in prompt:
            return "whiteroom"
        elif "blue" in prompt:
            return "blueroom"
        else:
            print "DOES NOT COMPUTE (RED ROOM)"
            return 'death'

    def whiteroom(self):
        prompt = raw_input("> ")
        if "red" in prompt:
            return "redroom"
        elif "blue" in prompt:
            return "blueroom"
        else:
            print "DOES NOT COMPUTE (WHITE ROOM)"
            return 'death'

    def blueroom(self):
        prompt = raw_input("> ")
        if "white" in prompt:
            return "whiteroom"
        elif "red" in prompt:
            return "redroom"
        else:
            print "DOES NOT COMPUTE (BLUE ROOM)"
            return 'death'

class Engine(object):
    pass

x = Map("redroom")
x.play()

上記の作品。しかし、私がすべてを1つのクラスで行っているからです。play 関数と Death 関数を独自のクラスに入れたいと考えています。

私の問題は2つの場所から来ています。エンジン クラスでマップ クラスの関数を呼び出してゲームを動作させるにはどうすればよいですか? Map/Engine クラスで何を初期化すればよいかを知るにはどうすればよいですか? 何かを初期化することになっていると思いますが、それを思い付く方法がわかりません。何を初期化するかを決めるとき、最初に何を考えるべきですか?

機能しないコード (私の最善の試み): http://codepad.org/ELlaHQiB

from sys import exit

class Map(object):

    def redroom(self):
        prompt = raw_input("> ")
        if "white" in prompt:
            return "whiteroom"
        elif "blue" in prompt:
            return "blueroom"
        else:
            print "DOES NOT COMPUTE (RED ROOM)"
            return 'death'

    def whiteroom(self):
        prompt = raw_input("> ")
        if "red" in prompt:
            return "redroom"
        elif "blue" in prompt:
            return "blueroom"
        else:
            print "DOES NOT COMPUTE (WHITE ROOM)"
            return 'death'

    def blueroom(self):
        prompt = raw_input("> ")
        if "white" in prompt:
            return "whiteroom"
        elif "red" in prompt:
            return "redroom"
        else:
            print "DOES NOT COMPUTE (BLUE ROOM)"
            return 'death'

class Engine(object):
    def __init__(self, start):
        self.start = start

    def play(self):
        next = self.start

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

    def death(self):
        exit(1)

x = Engine("redroom")
x.play()

また、プレイ機能もよくわかりません。それは機能しますが、読んでいたチュートリアルから取得したからです。while ループで次の変数が self.start になり、次に room() になる目的は何ですか?

4

1 に答える 1

0

これが私がすることです。

class Engine(object):
    def __init__(self,rooms):
        self.rooms = rooms
        self.current = 0

    def next(self):
        self.rooms[self.current]()
        self.current += 1
        if len(self.rooms) == self.current:
            self.current = 0
            # or whatever logic you want.

m = Map()
rooms = [m.redroom, m.whiteroom, m.blueroom]
e = Engines(rooms)

e.next() # should call redroom of class Map
e.next() # should call whiteroon etc  
于 2012-04-08T00:33:27.690 に答える