Найти - Пользователи
Полная версия: Передача данных между объектами класса
Начало » Python для новичков » Передача данных между объектами класса
1 2 3
enjoy44
Доброго времени суток! Прошу помощи, потому что уже устал голову ломать. Вопрос в передаче данных между объектами класса. У меня есть класс, который наследуется от другого и отвечает за построение змейки на светодиодной матрице. Этот клас умеет двигать змейку в любую сторону и обрабатывать столкновения змейки от стен и углов. Следующая моя задача научить класс обрабатывать столкновения змейки от других экземпляров класса (других змеек), для этого каждый экземпляр должен знать где находятся на матрице другие (змейки), для этого в него нужно передать что-то вроде списка точек(светодиодов) куда врезаться нельзя. P.S объектов на матрице может быть десятки
PEHDOM
enjoy44
для этого в него нужно передать что-то вроде списка точек(светодиодов) куда врезаться нельзя.
ну так и в чем проблема? в пайтоне операции со списками ссылочные, вот и передавайте список каждому инстансу класса, например при создании. после изменения списка, он будет актулен для всех инстансов класса.
хотя все конечно зависит от того как там у вас все реализовано, возможно ничего и не нужно передавать, но это так..
py.user.next
enjoy44
Вопрос в передаче данных между объектами класса.
Это по-разному можно делать. Зависит от архитектуры программы. Но обычно у тебя все змейки должны быть объектами и доска должна быть объектом. При ползании змейки по доске должен происходить обмен сообщениями между доской и змейкой. Так для каждой змейки должно происходить. И доска уже знает, где на ней свободное место и где на ней занятое место. При движении змейки на занятое место, доска должна ей сообщить, что там занято. Если змейка туда всё равно пошла, то можно сделать событие столкновения змеек и послать сообщение доске, которая после этого уведомит другие змейки о столкновении. Так синхронизация змеек происходит по сообщениям от доски.
enjoy44
По сути так и есть, каждая змейка пишет в общий список доски где она сейчас находится, змейке можно получать данные о всех пикселях находящихся на доске(матрице), по сути для змейки можно написать метод который при каждом движении выдирает эти пиксели из матрицы (кроме своих), а дальше действует по общим правилам (удар пришелся слева сверху, значит поехали влево вниз), есть только минус, что ориентироваться она будет на общую матрицу, то есть если покрасить доску в какой-то момент в красный, то змейка обалдеет и встанет.
AD0DE412
ну так и пишите в экземпляр доски поля
или второй вариант - записывайте все в атрибут класса “змейка” т.е. общий для всех экземпляров класса змейка
третий вариант - создайте класс для записи положений змеек
четвертый - глобальная переменная
итд
зы честно говоря не знаю какой лучше
ззы у вас многопоточное приложение или однопоток?
enjoy44
Многопоток 1. Гуй PyQt, (2-4) змейки, но я с потоками как-то не сталкивался ещё, сделал по готовому решению через таймеры
AD0DE412
enjoy44
Многопоток
ну тут сложнее … ну эти блакировки итд мне б через таймеры было бы тоже проще (хотя это же тоже типа мнопоток хмм)
зы т.е. у вас все эээ элементы отработали … по таймеру сняли параметры. обновили экран … так?
enjoy44
Каждый из объектов двинулся в свою сторону, передал данные в класс матрицы, класс матрицы через метод передал на GUI
AD0DE412
enjoy44
Каждый из объектов двинулся в свою сторону, передал данные в класс матрицы
одновременно ? а как вы .. нет так будет проще


предположительно одновременно белый ферьзь d4-с5 в тоже время черный ферьзь d5-с5 .. у каждой фигуры своя модель доски как вы это обрабатываете?
enjoy44
В классе с GUI есть метод который при несовпадении цветов с прошлой копией записывает новый цвет на показ в GUI форму. Просто чтобы управлять светодиодной матрицей, ей нужно передавать всегда состояние всех светодиодов, по этому у каждого объекта своя доска, а потом они все складываются.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB