Задать вопрос
@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"]
  • Вопрос задан
  • 379 просмотров
Подписаться 1 Средний 5 комментариев
Решения вопроса 3
Не используйте мультипроцессинг или мультипоточность. Пока, по крайней мере.
Разбирайтесь с алгоритмами - например проходить попиксельно всю игровую область - это всегда будет медленно.
Найдите и почитайте какую нибудь книжку по разработке игр, там наверняка будет что нибудь на тему оптимизации.
Ответ написан
DedIsDead
@DedIsDead
Используй мульти процессинг или мульти поточность:
Мульти процессинг
Мульти поточность
Ответ написан
Комментировать
Driver86
@Driver86
Немодератор toster.ru
Сохранять состояния пикселей и отслеживать только изменения
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
SpectrumData Екатеринбург
от 200 000 до 300 000 ₽
Greenway Global Новосибирск
от 150 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽
22 янв. 2025, в 04:08
6000 руб./за проект
21 янв. 2025, в 23:55
20000 руб./за проект
21 янв. 2025, в 23:35
80000 руб./за проект