Inteligentny_Traktor_Grupa_16/main.py

59 lines
2.3 KiB
Python

import pygame
from src.world import World
from src.tractor import Tractor
from src.settings import Settings
from utils.astar import a_star_search
def main():
pygame.init()
settings = Settings() # ustawienia pygame
world = World(settings) # stworzenie mapy na bazie ustawień pygame
tractor = Tractor("Spalinowy", "Nawóz 1", settings, 8 * settings.tile_size, 8 * settings.tile_size) # stworzenie traktora z podanymi argumentami
obstacles = [tile for tile in world.tiles if tile.type == 'rock'] # stworzenie listy z przeszkodami, kamień = przeszkoda
clock = pygame.time.Clock() # FPS purpose
screen = pygame.display.set_mode((settings.screen_width, settings.screen_height)) # tworzenie ekranu
pygame.display.set_caption('TRAKTOHOLIK') # nazwa okna
start_cords = (8, 1)
goals = [(8, 7), (7, 7), (0, 0)]
end_cords = goals[0]
start_dir = tractor.curr_direction # przypisanie początkowego ustawienia traktora do zmiennej
# path = BFSSearcher().search(start_cords, end_cords, start_dir) # wygenerowanie listy ruchów na bazie BFS
path = a_star_search(start_cords, end_cords, start_dir, world) # generowanie ścieżki za pomocą A*
run = True
while run:
clock.tick(settings.fps)
world.draw_tiles(screen)
world.draw_lines(screen)
tractor.draw(screen)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
# iteracja przez listę ruchów
if path:
action = path.pop(0) # pobranie pierwszego ruchu z listy
tractor.update(action) # wykonanie ruchu przez traktor
else:
if len(goals) > 1: # sprawdzenie czy są inne cele
new_start = goals.pop(0) # pobierz współrzędne pierwszego celu i ustaw jako początkowe
end_cords = goals[0] # ustaw kolejny cel
start_dir = tractor.curr_direction # aktualizacja kierunku traktora
# path = BFSSearcher().search(start_cord, end_cords, start_dir) # generacja nowej ścieżki
path = a_star_search(new_start, end_cords, start_dir, world)
pygame.time.wait(settings.freeze_time)
pygame.display.update()
pygame.quit()
if __name__ == '__main__':
main()