我想把我在代码#1中初始化的snake发送到代码#2中另一个类中的另一个文件,并将它添加到自食蛇列表
代码#1:(蛇类)
def __init__(self, keys, game, pos, color, direction):
self.keys = keys
self.game = game
self.pos = pos
self.color = color
self.direction = direction
game_manager.GameManager.add_snake(self, self)
self.cells = [pos]
pass
def get_head(self):
return cells[len(cells)-1]
pass
def next_move(self):
def f(pos, direction):
return {
'UP': (pos[0]+1, pos[1]),
'DOWN': (pos[0]-1, pos[1]),
'LEFT': (pos[0], pos[1]-1),
'RIGHT': (pos[0], pos[1]+1)
}[direction]
self.pos = f(self.pos, self.direction)
pass
def handle(self, keys):
if len(keys) != 0:
if keys[0] in self.keys:
direction_key = ''
for i in keys:
if keys[i] == self.direction:
direction_key = i
change_dir = keys[0] + direction_key
not_valid_change = ['ws', 'sw', 'ad', 'da']
if change_dir not in not_valid_change:
self.direction = self.keys[keys[0]]
pass
代码#2:(类游戏管理器)
def __init__(self, size, screen, sx, sy, block_cells):
self.size = size
self.screen = screen
self.sx = sx
self.sy = sy
self.block_cells = block_cells
self.turn = 0
self.snakes = []
pass
def add_snake(self, snake):
self.snakes.append(snake)
pass
def get_cell(self, pos):
def in_range(valid, pos):
if valid > pos and pos >= 0:
return True
return False
return pos if in_range(self.size[0], pos[0]) and in_range(self.size[1], pos[1]) else None
def kill(self, killed_snake):
self.snakes.remove(killed_snake)
pass
def handle(self, keys):
for snake in self.snakes:
snake(keys)
for snake in self.snakes:
snake.next_move()
self.turn += 1
pass
我知道在我发送的代码#1(self,self)中,逻辑上在游戏管理器的add#u snake中,“self”将指向snake类实例,而不是游戏管理器。但是自食蛇=[]在GameManager中。你知道吗
我很困惑。错误如下: AttributeError:“Snake”对象没有属性“snakes”
我建议使用一个包含snakes的类变量。然后可以添加到静态方法中。所有
GameManager
的实例都将具有相同的snake列表相关问题 更多 >
编程相关推荐