Нахождение шаблонов в Головоломках

Мастера Visual Studio создадут простое Приложение типа CRUD для Вас.

Перетаскивают datagrid на Вашей форме, нажимают свойство соединения и следуют за мастерами оттуда.

Не лучшие практики, но просто и работы...

5
задан Jon Seigel 22 May 2010 в 23:08
поделиться

3 ответа

Это всегда зависит от домена. Но есть также две ситуации, когда вы выполняете такой поиск. Одна ситуация возникает после хода (изменение игрового поля, сделанного игроком), а другая - если / когда вся доска изменилась.

В тетрисе вам не нужно сканировать всю доску после кусок упал. Вам просто нужно будет искать строки, которых касается кусок.

В играх типа «три в ряд», таких как Bejeweled, где вы меняете местами две соседние части за раз, вы сначала выполняете локализованный поиск в каждом направлении вокруг каждый квадрат, который изменился, чтобы увидеть, сработали ли какие-либо части. Затем, если они есть, игра сбросит на доску несколько новых случайных фигур. Теперь вы можете запустить тот же локализованный поиск по каждому измененному квадрату, но это может включать в себя множество операторов if и на самом деле может быть медленнее, чем просто сканирование всей доски от верхнего левого угла до нижнего правого. Это зависит от вашей реализации и потребует профилирования.

Как говорит Адриан, достаточно простого 2D-массива. Однако часто вы можете добавить «границу» из пикселей вокруг этого массива, чтобы упростить аспект поиска шаблонов. Без рамки у вас должны были бы быть операторы if вдоль квадратов краев, которые говорят: «Ну, если вы находитесь в верхнем ряду, не ищите вверх (и не уходите из массива)». С рамкой вокруг него вы можете безопасно просто искать во всем: сохраняя себя if операторов, сохраняя собственные ветвления, избавляя себя от проблем с конвейером, быстрее ища.

Джону: такие вещи действительно имеют значение в высокопроизводительных настройках, даже на современных машинах, если вы создаете алгоритм поиска, чтобы играть / решать игру. Если да, то вы хотите, чтобы ваша основная симуляция выполнялась как можно быстрее, чтобы искать как можно глубже за наименьшее количество циклов.

5
ответ дан 14 December 2019 в 08:56
поделиться

Regarding algorithms: It certainly depends on the game. For example for tetris, you'd only have to scan each row if it has the same color. I can't even think of something that would not equal the brute force approach in this case. But for most casual games brute force should be perfectly fine. Pattern recognition should be negligible in comparison to graphics and sound processing.

Regarding structures: A simple 2D-Array should suffice for representing the board.

2
ответ дан 14 December 2019 в 08:56
поделиться

Учитывая среднюю скорость компьютера в наши дни, если пользователь играет в игру в режиме реального времени, это, вероятно, не имеет значения (РЕДАКТИРОВАТЬ: только для очень маленьких игровых плат). Конечно, это будет зависеть от сложности игровой логики, но также и от того, насколько быстро код будет запускаться на целевой машине (т. Е. Это игра веб-страницы на JavaScript или приложение Windows, написанное на C ++).

Если это для чего-то вроде моделирования игровых стратегий, используйте более эффективный алгоритм.

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

0
ответ дан 14 December 2019 в 08:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: