Exemplo n.º 1
0
    def GameLoop(self):
        snake = Snake(r'snakeBody.png', 2, 4, 2)
        food = Food(r'food2.png', *self.grid_size)
        model = load_model(self.h5)
        score = 0
        data = defaultdict(list)
        start = time.time()
        while not self.GameExit and self.episodes:
            if self.render:
                dt = self.clock.tick(10)
            if not snake.is_alive:
                self.episodes -= 1
                print(self.episodes)
                #self.DataLabel(dt,game_time,score)
                data['Game_Time'].append(time.time() - start)
                data['Score_achieved'].append(score)
                if self.render:
                    for event in pygame.event.get():
                        if event.type == pygame.QUIT:
                            self.GameExit = True
                            pygame.quit()
                snake = Snake(r'snakeBody.png', 2, 4, 2)
                food = Food(r'food2.png', *self.grid_size)
                score = 0
                start = time.time()
            else:
                if self.render:
                    self.DrawLines()
                    for event in pygame.event.get():
                        if event.type == pygame.QUIT:
                            self.GameExit = True
                        if event.type == pygame.KEYDOWN:
                            if event.key == pygame.K_RETURN:
                                self.GameLoop()
                snake_instance = pd.DataFrame(
                    snake.GetData(self.grid_length, food.food_y, food.food_x))
                snake_instance = snake_instance.transpose()
                moves = ['l', 'r', 'u', 'd']

                predictedMove = moves[model.predict_classes(snake_instance)[0]]
                # predictedMoves = model.predict(snake_instance)
                # predictedMove = getRandomMove(predictedMoves)
                # print(predictedMoves)
                #print('move is ', predictedMove)
                # print('snake lst' , snake.snake_lst)
                snake.Move(predictedMove, self.grid_size[0])
                if snake.snake_y - food.food_x == 0 and snake.snake_x - food.food_y == 0:
                    snake.snake_length += 1
                    score += 1
                    if self.render:
                        food.PlotFood(snake, self.GameDisplay)
                if self.render:
                    self.GameDisplay.blit(food.img,
                                          (food.food_x * 20, food.food_y * 20))
                    snake.PlotSnake(self.GameDisplay)
            if self.render:
                self.DataLabel(dt, time.time() - start, score)
                pygame.display.update()
        df = pd.DataFrame(data)
        df.index.name = 'episodes'
        df.index += 1
        #df.Game_Time*=scaling factor to save scaled values
        df.to_csv(self.h5.replace('.h5', '.csv'))