58 lines
2.3 KiB
Python
58 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 = [(3, 3), (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) # 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)
|
|
|
|
pygame.time.wait(settings.freeze_time)
|
|
pygame.display.update()
|
|
pygame.quit()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|