Предположим, у меня есть какое-то окружение (назовем его world
) и некоторые сущности (назовем их bot
s), которые принадлежат миру.Я хочу, чтобы боты взаимодействовали друг с другом (например, получить список ботов, находящихся в поле зрения бота).Но если боты не знают о своей среде, они также не знают о других.Итак, вопрос в том, как это взаимодействие реализуется в приложениях реального мира?
Решение, которое я вижу, состоит в том, чтобы дать ботам указатель на мир, но я нахожу это довольно нелогичным, потому что у каждого бота будет то же самое «Права »при взаимодействии с другими ботами, как в мире.
Решением, которое я использую в данный момент, является концепция сигналов и слотов QT.У каждого бота есть сигнал queryNeighbours(Bot *requester, QVector<Bot *> *result)
, а в мире есть слот giveNeighbours(Bot *requester, QVector<Bot *> *result)
.Итак, тогда я связываю сигналы ботов с мировым слотом, и когда боту нужно получить соседей, он просто получает их как:
QVector<Bot *> bots;
emit queryBots(this, &bots);
Однако я думаю, что есть некоторый шаблон, реализующий то, что янужно, чтобы мне не понадобился QT.