Поведение игры
Я делаю игру-головоломку с сортировкой.
Логика игры :
Есть 3 стопки с орехами и 1 дополнительная пустая стопка.
Чтобы выиграть, игроку необходимо положить на стейк все орехи одного цвета.
Правила игры:
Перемещать можно только верхний орех каждой стопки.
Орешок можно передвигать поверх другого ореха того же цвета.
/>Орех можно перемещать в пустой стопке.
Для моего проекта я назначил каждой стопке орехи одного цвета. Затем я случайным образом перетасовал их между всеми стопками. После некоторых тестов 4 из 12 уровней оказались неразрешимыми. Возможных ходов просто не было.
Текущий код:
Код: Выделить всё
private void ShuffleChips(List columns)
{
List allChipData = new List();
foreach (Column column in columns)
{
for (int i = 0; i < column.Chips.Count - 1; i++)
{
allChipData.Add(column.Chips[i].Data);
}
}
allChipData = allChipData.OrderBy(_ => Random.value).ToList();
int dataIdx = 0;
foreach (Column column in columns)
{
for (int i = 0; i < column.Chips.Count - 1; i++)
{
column.Chips[i].Assign(allChipData[dataIdx++]);
}
}
}
Итак, вопрос в перетасовке.
Какие алгоритмы можно использовать чтобы убедиться, что уровень разрешим на 100%?
Подробнее здесь: https://stackoverflow.com/questions/791 ... uzzle-game