Можно и так.
Чтобы комбинация была разрешима, то надо установить фишки в решенное состояние, а затем случайным образом перемешать, не вынимая из “коробки”.
Если взять натуральную игру, высыпать фишки в ладони, перемешать их, вставить в коробку. Если комбинация неразрешимая, то берем “6” превращаем ее в “9”, устанавливаем где была “6”, то берем “9” а ее превращаем ее в “6”, устанавливаем где была “9”. То есть, эти две фишки переворачиваем на 180 градусов, “вверх ногами”. Тогда задача решится.
вспонилось детское “тяжело детство-чугунные игрушки”, а так, мы-дизайнеры делаем металл градиентом
Как-то некрасиво это работает: фишка сначала исчезает в одном месте, затем появляется в другом. Надо сделать анимацию, чтобы перемещение осуществлялось в 2-4 этапа (кадра).
Пятнашки собираются либо в правильную последовательность, либо в последовательность с одной переставленной парой соседних фишек - например поменяны местами 14 и 15. Алгоритм проверки исходной комбинации на собираемость встречал в какой-то детской книге с математическими головоломками.
Оставлю для следующей версии, туда добавлю ещё счётчик ходов.
Да там всё, как два пальца, считаешь количество “инверсий” (это когда надо поменять местами фишки, и смотришь на его чётность. См., подробнее - Про решаемость пятнашек / Хабр
имеет решение, если число пар чисел, в которых большее число предшествует меньшему, четное
Вставил смену тем.
С картинками тоже темы интересные.
Ещё два интересных направления это узоры
и краткие тексты типа “МАМА ДОМА МЫЛА ПОЛ”.
Сделал функцию для перемешивания на основе мысли: “Да, изначально у нас игра будет инициализироваться как решенная, а перед началом игры мы будем перемешивать плашки с помощью случайных ходов.” из вот отсюда:
void peremechka(){
int k;int ran;int st=0;
while(st<50){
for( k=0;k<16;k++){//
if(massiv_[k%4][k/4]==16){break;}
}
ran=random(0,4);
if(ran==0&&k<15){massiv_[k%4][k/4]=massiv_[(k+1)%4][(k+1)/4];massiv_[(k+1)%4][(k+1)/4]=16;}
if(ran==1&&k>0){massiv_[k%4][k/4]=massiv_[(k-1)%4][(k-1)/4];massiv_[(k-1)%4][(k-1)/4]=16;}
if(ran==2&&k<12){massiv_[k%4][k/4]=massiv_[(k+4)%4][(k+4)/4];massiv_[(k+4)%4][(k+4)/4]=16;}
if(ran==3&&k>3){massiv_[k%4][k/4]=massiv_[(k-4)%4][(k-4)/4];massiv_[(k-4)%4][(k-4)/4]=16;}
st++;
}
}
Направлений тематических по сложности и цели пока 5:
Еще красиво делать перемешивание анимированным.
Например добавить кнопку “Перемешать” и игра начинает делать случайные ходы на доске, до тех пор, пока оператор на нажмет кнопу еще раз.
Вместе с анимацией движения фишки и числом ходов не более 5 в секунду, чтобы видеть, будет очень занимательно-залипательно! На мой вкус! На и автоматическое решение на медленной скорости - 1 ход в секунду, тоже нужно. Удачи!
Добавлю в новой версии так как переделывать код надо будет серьёзно.
Добавил перемешивание в с исходном варианте.
классная работа
А есть пятнашки для дальтоников?
Я бы еще, пожалуй, ввел мод для блонди - любой результат считается сошедшимся. Ну, и чтобы цвет был - цветом года by Pantone. Безо всяких там прошлогодних коллекций.