Пятнашки с решением (7.7)

Сообщество - Игры

12
Анализируем алгоритм пятнашек

Дизайн игры взят из подборки Ёпрста. Начальная расстановка делается псевдослучайным перемешиванием, так что решение всегда существует (см комм. 17 к //infostart.ru/projects/4970/ )

В алгоритме имеется глюк: кнопка Решить иногда срабатывает не с первого раза.

Буду благодарен за усовершенствование алгоритма.

Глюк устранен благодаря подсказке Ёпрста Smile

12

Скачать файлы

Наименование Файл Версия Размер
Игра
.1248161517 581,50Kb
30.10.09
106
.1248161517 581,50Kb 106 Скачать

См. также

Комментарии
Избранное Подписка Сортировка: Древо
1. boy13 167 21.07.09 11:38 Сейчас в теме
можно было бы еще двигать шашки нажимая на них самих... :)
2. Арчибальд 2705 21.07.09 11:44 Сейчас в теме
(1) В той подборке, которую я упомянул, были и такие. Но меня картинки интересовали.
3. Ёпрст 1027 21.07.09 12:35 Сейчас в теме
(2) Ну и ? Клик на картинке легко ловится...
:)
5. Арчибальд 2705 21.07.09 13:12 Сейчас в теме
(3) Это ты знаешь. И я где-то видел, но забыл где.
(4) Есть такой глюк. Надоело ловить его. А на пошаговом решении не затыкается...
6. Ёпрст 1027 21.07.09 13:22 Сейчас в теме
(5) смотри у меня в профиле покерок или грибочки - там реализовано :)...
всё штатно.
8. Арчибальд 2705 21.07.09 13:43 Сейчас в теме
(6) Во-во. В грибах я его и видел...
4. Ёпрст 1027 21.07.09 12:38 Сейчас в теме
Решить работает с 2-3 раза :))..
А так неплохо..
7. Ёпрст 1027 21.07.09 13:40 Сейчас в теме
Да... посмотрел код, так и не вкурил, чего ты там не мог побороть глюк ???
:))

Процедура Решить()
....Для Ф = 1 По 9 цикл
..........Если Место(Ф)<>Ф Тогда
................Сообщить("Фишка "+Ф);
................СледШаг(Ф);
................Решить();
................Прервать;
..........КонецЕсли;
....КонецЦикла;

и усё работает...
Арчибальд; +1 Ответить
9. Арчибальд 2705 21.07.09 13:48 Сейчас в теме
10. Арчибальд 2705 21.07.09 14:03 Сейчас в теме
(7) А вот так - да
//__________________________________________________________­___________________
Функция Шаг(номХода)
Если номХода < 10 Тогда
Возврат номХода;
ИначеЕсли номХода = 10 Тогда
Возврат 13;
ИначеЕсли номХода = 11 Тогда
Возврат 10;
ИначеЕсли номХода = 12 Тогда
Возврат 14;
ИначеЕсли номХода = 13 Тогда
Возврат 11;
КонецЕсли;
КонецФункции
//__________________________________________________________­___________________
Процедура Решить()
Для Ф = 1 По 13 цикл
Если Место(Шаг(Ф))<>Шаг(Ф) Тогда
Сообщить("Фишка "+Шаг(Ф));
СледШаг(Шаг(Ф));
Решить();
Прервать;
КонецЕсли;
КонецЦикла;
Если Место(16) = 15 Тогда Влево(); ИначеЕсли Место(16) = 12 Тогда Вверх(); КонецЕсли;
КонецПроцедуры
11. Ёпрст 1027 21.07.09 14:06 Сейчас в теме
(10) ну. у меня и как в (7) работает.. я дальше даже не смотрел..
12. Ёпрст 1027 21.07.09 14:06 Сейчас в теме
+11 И это...ниже код там просто не писал.. он там так и остался..
13. Арчибальд 2705 21.07.09 14:13 Сейчас в теме
(12) Кок в (7) работает, если затык до 9.
За подсказку по-любому спасибо.
14. Tatitutu 3721 16.12.09 16:30 Сейчас в теме
15. inkko 25.12.10 20:29 Сейчас в теме
При перемещении младших фишек из неродного Столба и не с нижнего Ряда создаёт дополнительное движение Вниз() при достижении фишкой родного для неё Столба, но недостижении родного Ряда.
Например, Фишка1 движется из ячейки 11. Когда дойдет до Столба[1] Ряда[3] Алгоритм опускает её на ячейку 13. После этого нормально поднимает по рдномк Столбу. Куча лишних перемещений создаётся :(
16. Арчибальд 2705 28.12.10 09:28 Сейчас в теме
(15) Возможно, не помню уже. Не хотелось нагромождать проверки всяческие...
Оставьте свое сообщение