48 lines
2.1 KiB
Python
48 lines
2.1 KiB
Python
|
from agentActionType import AgentActionType
|
||
|
import time
|
||
|
from turnCar import turn_left_orientation, turn_right_orientation
|
||
|
from garbageTruck import GarbageTruck
|
||
|
from typing import Tuple, Dict
|
||
|
from gridCellType import GridCellType
|
||
|
from gameContext import GameContext
|
||
|
from agentOrientation import AgentOrientation
|
||
|
import pygame
|
||
|
|
||
|
def move_dust_car(actions: list[AgentActionType], game_context: GameContext) -> None:
|
||
|
for action in actions:
|
||
|
street_position = game_context.dust_car.position
|
||
|
has_to_render_street = False
|
||
|
if action == AgentActionType.TURN_LEFT:
|
||
|
game_context.dust_car.orientation = turn_left_orientation(game_context.dust_car.orientation)
|
||
|
elif action == AgentActionType.TURN_RIGHT:
|
||
|
game_context.dust_car.orientation = turn_right_orientation(game_context.dust_car.orientation)
|
||
|
elif action == AgentActionType.MOVE_FORWARD:
|
||
|
game_context.dust_car.position = calculate_next_position(game_context.dust_car)
|
||
|
has_to_render_street = True
|
||
|
game_context.dust_car.render(game_context)
|
||
|
if has_to_render_street:
|
||
|
if game_context.grid[street_position] == GridCellType.STREET_HORIZONTAL:
|
||
|
game_context.render_in_cell(street_position, "imgs/street_horizontal.png")
|
||
|
elif game_context.grid[street_position] == GridCellType.STREET_VERTICAL:
|
||
|
game_context.render_in_cell(street_position, "imgs/street_vertical.png")
|
||
|
pygame.display.update()
|
||
|
time.sleep(0.5)
|
||
|
|
||
|
|
||
|
|
||
|
def calculate_next_position(car: GarbageTruck) -> Tuple[int, int]:
|
||
|
if car.orientation == AgentOrientation.UP:
|
||
|
if car.position[1] - 1 < 1:
|
||
|
return None
|
||
|
return (car.position[0], car.position[1] - 1)
|
||
|
if car.orientation == AgentOrientation.DOWN:
|
||
|
if car.position[1] + 1 > 27:
|
||
|
return None
|
||
|
return (car.position[0], car.position[1] + 1)
|
||
|
if car.orientation == AgentOrientation.LEFT:
|
||
|
if car.position[0] - 1 < 1:
|
||
|
return None
|
||
|
return (car.position[0] - 1, car.position[1])
|
||
|
if car.position[0] + 1 > 27:
|
||
|
return None
|
||
|
return (car.position[0] + 1, car.position[1])
|