Пример #1
0
 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)
Пример #2
0
 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)
Пример #3
0
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()