add function for moving dust car

This commit is contained in:
Pawel Felcyn 2023-04-22 17:46:08 +02:00
parent d0d9fb0309
commit c5e6eadcae
4 changed files with 78 additions and 6 deletions

7
bfs.py
View File

@ -4,6 +4,7 @@ from gridCellType import GridCellType
from agentActionType import AgentActionType from agentActionType import AgentActionType
from agentOrientation import AgentOrientation from agentOrientation import AgentOrientation
from queue import Queue from queue import Queue
from turnCar import turn_left_orientation, turn_right_orientation
class Succ: class Succ:
state: AgentState state: AgentState
@ -56,12 +57,6 @@ def succ(state: AgentState) -> list[Succ]:
result.append(move_forward_succ(state)) result.append(move_forward_succ(state))
return result return result
def turn_left_orientation(orientation: AgentOrientation) -> AgentOrientation:
return (orientation - 1) % 4
def turn_right_orientation(orientation: AgentOrientation) -> AgentOrientation:
return (orientation + 1) % 4
def move_forward_succ(state: AgentState) -> Succ: def move_forward_succ(state: AgentState) -> Succ:
position = get_next_cell(state) position = get_next_cell(state)
if position == None: if position == None:

10
main.py
View File

@ -3,6 +3,8 @@ from gameEventHandler import handle_game_event
from gameContext import GameContext from gameContext import GameContext
from startup import startup from startup import startup
from PIL import Image from PIL import Image
from agentActionType import AgentActionType
from movement import move_dust_car
pygame.init() pygame.init()
@ -17,6 +19,14 @@ game_context.dust_car_pygame = pygame.image.frombuffer(dust_car_pil.tobytes(), d
game_context.canvas = canvas game_context.canvas = canvas
startup(game_context) startup(game_context)
# test = [AgentActionType.MOVE_FORWARD, AgentActionType.MOVE_FORWARD, AgentActionType.MOVE_FORWARD,
# AgentActionType.MOVE_FORWARD, AgentActionType.MOVE_FORWARD, AgentActionType.MOVE_FORWARD,
# AgentActionType.MOVE_FORWARD, AgentActionType.TURN_RIGHT, AgentActionType.MOVE_FORWARD,
# AgentActionType.MOVE_FORWARD, AgentActionType.MOVE_FORWARD, AgentActionType.MOVE_FORWARD,
# AgentActionType.MOVE_FORWARD, AgentActionType.MOVE_FORWARD, AgentActionType.MOVE_FORWARD,
# AgentActionType.TURN_LEFT, AgentActionType.MOVE_FORWARD]
# move_dust_car(test, game_context)
exit = False exit = False

48
movement.py Normal file
View File

@ -0,0 +1,48 @@
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])

19
turnCar.py Normal file
View File

@ -0,0 +1,19 @@
from agentOrientation import AgentOrientation
def turn_left_orientation(orientation: AgentOrientation) -> AgentOrientation:
if orientation == AgentOrientation.DOWN:
return AgentOrientation.RIGHT
if orientation == AgentOrientation.LEFT:
return AgentOrientation.DOWN
if orientation == AgentOrientation.UP:
return AgentOrientation.LEFT
return AgentOrientation.UP
def turn_right_orientation(orientation: AgentOrientation) -> AgentOrientation:
if orientation == AgentOrientation.DOWN:
return AgentOrientation.LEFT
if orientation == AgentOrientation.LEFT:
return AgentOrientation.UP
if orientation == AgentOrientation.UP:
return AgentOrientation.RIGHT
return AgentOrientation.DOWN