Уведомления

Группа в Telegram: @pythonsu

#1 Март 9, 2020 21:49:11

enjoy44
Зарегистрирован: 2018-04-29
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача данных между объектами класса

Доброго времени суток! Прошу помощи, потому что уже устал голову ломать. Вопрос в передаче данных между объектами класса. У меня есть класс, который наследуется от другого и отвечает за построение змейки на светодиодной матрице. Этот клас умеет двигать змейку в любую сторону и обрабатывать столкновения змейки от стен и углов. Следующая моя задача научить класс обрабатывать столкновения змейки от других экземпляров класса (других змеек), для этого каждый экземпляр должен знать где находятся на матрице другие (змейки), для этого в него нужно передать что-то вроде списка точек(светодиодов) куда врезаться нельзя. P.S объектов на матрице может быть десятки

Офлайн

#2 Март 9, 2020 22:55:09

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Передача данных между объектами класса

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



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Март 9, 2020 22:58:02)

Офлайн

#3 Март 9, 2020 23:55:49

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10031
Репутация: +  857  -
Профиль   Отправить e-mail  

Передача данных между объектами класса

enjoy44
Вопрос в передаче данных между объектами класса.
Это по-разному можно делать. Зависит от архитектуры программы. Но обычно у тебя все змейки должны быть объектами и доска должна быть объектом. При ползании змейки по доске должен происходить обмен сообщениями между доской и змейкой. Так для каждой змейки должно происходить. И доска уже знает, где на ней свободное место и где на ней занятое место. При движении змейки на занятое место, доска должна ей сообщить, что там занято. Если змейка туда всё равно пошла, то можно сделать событие столкновения змеек и послать сообщение доске, которая после этого уведомит другие змейки о столкновении. Так синхронизация змеек происходит по сообщениям от доски.



Офлайн

#4 Март 10, 2020 07:51:56

enjoy44
Зарегистрирован: 2018-04-29
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача данных между объектами класса

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

Офлайн

#5 Март 10, 2020 12:47:54

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Передача данных между объектами класса

ну так и пишите в экземпляр доски поля
или второй вариант - записывайте все в атрибут класса “змейка” т.е. общий для всех экземпляров класса змейка
третий вариант - создайте класс для записи положений змеек
четвертый - глобальная переменная
итд
зы честно говоря не знаю какой лучше
ззы у вас многопоточное приложение или однопоток?



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Март 10, 2020 12:49:42)

Офлайн

#6 Март 10, 2020 12:51:54

enjoy44
Зарегистрирован: 2018-04-29
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача данных между объектами класса

Многопоток 1. Гуй PyQt, (2-4) змейки, но я с потоками как-то не сталкивался ещё, сделал по готовому решению через таймеры

Офлайн

#7 Март 10, 2020 12:54:44

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Передача данных между объектами класса

enjoy44
Многопоток
ну тут сложнее … ну эти блакировки итд мне б через таймеры было бы тоже проще (хотя это же тоже типа мнопоток хмм)
зы т.е. у вас все эээ элементы отработали … по таймеру сняли параметры. обновили экран … так?



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Март 10, 2020 13:05:12)

Офлайн

#8 Март 10, 2020 14:52:05

enjoy44
Зарегистрирован: 2018-04-29
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача данных между объектами класса

Каждый из объектов двинулся в свою сторону, передал данные в класс матрицы, класс матрицы через метод передал на GUI

Офлайн

#9 Март 10, 2020 15:08:59

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Передача данных между объектами класса

enjoy44
Каждый из объектов двинулся в свою сторону, передал данные в класс матрицы
одновременно ? а как вы .. нет так будет проще


предположительно одновременно белый ферьзь d4-с5 в тоже время черный ферьзь d5-с5 .. у каждой фигуры своя модель доски как вы это обрабатываете?



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Март 10, 2020 15:10:32)

Офлайн

#10 Март 10, 2020 15:12:10

enjoy44
Зарегистрирован: 2018-04-29
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача данных между объектами класса

В классе с GUI есть метод который при несовпадении цветов с прошлой копией записывает новый цвет на показ в GUI форму. Просто чтобы управлять светодиодной матрицей, ей нужно передавать всегда состояние всех светодиодов, по этому у каждого объекта своя доска, а потом они все складываются.

Отредактировано enjoy44 (Март 10, 2020 15:20:39)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version