@aygumov

Как ускорить циклы while?

Я пишу змейку которая играет сама , без какого либо взаимодействия с ней , и я дошел до стадии где мне нужно получать все доступные пиксели(те, куда может попасть змейка) , и мне приходится проходится по всем пикселям на игровой области , все бы было отлично если б этот код не работал бы настолько медленно , из за чего сама игра при каждом ходе змейки очень сильно тормозит.

Вопрос: Как можно ускорить данный код ?
def algorithms3(self):
        head_x, head_y, peaks = self.window.datagame["snake"]["x"], self.window.datagame["snake"]["y"], []

        while self._Examination.check_step(head_x, head_y):
            peaks.append([head_x, head_y])
            head_x += 10

            while self._Examination.check_step(head_x, head_y):
                peaks.append([head_x, head_y])
                head_y += 10

            head_y = self.window.datagame["snake"]["y"]

            while self._Examination.check_step(head_x, head_y):
                peaks.append([head_x, head_y])
                head_y -= 10
            
            head_y = self.window.datagame["snake"]["y"]

        head_x, head_y = self.window.datagame["snake"]["x"], self.window.datagame["snake"]["y"]

        while self._Examination.check_step(head_x, head_y):
            peaks.append([head_x, head_y])
            head_x -= 10

            while self._Examination.check_step(head_x, head_y):
                peaks.append([head_x, head_y])
                head_y += 10

            head_y = self.window.datagame["snake"]["y"]

            while self._Examination.check_step(head_x, head_y):
                peaks.append([head_x, head_y])
                head_y -= 10
            
            head_y = self.window.datagame["snake"]["y"]
        
        head_x, head_y = self.window.datagame["snake"]["x"], self.window.datagame["snake"]["y"]

        while self._Examination.check_step(head_x, head_y):
            peaks.append([head_x, head_y])
            head_y += 10
        
        head_y = self.window.datagame["snake"]["y"]

        while self._Examination.check_step(head_x, head_y):
            peaks.append([head_x, head_y])
            head_y -= 10
        
        head_y = self.window.datagame["snake"]["y"]
  • Вопрос задан
  • 366 просмотров
Решения вопроса 3
Не используйте мультипроцессинг или мультипоточность. Пока, по крайней мере.
Разбирайтесь с алгоритмами - например проходить попиксельно всю игровую область - это всегда будет медленно.
Найдите и почитайте какую нибудь книжку по разработке игр, там наверняка будет что нибудь на тему оптимизации.
Ответ написан
DedIsDead
@DedIsDead
Используй мульти процессинг или мульти поточность:
Мульти процессинг
Мульти поточность
Ответ написан
Комментировать
Driver86
@Driver86
Немодератор toster.ru
Сохранять состояния пикселей и отслеживать только изменения
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы