def __init__(self, parent, image_repository): super(Board, self).__init__(parent) self.started = True self.paused = False self.image_repository = image_repository self.config = Config.get() self.size = 50 self.grid = Grid.random(self.config.properties['board_width'], self.config.properties['board_height'], self.config.properties['rock_count'], self.config.properties['diamond_count']) self.game_state = GameState(self.grid, self.grid.cells[1][1], self) for x in range(self.grid.width): for y in range(self.grid.height): self.grid.cells[x][y].game_state = self.game_state self.initUI() self.timer = QtCore.QTimer() self.timer.timeout.connect(self.update_game) self.timer.start(100)
class GridWorld(): def __init__(self): pygame.init() pygame.display.set_caption("Grid World") self.clock = pygame.time.Clock() self.last_tick = pygame.time.get_ticks() self.screen_res = [400, 470] self.font = pygame.font.SysFont("Calibri", 16) self.screen = pygame.display.set_mode(self.screen_res, pygame.HWSURFACE, 32) self.show_checked = True self.quit = False self.type = "dfs" self.grid = Grid(True) self.ai = AI(self.grid, self.type) self.run = False self.pause = False def loop(self): while True: self.draw() self.clock.tick(60) self.mpos = pygame.mouse.get_pos() if self.run and not self.pause: if self.ai.finished: if not self.ai.failed: self.ai.get_result() self.run = False else: self.ai.make_step() for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() if event.type == KEYDOWN: if event.key == K_ESCAPE: pygame.quit() sys.exit() if event.key == K_c: self.ai.set_search() self.run = False if event.key == K_RETURN: if not self.run: self.ai.set_search() self.run = True self.pause = False else: self.pause = not self.pause if not self.run: if event.key == K_w: self.grid.save("saved_grid") if event.key == K_l: try: with open("saved_grid") as file: self.grid.load(file.read()) except: print("no saved file present") if event.key == K_m: self.grid.random() if event.key == K_n: self.grid.random_clear() if event.key == K_1: self.grid.clear_path() self.type = "dfs" self.ai.set_type(self.type) if event.key == K_2: self.grid.clear_path() self.type = "bfs" self.ai.set_type(self.type) if event.key == K_3: self.grid.clear_path() self.type = "ucs" self.ai.set_type(self.type) if event.key == K_4: self.grid.clear_path() self.type = "astar" self.ai.set_type(self.type) for node in self.grid.nodes.values(): if node.get_rect(pygame)[1].collidepoint( game.mpos): if event.key == K_p: self.grid.reset() node.make_puddle() if event.key == K_r: self.grid.reset() node.make_grass() if event.key == K_x: self.grid.reset() node.clear() if event.key == K_s: self.grid.reset() self.grid.set_start(node.pos) if event.key == K_g: self.grid.reset() self.grid.set_goal(node.pos) def blitInfo(self): line1 = self.font.render( "Esc: exit; Enter: search/pause; c: clear path; m: random board (clear first)", 1, WHITE) line2 = self.font.render( "s: place start; g: place goal; p: place puddle; r: place grass; x: clear node", 1, WHITE) line3 = self.font.render( "w: save board; l: load board, n: no obstacles", 1, WHITE) line4 = self.font.render("1: DFS, 2: BFS, 3: UCS, 4: A*", 1, WHITE) if self.ai.finished and not self.ai.failed: score = str(self.ai.final_cost) elif self.ai.finished and self.ai.failed: score = "[no path]" else: score = "..." line5 = self.font.render( "Mode: {}; Score: {}".format(self.type, score), 1, WHITE) self.screen.blit(line1, (5, 5)) self.screen.blit(line2, (5, 20)) self.screen.blit(line3, (5, 35)) self.screen.blit(line4, (5, 50)) self.screen.blit(line5, (5, NODE_W * self.grid.height + OFFSET[1] + 5)) def draw(self): self.screen.fill(0) self.grid.update(self, pygame) self.blitInfo() pygame.display.update()