我试图将值从for lang in en de es; do
echo $lang | php update.php || read x
done
传递到另一个getattr
,但是它仍然告诉我在Engine类中没有此参数。问题是如何将属性传递给Map类?它会继续在class Map()
中查找属性。
class Engine()
class Engine(object):
def __init__(self,start):
self.map = start
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 play(self):
next = self.map
while True:
print ("\n------------------")
# Trying to get attribute of object and pass to class Map.
Map = getattr(self, next)
next = Map()
class Map():
def __init__(self, next):
self.map = next
def central_corridor(self):
print ("The Gothons of planet Percal #25 have invaded your ship and destryoed")
if action == "shoot!":
print ("Quick on the draw you yank out your blaster and fire)
return 'death'
elif action == 'tell a joke':
print ("Lucky for you they made you learn Gothon insults in the academy")
return 'Go to bridge'
def go_to_bridge(self):
print ("You burst onto the Bridge with the neutron destruct bomb")
a_game = Engine("central_corridor")
a_game.play()
答案 0 :(得分:0)
这是您需要解决的有关分解的内容:
Map
中,而不是在Engine
中。实际上,您应该将Map
重命名为Location
,因为它不仅记录了它们在哪里,还知道哪些动作是合法的并进行处理,然后更新到新位置。Engine
班级不需要知道玩家在哪里,只有他们是活着还是死了(他们所携带的东西,他们的能量水平,得分等)。Engine("central_corridor")
没有任何意义。 (顺便说一句,“ central_corridor”是一个字符串,Map.central_corridor是一个方法,但是这样做仍然是很糟糕的分解,您将无缘无故地将Engine耦合到Map)Engine
类不需要知道如何初始化Map实例那么如何编写Map
类,使其将自身位置初始化为“ central_corridor”?
Map
中的方法应设置或获取self.location = "central corridor", "bridge"
),而不应存储为方法Map.central_corridor()
,Map.go_to_bridge()
。当然,如果这样做,您需要为每个合法的源-目的地对位置使用一种方法,除非冒险是线性的,否则这将是不必要的。所以您当前的想法是将位置存储为Map
中的方法名称,然后让Engine.play()
遍历这些位置(方法名称)不是很好。
Engine.play
只是让您头疼,不必要地传递来自Map
的控制流<-> Engine
和合法传递的位置action
也是哪里来的?您会丢失一种要求玩家采取行动,拒绝并循环的方法,除非该方法能够识别出该位置的合法行为。Map
类将状态(活动/死点)传递回Engine
。作为字符串?作为布尔值?还是可以返回None
来表明玩家已经死亡? Map
重命名为Location
Location
会有一个成员where
(或state
或您想称呼它的任何成员)Engine
或Engine.__init__
仅需要定义self.location = Location()
。在初始状态下没有通过。Location
类应该有一个大方法turn()
,该方法检查self.location
的当前值,打印任何相应的描述文本,调用一种方法来获取玩家的动作(可能想通过它)一系列法律行动(以字符串形式)),然后处理在该位置选择的行动,并确定下一个行动和下一个玩家状态(有效/无效)。