Add partially finished AutomaticMovement class
This commit is contained in:
parent
0084750629
commit
e6c36eea8d
87
src/AI/AutomaticMovement.py
Normal file
87
src/AI/AutomaticMovement.py
Normal file
@ -0,0 +1,87 @@
|
||||
from src.entities.Entity import Entity
|
||||
from src.entities.Player import Movement
|
||||
from queue import PriorityQueue
|
||||
|
||||
|
||||
class AutomaticMovement:
|
||||
|
||||
def __init__(self, player, gameMap):
|
||||
self.map = gameMap
|
||||
self.player = player
|
||||
self.nextMove = None
|
||||
self.movesList = None
|
||||
self.actualTarget = None
|
||||
|
||||
def gotoToTarget(self, target: Entity):
|
||||
self.actualTarget = target
|
||||
|
||||
def updatePlayerCoords(self):
|
||||
if self.actualTarget is not None:
|
||||
self.player.move(self.nextMove)
|
||||
self.movesList.remove(0)
|
||||
if len(self.movesList) != 0:
|
||||
self.nextMove = self.movesList[0]
|
||||
else:
|
||||
self.nextMove = None
|
||||
self.actualTarget = None
|
||||
|
||||
def a_Star(self):
|
||||
# todo: A*!!!
|
||||
fringe = PriorityQueue()
|
||||
explored = []
|
||||
|
||||
startingPos = (self.player.x, self.player.y, self.player.rotation.value)
|
||||
startingPriority = 0
|
||||
|
||||
fringe.put((startingPriority, node(None, None)))
|
||||
while True:
|
||||
if fringe.empty():
|
||||
# target is unreachable
|
||||
self.movesList = None
|
||||
self.nextMove = None
|
||||
|
||||
elem = fringe.get()
|
||||
|
||||
if self.goalTest():
|
||||
# TODO : listaRuchow
|
||||
return None
|
||||
|
||||
|
||||
self.movesList = fringe
|
||||
self.nextMove = self.fringe[0]
|
||||
|
||||
|
||||
def succesor(self):
|
||||
movesList = [Movement.ROTATE_L, Movement.ROTATE_R]
|
||||
|
||||
# Check if can move forward
|
||||
facingCoord = self.player.getFacingCoord()
|
||||
facingEntity = self.map.getEntityOnCoord(facingCoord)
|
||||
if facingEntity is not None:
|
||||
movesList.append(Movement.FORWARD)
|
||||
|
||||
return movesList
|
||||
|
||||
def goalTest(self, coords):
|
||||
entity = self.map.getEntityOnCoord(coords)
|
||||
|
||||
if entity.id == self.actualTarget.id:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def approximateDistanceFromTarget(self, nextTileX, nextTileY):
|
||||
return abs(nextTileX - self.actualTarget.x) + abs(nextTileY - self.actualTarget.y)
|
||||
|
||||
def stepCost(self, destinationTile):
|
||||
# TODO : w oparciu o koszt danej kratki
|
||||
return 1
|
||||
|
||||
def priority(self, apprDist, stepCost):
|
||||
return apprDist + stepCost
|
||||
|
||||
|
||||
class node:
|
||||
def __init__(self, parent, action):
|
||||
self.parent = parent
|
||||
self.action = action
|
Loading…
Reference in New Issue
Block a user