基于控制台的游戏中的碰撞不起作用
Collision in console based game not working
我的板内有两种方法 class 来检查碰撞。一个用于其他玩家对象,一个用于地图的边界。地图上的那个工作正常,但玩家的碰撞关闭了。
以下是方法:
def check_mob(self, player, enemy):
dx = player.x - enemy.x
dy = player.y - enemy.y
distance = math.sqrt(dx ** 2 + dy ** 2)
if distance <= 1:
return True
else:
return False
def check_brd(self, board, player, enemy, direction):
'''Deals with collision '''
brd_x = len(self.board)
brd_y = len(self.board[0])
if direction == 'down':
if player.x + 1 == brd_x or self.check_mob(player, enemy):
return False
else:
return True
elif direction == 'up':
if player.x - 1 == brd_x - brd_x -1 or self.check_mob(player, enemy):
return False
else:
return True
elif direction == 'left':
if player.y - 1 == brd_y - brd_y - 1 or self.check_mob(player, enemy):
return False
else:
return True
elif direction == 'right':
if player.y + 1 == brd_y or self.check_mob(player, enemy):
return False
else:
return True
玩家或敌人会走向对方并卡住。发生这种情况时,我需要他们能够彼此远离。
整个,现在工作的代码是 here.
check_mob 正在测试当前位置的碰撞,而不是玩家试图去的位置...
同时简化
player.x - 1 == brd_x - brd_x -1
至
player.x == 0
我的板内有两种方法 class 来检查碰撞。一个用于其他玩家对象,一个用于地图的边界。地图上的那个工作正常,但玩家的碰撞关闭了。 以下是方法:
def check_mob(self, player, enemy):
dx = player.x - enemy.x
dy = player.y - enemy.y
distance = math.sqrt(dx ** 2 + dy ** 2)
if distance <= 1:
return True
else:
return False
def check_brd(self, board, player, enemy, direction):
'''Deals with collision '''
brd_x = len(self.board)
brd_y = len(self.board[0])
if direction == 'down':
if player.x + 1 == brd_x or self.check_mob(player, enemy):
return False
else:
return True
elif direction == 'up':
if player.x - 1 == brd_x - brd_x -1 or self.check_mob(player, enemy):
return False
else:
return True
elif direction == 'left':
if player.y - 1 == brd_y - brd_y - 1 or self.check_mob(player, enemy):
return False
else:
return True
elif direction == 'right':
if player.y + 1 == brd_y or self.check_mob(player, enemy):
return False
else:
return True
玩家或敌人会走向对方并卡住。发生这种情况时,我需要他们能够彼此远离。 整个,现在工作的代码是 here.
check_mob 正在测试当前位置的碰撞,而不是玩家试图去的位置... 同时简化
player.x - 1 == brd_x - brd_x -1
至
player.x == 0