Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2014, 01:15   #1
Punk1911
Пользователь
 
Регистрация: 18.04.2014
Сообщений: 10
По умолчанию Нерешаемые комбинации в игре "Пятнашки"

Здравствуйте!

Пишу игру Пятнашки для тренировки.
Комбинацию я делаю путем случайного перемешивания исходного массива чисел 0, 1, 2,.. 15.
Прочитал, что в игре половина комбинаций нерешаема.
Следовательно вопрос: как определить, что сгенерированная комбинация решаема и ее можно использовать?

Как я понял из Википедии, можно сделать так:
1) идти по полю игры слева направо и сверху вниз;
2) если число костяшки i+1 меньше i-ой костяшки, то Ki = 1. Иначе Ki = 0;
3) сложить все Ki и добавить число e, равное номеру ряда, где находится пустая клетка (нумерация рядов с 1);
4) если полученное число четное, то комбинация решаема.

Я прав?

Последний раз редактировалось Punk1911; 25.10.2014 в 01:19.
Punk1911 вне форума Ответить с цитированием
Старый 25.10.2014, 01:49   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

А что если взять исходное значение поля и генерировать комбинацию путем случайных, но корректных ходов? Всегда будет получаться играбельная комбинация.
Arigato вне форума Ответить с цитированием
Старый 25.10.2014, 04:42   #3
Punk1911
Пользователь
 
Регистрация: 18.04.2014
Сообщений: 10
По умолчанию

Как в таком случае определять, что ход корректный и не приведет к нерешаемой комбинации?
Punk1911 вне форума Ответить с цитированием
Старый 25.10.2014, 11:54   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

да просто делай, как в педивикии написано, и всё.
Изображения
Тип файла: jpg 2.jpg (40.2 Кб, 196 просмотров)
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 25.10.2014, 12:30   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Делал бы как Аригато предложил - обратные рандомные перемещения от собранной комбинации. Ходов 30 наверно хватило бы с избытком
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.10.2014, 13:26   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Цитата:
Сообщение от Punk1911 Посмотреть сообщение
Как в таком случае определять, что ход корректный и не приведет к нерешаемой комбинации?
Он не может привести к нерешаемой комбинации, потому как вы как бы играете, но наоборот, то есть всегда есть обратный путь. Ну а как проверить корректность хода - программно.
Arigato вне форума Ответить с цитированием
Старый 26.10.2014, 01:26   #7
Punk1911
Пользователь
 
Регистрация: 18.04.2014
Сообщений: 10
По умолчанию

Нашел решение. Код не мой.
Когда не знал, что у пятнашек есть нерешаемые комбинации, то подумал, что автор данного кода зря наворотил столько строк. Я ошибался!

Тут как раз происходит расстановка костяшек от базовой позиции (1,2,3,..15, "пустышка") путем произвольных ходов.
Всем спасибо!

Код на C#:
Shuffle.txt
Punk1911 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таблица рекорда для игры "Пятнашки" в Delphi Xario Помощь студентам 0 03.06.2014 14:18
Игра "Пятнашки" в стиле Metro Proga073 Фриланс 2 30.11.2012 21:43
Разработка сетевого приложения "Пятнашки" на Си для Linux dasha1711 Помощь студентам 0 23.11.2012 21:28
игра пятнашки и "собери картинку" tatiana74 Помощь студентам 5 22.02.2010 14:07
игра "Пятнашки" на Visual C++ с использованием OpenGL Mr.Happy Фриланс 3 16.12.2009 16:19