def shoot_em(self, tank): my_position = Point(tank.x, tank.y) for enemy in self.enemies: enemy_position = Point(enemy.x, enemy.y) if my_position.distance(enemy_position) <= 50: theta = self.fields.angle(tank,enemy) if theta < 1.5 and theta > -1.5: line_to_enemy = Line(my_position, enemy_position) safe = True for teamMate in self.mytanks: if teamMate.index == tank.index: continue teamMate_position = Point(teamMate.x, teamMate.y) cp2 = teamMate_position.closestPointOnLine(line_to_enemy) teamMate_enemy_line = Line(teamMate_position, cp2) if teamMate_position.distance(cp2) < 10: safe = False break if safe == True: return True return False
def shoot_em(self, tank): my_position = Point(tank.x, tank.y) for enemy in self.enemies: enemy_position = Point(enemy.x, enemy.y) if my_position.distance(enemy_position) <= 50: theta = self.fields.angle(tank, enemy) if theta < 1.5 and theta > -1.5: line_to_enemy = Line(my_position, enemy_position) safe = True for teamMate in self.mytanks: if teamMate.index == tank.index: continue teamMate_position = Point(teamMate.x, teamMate.y) cp2 = teamMate_position.closestPointOnLine( line_to_enemy) teamMate_enemy_line = Line(teamMate_position, cp2) if teamMate_position.distance(cp2) < 10: safe = False break if safe == True: return True return False
def getTangentialObstacleField(self, tank, target, oldTank, elapsedTime): deltaX = 0.0 deltaY = 0.0 tankPosition = Point(tank.x, tank.y) closestPoint = tankPosition.closestPointOnLine(target.p1, target.p2) if self.distance(tankPosition, closestPoint) < target.spread: lineToTarget = Line(tankPosition, closestPoint) if target.isPerpendicular(lineToTarget): midpoint = target.getMidpoint() if closestPoint.x < midpoint.x: deltaX = -1.0 elif closestPoint.x > midpoint.x: deltaX = 1.0 else: deltaX = 0.0 if closestPoint.y < midpoint.y: if target.getSlope() == 0.0: deltaY = 0.0 elif target.getSlope() == None: deltaY = -1.0 else: deltaY = -1.0 * target.getSlope() elif closestPoint.y > midpoint.y: if target.getSlope() == 0: deltaY = 0.0 elif target.getSlope() == None: deltaY = 1.0 else: deltaY = 1.0 * target.getSlope() else: deltaY = 0.0 return deltaX, deltaY