我正在使用python开发游戏。
游戏中的AI使用玩家拥有的变量,反之亦然。
例如:
class Player():
def __init__(self, canvas...):
self.id = canvas.create_rectangle(...)
...
def touching_AI(self):
aipos = canvas.coords(AI object)
pos = canvas.coords(self.id)
...
#the function above checks if the player is touching the AI if it
#is, then call other functions
this = player(canvas...)
class AI():
def __init__(self, canvas...):
self.id = canvas.create_rectangle(...)
def chase_player(self):
playerpos = canvas.coords(this.id)
pos = canvas.coords(self.id)
...
# a lot of code that isn't important
很明显,Python说没有定义播放器类中的AI对象。两个类都依赖于另一个类来工作。但是,尚未定义一个,因此,如果我将一个放在另一个之前,则会返回错误。尽管可能仅针对这两个功能有一种解决方法,但我没有提到更多功能。
总而言之,在创建对象之前(甚至制作更多文件),是否有一种方法(pythonic或非pythonic)使用和/或定义对象?
答案 0 :(得分:2)
你不
代替使用参数
class Player():
def __init__(self, canvas...):
self.id = canvas.create_rectangle(...)
...
def touching(self,other):
aipos = canvas.coords(other.object)
pos = canvas.coords(self.id)
...
#the function above checks if the player is touching the AI if it
#is, then call other functions
class AI():
def __init__(self, canvas...):
self.id = canvas.create_rectangle(...)
def chase(self,player):
playerpos = canvas.coords(player.id)
pos = canvas.coords(self.id)
然后
player = Player(canvas...)
ai = AI(...)
ai.chase(player)
player.touching(ai)
但更好的是定义定义您的接口的基础对象类型
class BaseGameOb:
position = [0,0]
def distance(self,other):
return distance(self.position,other.position)
class BaseGameMob(BaseGameOb):
def chase(self,something):
self.target = something
def touching(self,other):
return True or False
那么你所有的东西都继承自这个
class Player(BaseGameMob):
... things specific to Player
class AI(BaseGameMob):
... things specific to AI
class Rat(AI):
... things specific to a Rat type AI
答案 1 :(得分:1)
您没有依赖性周期问题。但是,您有以下问题,
您正在尝试使用AI对象,但是没有在任何地方创建该对象。它需要看起来像
foo = AI() #creating the object
bar(foo) #using the object
canvas.coords(AI object)
周围的语法错误。
调用函数的方法是foo(obj)
,不带类型。
定义函数时,您可以选择提及def foo(bar : 'AI'):
您可以相互依赖类的证明,https://pyfiddle.io/fiddle/b75f2de0-2956-472d-abcf-75a627e77204/
答案 2 :(得分:0)
您可以初始化一个而不指定类型,然后再分配它。 Python假装每个人都是大人。.
例如:
div.interesting {
border: 5px 0px 5px 5px solid #11CBD7;
padding: 5% 2%;
}