Условие победы алгоритма Trax

Я пытался реализовать игру Trax на C ++.
Для тех, кто не знает: http://www.traxgame.com/about_rules.php

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

Моя первая попытка решения включала путь ко многим if-условиям. Это просто невозможно.
Поэтому мне нужно реализовать правильный алгоритм ..

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

Привет, MC

0

Решение

Я могу предложить вам использовать рекурсию. Я могу неправильно понять вашу, но в любом случае:

bool isWin(int i, int j, int length) {
if (length >= 8)
return true;

if (canMoveTo(i + 1, j)) {
if (isWin(i + 1, j, length + 1))
return true;
}
if (canMoveTo(i - 1, j)) {
if (isWin(i - 1, j, length + 1))
return true;
}
if (canMoveTo(i, j + 1)) {
if (isWin(i, j + 1, length + 1))
return true;
}
if (canMoveTo(i, j - 1)) {
if (isWin(i, j - 1, length + 1))
return true;
}
return false;
}

bool isWin(int i, int j) {
int length = 0;
isWin(i, j, length);
}

..

main() {
for (int i = 0; i < HEIGHT; ++i) {
for (int j = 0; j < WIDTH; ++j) {
if (isTilePresent(i, j)) {
if (isWin(i, j)) {
if (isRed(i, j))
std::cout << "Red is won!" << std::endl;
else
std::cout << "White is won!" << std::endl;
}
}
}
}
}
0

Другие решения

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

  1. создавать карты тайлов

    Наименьшее разрешение, способное представлять все плитки, как это

    Карта тайлов Trax

    Я думаю, что может быть также 3×3 разрешение будет выполнимо. Вам нужно 4 цвета:

    • Серый — стена
    • Красный — путь плр1
    • Белый — путь плр2
    • Пурпурный — путь плр1, плр2
  2. после каждого хода

    создать растровое изображение из тайлов и использовать их A * начать с последнего отредактированного тайла (и может быть также 4 соседями) и проложить путь для каждого игрока / начальной точки пути (желтый). Когда A * будет сделано, проанализируйте данные карты (оранжевый), чтобы найти наибольшее число на карте (зеленая средняя точка). Это точка, где заполнение A * прекращается (его не нужно искать). Затем восстановите кратчайший путь назад к начальной точке (коричневая), установив использованные точки карты как непригодные. Затем попробуйте восстановить путь еще раз, если вы можете, то замкнутый контур присутствует

    A *

  3. при реконструкции пути

    вычислить ограничивающую рамку использованных точек, так что вам понадобится min,max координаты x, y x0,x1,y0,y1 (в плитках). Из этого, если цикл найден, вы знаете:

    columns = x1-x0+1
    rows = y1-y0+1
    

    таким образом, условие выигрыша только одно if из этого

Надеюсь, это поможет, я разработал эту технику для поиска / подсчета пути с замкнутым контуром в моем Каркассон игра

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector