0
作業するコードはここにある:http://codepad.org/L0OkeHlkPythonのクラス(基本)
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つのクラスですべてをやっているからです。私は、遊びと死の機能を持ち、自分たちのクラスに入れたいと思っています。
私の問題は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()
また、私は、再生機能のわかりませんよ。それは私が読んでいたチュートリアルから得たものだからです。次の変数がself.startになり、whileループでroom()になる目的は何ですか?
私はあなたがクラスルーム 'Room'を作成しようとしていて、それらを' redroom'、 'blueroom'のサブクラスとして使うことができますか? 'play'関数はあなたの' Room'クラスに実装することができるので、それらはすべて利用可能です。最後に、すべての 'Room'オブジェクトをマップに入れることができます。 – George
なぜここに授業をしたいですか?より多くのことを望むのではなく、必要があるかどうか疑問に思うべきです。データのカプセル化は行われていません。これがPythonでクラスを行う主な理由です。 –
'getattr(self、next)'は 'redroom'という名前の' x'の属性を探していますが、そのような属性はありません。あなたがここで何をしようとしているのか分かりにくいですが、 'getattr'を使う必要があるかどうかは疑問です。また、 "部屋"を "マップ"のメソッドとして表現することは奇妙に思えます。重要な組み込み関数の名前である変数nextの名前を避けることはおそらく良い考えです。 – James