Форум сайта python.su
0
Доброго времени суток! Прошу помощи, потому что уже устал голову ломать. Вопрос в передаче данных между объектами класса. У меня есть класс, который наследуется от другого и отвечает за построение змейки на светодиодной матрице. Этот клас умеет двигать змейку в любую сторону и обрабатывать столкновения змейки от стен и углов. Следующая моя задача научить класс обрабатывать столкновения змейки от других экземпляров класса (других змеек), для этого каждый экземпляр должен знать где находятся на матрице другие (змейки), для этого в него нужно передать что-то вроде списка точек(светодиодов) куда врезаться нельзя. P.S объектов на матрице может быть десятки
Офлайн
294
enjoy44ну так и в чем проблема? в пайтоне операции со списками ссылочные, вот и передавайте список каждому инстансу класса, например при создании. после изменения списка, он будет актулен для всех инстансов класса.
для этого в него нужно передать что-то вроде списка точек(светодиодов) куда врезаться нельзя.
[code python][/code]
Отредактировано PEHDOM (Март 9, 2020 22:58:02)
Офлайн
857
enjoy44Это по-разному можно делать. Зависит от архитектуры программы. Но обычно у тебя все змейки должны быть объектами и доска должна быть объектом. При ползании змейки по доске должен происходить обмен сообщениями между доской и змейкой. Так для каждой змейки должно происходить. И доска уже знает, где на ней свободное место и где на ней занятое место. При движении змейки на занятое место, доска должна ей сообщить, что там занято. Если змейка туда всё равно пошла, то можно сделать событие столкновения змеек и послать сообщение доске, которая после этого уведомит другие змейки о столкновении. Так синхронизация змеек происходит по сообщениям от доски.
Вопрос в передаче данных между объектами класса.
Офлайн
0
По сути так и есть, каждая змейка пишет в общий список доски где она сейчас находится, змейке можно получать данные о всех пикселях находящихся на доске(матрице), по сути для змейки можно написать метод который при каждом движении выдирает эти пиксели из матрицы (кроме своих), а дальше действует по общим правилам (удар пришелся слева сверху, значит поехали влево вниз), есть только минус, что ориентироваться она будет на общую матрицу, то есть если покрасить доску в какой-то момент в красный, то змейка обалдеет и встанет.
Офлайн
44
ну так и пишите в экземпляр доски поля
или второй вариант - записывайте все в атрибут класса “змейка” т.е. общий для всех экземпляров класса змейка
третий вариант - создайте класс для записи положений змеек
четвертый - глобальная переменная
итд
зы честно говоря не знаю какой лучше
ззы у вас многопоточное приложение или однопоток?
и вставьте ссылку на его url Отредактировано AD0DE412 (Март 10, 2020 12:49:42)
Офлайн
0
Многопоток 1. Гуй PyQt, (2-4) змейки, но я с потоками как-то не сталкивался ещё, сделал по готовому решению через таймеры
Офлайн
44
enjoy44ну тут сложнее … ну эти блакировки итд мне б через таймеры было бы тоже проще (хотя это же тоже типа мнопоток хмм)
Многопоток
и вставьте ссылку на его url Отредактировано AD0DE412 (Март 10, 2020 13:05:12)
Офлайн
0
Каждый из объектов двинулся в свою сторону, передал данные в класс матрицы, класс матрицы через метод передал на GUI
Офлайн
44
enjoy44одновременно ? а как вы .. нет так будет проще
Каждый из объектов двинулся в свою сторону, передал данные в класс матрицы

и вставьте ссылку на его url Отредактировано AD0DE412 (Март 10, 2020 15:10:32)
Офлайн
0
В классе с GUI есть метод который при несовпадении цветов с прошлой копией записывает новый цвет на показ в GUI форму. Просто чтобы управлять светодиодной матрицей, ей нужно передавать всегда состояние всех светодиодов, по этому у каждого объекта своя доска, а потом они все складываются.
Отредактировано enjoy44 (Март 10, 2020 15:20:39)
Офлайн