5 / 5 / 3
Регистрация: 05.03.2013
Сообщений: 220
|
||||||
1 | ||||||
Как перемешивать игру "Пятнашки"?26.08.2014, 23:48. Показов 6585. Ответов 17
Метки нет (Все метки)
Добрый день всем.
подскажите пожалуйста как перемешивать пятнашки
но этот код перемешивает и почему-то накладывает кнопку на кнопку. подскажите где нужно исправить?
0
|
26.08.2014, 23:48 | |
Ответы с готовыми решениями:
17
Как написать игру "Пятнашки" Написать игру Пятнашки Как создать игру "пятнашки" Реализовать игру в пятнашки с консольным текстовым интерфейсом |
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
|
|
27.08.2014, 01:02 | 2 |
Исправить нужно в подходе. Происходит то, о чем я и говорил: логика и интерфейс перепутались.
Итак, у тебя есть двумерный массив 4×4 (хотя можно обойтись одномерным, ну да ладно). Массив заполнен числами от 0 до 15. Чтобы его перемешать, нужно несколько раз, скажем 1000, менять местами случайные элементы массива. После перемешивания проходишься по всему массиву и соответственно расставляешь кнопки свои. Код сейчас не дам, т.к. пишу с телефона
2
|
Заблокирован
|
||||||
27.08.2014, 01:18 | 3 | |||||
mixon-21, использовать рандом без повторений?
Код странный, зачем вам столько вложенных циклов?
1
|
5 / 5 / 3
Регистрация: 05.03.2013
Сообщений: 220
|
|
27.08.2014, 12:08 [ТС] | 4 |
0
|
|
27.08.2014, 12:55
#5
|
Не по теме: mixon-21, интересно, почему вы мой ответ проигнорировали?
0
|
5 / 5 / 3
Регистрация: 05.03.2013
Сообщений: 220
|
|
27.08.2014, 12:59 [ТС] | 6 |
0
|
2509 / 1130 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
|
|
27.08.2014, 13:04 | 7 |
ещё, буду занудой. тут важно учесть, что не все случайные расклады имеют решение.
На форуме был алгоритм проверки - имеет конкретный расклад решение или нет. Разумеется, варианты с нерешаемым расположением нужно отбрасывать! Добавлено через 3 минуты p.s. я бы взял простой одномерный массив на 16 элементов, заполнил его числами от нуля (это пусто) до 15. один раз правильно перемешал. проверил на сходимость (повторил перемешивание, если расклад плохой). перевёл массив в кнопки. вот и всё.
0
|
Заблокирован
|
||||||
27.08.2014, 13:12 | 8 | |||||
mixon-21, так задавайте вопросы Пока прокомментировал:
Sergio Leone, именно это я и сделал
1
|
2509 / 1130 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
|
|||||||||||
27.08.2014, 13:26 | 9 | ||||||||||
зачем Вы меня и себя обманываете?
вы сделали НЕ ТАК.
я же предлагал такое заполнение:
1
|
Заблокирован
|
|
27.08.2014, 13:35 | 10 |
Sergio Leone, где обман? Или вы о том, что я взял список, а не массив?
Или я вас не так понял, и ключевой упор был именно на перемешивании, я взял чуть шире - подход к размещению. ИМХО - генерирование или перемешивание не так важно, это детали. Я использовал то, что было проще.
0
|
2509 / 1130 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
|
|
27.08.2014, 13:41 | 11 |
вставьте в ваш код переменную, которую наращивайте при каждой генерации.
А потом выдайте. Я Вам гарантирую, что Вам потребуется несколько десятков (явно больше 16), если не сотен циклов для генерации 16 значений. (если смотреть в динамике, то чем больше уже чисел в массиве, тем больше нужно циклов. особенно, когда мы уже 15 чисел запомнили. Получаем очередное число - а оно с вероятностью 15/16 уже есть в списке. Повторяем генерацию. И так многократно, пока не выпадет единственное отсутствующее число. Разве это не очевидно?!) Впрочем, Вы правы, сейчас многие программы пишут так, как удобнее программисту, а не так, как быстрее или эффективнее.
0
|
5 / 5 / 3
Регистрация: 05.03.2013
Сообщений: 220
|
|
27.08.2014, 17:22 [ТС] | 12 |
Подскажите еще пожалуста как написать функцию которая проверяет выиграшную комбинацию.
0
|
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
|
||||||
27.08.2014, 17:59 | 13 | |||||
Выигрышная комбинация будет только тогда, когда каждый элемент массива будет на своём месте, а последним элементом будет 0. Проверяется это так:
1
|
5 / 5 / 3
Регистрация: 05.03.2013
Сообщений: 220
|
||||||
27.08.2014, 18:59 [ТС] | 14 | |||||
Что-то не получается.
незнаю куда вставить эу функцию? bool IsWin(int[,] ar) вот код
0
|
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
|
|
27.08.2014, 19:31 | 15 |
А это к тому, что логику нужно отделять от интерфейса. В том виде, в каком это сейчас у тебя есть, искать решение слишком бессмысленная задача. Хотя и решаемая
0
|
5 / 5 / 3
Регистрация: 05.03.2013
Сообщений: 220
|
|
27.08.2014, 19:51 [ТС] | 16 |
в принципе я понял что эту функцию нужно вставить в private void temp_Click( object sender, EventArgs e )
но куда деть масив ar[,]? Добавлено через 4 минуты Куда вставить функцию я разобрался в private void temp_Click( object sender, EventArgs e ) но я незнаю что делать с масивом int[,] ar?
0
|
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
|
||||||
28.08.2014, 12:36 | 17 | |||||
Если кому-то интересно, то вот код, который генерирует поле указанного размера с гарантированным решением за O(2n), где за первый обход генерируется выигрышная комбинация (тайлы по порядку), а за второй поле перемешивается. Пустое поле обозначено нулем:
1
|
Заблокирован
|
||||||
28.08.2014, 15:30 | 18 | |||||
Сообщение было отмечено mixon-21 как решение
Решение
mixon-21, как вариант:
1
|
28.08.2014, 15:30 | |
28.08.2014, 15:30 | |
Помогаю со студенческими работами здесь
18
Добавить использование шаблонов проектирования в игру "Пятнашки" Как лучше всего реализовать игру пятнашки? Пишу игру пятнашки Создайте игру «Пятнашки» Подправьте игру пятнашки реализовать игру пятнашки Написать игру пятнашки на qt Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |