Пример #1
0
 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                    
Пример #2
0
    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
Пример #3
0
 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  
Пример #4
0
    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