import pygame import random import graph import field import settings import common import agent import math import time possibleFields = { 'dirt': field.Dirt(), 'grass': field.Grass(), 'cobble': field.Cobble(), 'sand': field.Sand(), 'station': field.Station(), } def randomize_map(): fields_array = [] for i in possibleFields: fields_array.append(possibleFields[i].tile.object) field_array_big = [] field_array_small = [] field_array_big_2 = [] field_array_small_2 = [] width = settings.Field.horizontal_count() height = settings.Field.vertical_count() for i in range(width): for j in range(height): # k = random.choice(list(possibleFields.keys())) x = random.uniform(0, 100) if x < 4: field_array_small.append(possibleFields['dirt'].tile.object) field_array_small_2.append('dirt') elif 4 < x < 55: field_array_small.append(possibleFields['sand'].tile.object) field_array_small_2.append('sand') elif 55 < x < 100: field_array_small.append(possibleFields['grass'].tile.object) field_array_small_2.append('grass') field_array_big.append(field_array_small) field_array_big_2.append(field_array_small_2) field_array_small = [] field_array_small_2 = [] for i in range(height): field_array_big[math.floor(width / 2)][i] = possibleFields['cobble'].tile.object field_array_big_2[math.floor(width / 2)][i] = 'cobble' for i in range(width): field_array_big[i][math.floor(height / 2)] = possibleFields['cobble'].tile.object field_array_big_2[i][math.floor(height / 2)] = 'cobble' field_array_big[0][0] = possibleFields['station'].tile.object field_array_big_2[0][0] = 'station' return field_array_big, field_array_big_2 def read_img(agent, fields): window = common.get('window') current_field = fields[agent.x()][agent.y()] if current_field == possibleFields['grass'].tile.object: window.blit(possibleFields['grass'].block.object, (0, 0)) elif current_field == possibleFields['dirt'].tile.object: window.blit(possibleFields['dirt'].block.object, (0, 0)) elif current_field == possibleFields['sand'].tile.object: window.blit(possibleFields['sand'].block.object, (0, 0)) elif current_field == possibleFields['cobble'].tile.object: window.blit(possibleFields['cobble'].block.object, (0, 0)) elif current_field == possibleFields['station'].tile.object: window.blit(possibleFields['station'].block.object, (0, 0)) pygame.display.update() pygame.time.delay(2000) common.set('state_imgShown', False) def agent_action(action: str): if action == 'open_window': common.set('state_imgShown', True) def draw_window(agent, fields): window = common.get('window') rect = agent.rect for i in range(settings.Field.horizontal_count()): for j in range(settings.Field.vertical_count()): window.blit(fields[i][j], (i * settings.Field.size(), j * settings.Field.size())) if agent.direction == 2: AGENT_IMG = pygame.image.load('./assets/tracktor/tractor_east.png') AGENT = pygame.transform.scale(AGENT_IMG, (settings.Field.size(), settings.Field.size())) window.blit(AGENT, (rect.x, rect.y)) elif agent.direction == 4: AGENT_IMG = pygame.image.load('./assets/tracktor/tractor_west.png') AGENT = pygame.transform.scale(AGENT_IMG, (settings.Field.size(), settings.Field.size())) window.blit(AGENT, (rect.x, rect.y)) elif agent.direction == 1: AGENT_IMG = pygame.image.load('./assets/tracktor/tractor_north.png') AGENT = pygame.transform.scale(AGENT_IMG, (settings.Field.size(), settings.Field.size())) window.blit(AGENT, (rect.x, rect.y)) elif agent.direction == 3: AGENT_IMG = pygame.image.load('./assets/tracktor/tractor_south.png') AGENT = pygame.transform.scale(AGENT_IMG, (settings.Field.size(), settings.Field.size())) window.blit(AGENT, (rect.x, rect.y)) pygame.display.update() common = common.Instance() agent = agent.Instance(1000, 2) def main(): common.set('game_running', True) common.set('state_imgShown', False) common.set( 'window', pygame.display.set_mode(( settings.Pygame.width(), settings.Pygame.height()))) pygame.display.set_caption(settings.Pygame.display_name()) fields, fields_2 = randomize_map() state = graph.State(2, 0, 0) move_list = (graph.graphsearch([], [], [10,10] , state, graph.succ)) print(move_list) x = True while common.get('game_running'): pygame.time.Clock().tick(settings.Pygame.fps()) for event in pygame.event.get(): if event.type == pygame.QUIT: common.set('game_running', False) if common.get('state_imgShown'): read_img(agent, fields) else: draw_window(agent, fields) if x: for action in move_list: if action == 'l' or action == 'r': agent_action(agent.rotate(action)) elif action == 'f': agent_action(agent.move(action)) draw_window(agent, fields) time.sleep(0.5) x = False agent_action(agent.rotate(None)) agent_action(agent.move(None)) pygame.quit() if __name__ == "__main__": main()