Ограничение кадров в секунду для текстовой игры, запущенной в командной строке - PullRequest
0 голосов
/ 15 февраля 2020

Это дополнительный вопрос к комментариям в моем последнем вопросе. Мне сказали, что экран командной строки мигает, потому что я не ограничивал количество кадров в секунду. Я провел некоторое исследование о том, как ограничить количество кадров в секунду, и обнаружил следующее:

def limit_frames(FPS): 
    return 1/ FPS

while True: # The main game loop
    # rest of the code
    time.sleep(limit_frames())

Limit_frames - это обратная функция, которая возвращает меньшее значение, если FPS больше, и это возвращаемое значение используется. в основном l oop в качестве аргумента time.sleep, так что больший вход FPS для функции limit_frames уменьшает время ожидания, а значит, и больше кадров. Однако, это все еще не работает для меня, и окно все еще мерцает. Любая помощь будет оценена. Спасибо

Редактировать:

Это класс карты:

    class Map:
        def __init__(self):
            self.map = [[" " for i in range(50)]for i in range(40)]
            self.n = 0 # counter used for boundry

        def update(self, thing, x, y):  
            self.map[y][x] = thing


        def draw(self):
            for layer in self.map: 
                for item in layer:
                    print(item, end= " ") 
                print('')


        def boundry(self):
            for i in range(50): # TOP
                self.update("_", self.n, 0)
                self.n += 1
                if self.n >= 49:
                    self.n = 0

            for i in range(40): # LEFT
                self.update("|", 0, self.n)
                self.n += 1
                if self.n >= 39:
                    self.n = 0

            for i in range(40): # RIGHT
                self.update("|", 49, self.n)
                self.n += 1
                if self.n >= 39:
                    self.n = 0

            for i in range(50): # BOTTOM
                self.update("_", self.n, 39)
                self.n += 1
                if self.n >= 49:
                    self.n = 0

Я использую функцию обновления для обновления карты. Я назвал его в разных классах, таких как игрок, чтобы добавить их на карту. Пример таков:

    def draw(self):
        game_map.update(self.player, self.x, self.y)

Ниже приводится описание всей игры l oop:

start = time.time()
FPS = 10000
while True:
    end = time.time()
    difference = end - start

    game_map.draw()
    game_map.boundry()

    os.system("cls")
    player.draw()
    player.move()
    player.boundries()
    player.print_score()

    game.generate_bullet()
    game.shoot()
    game.bullet_boundries()



    game.generate_enemies(difference)
    game.draw_enemies()
    game.move_enemies()
    game.enemy_boundries()
    game.hit()

    time.sleep(1/FPS)
...