При выполнении игр вы всегда должны пытаться делать что-то вроде этого:
while not finished:
events = get_events() # get the user input
# update the world based on the time that elapsed and the events
world.update(events, dt)
word.draw() # render the world
sleep(1/30s) # go to next frame
Время сна должно быть переменным, поэтому оно учитывает количество времени, затрачиваемое на рисование и вычисление обновлений мира.
Метод обновления мира выглядел бы примерно так:
def update(self, events, dt):
self.move(events) # interpret user action
self.elapsed += dt
if self.elapsed > ADVANCE_TIME:
self.piece.advance()
self.elapsed = 0
Другой способ реализации этого (чтобы вы не перерисовывали слишком много) - запуск событий, когда пользователь заказывает кусокпереехал или когда время ADVANCE_TIME проходит.Затем в каждом обработчике событий вы обновляете мир и перерисовываете.
Предполагается, что вы хотите, чтобы фигуры перемещались по одному шагу за раз, а не непрерывно.В любом случае, изменение непрерывного движения довольно тривиально.