В отличие от игры "Морской бой", в игре"Пасьянс-Косынка"компьютер не оказывает сопротивления игроку, а только предоставляет удобства при раскладывании пасьянса и контролирует игрока при нарушении правил игры. В игре "Пасьянс-Косынка" не будет сложных алгоритмов, но будет много сложностей, связанных с контролем действий пользователя.
На игровом поле представлены тринадцать стопок карт.Количество карт в каждой стопке может изменяться в процессе игры, поэтому карты каждой стопки удобно хранить в списке значений. Так как стопок у нас тринадцать,то понадобится массив –каждый элемент,которого будет списком значений.
Давайте разберемся с алгоритмом перемешивания карт. При каждой раздаче –во все стопки должны попадать карты случайным образом. На самом деле все реализуется довольно просто!
Сначала загружаем все 52карты в один список значений, который отвечает за верхнюю левую стопку карт. Затем получаем случайный элемент из этого списка. Полученный элемент добавляем во второй список. Удаляем элемент из первого списка. Так продолжаем нужное количество раз. Если название первого списка lst1, а название второго списка lst2, то программный код будет выглядеть так:
//Получаем количество элементов в первом списке
int kol = lst1.size();
// Получаем случайный номер элемента в списке
int nom = (int)(Math.random()*kol);
// Помещаем случайно выбранный элемент во второй список,
// получая его из первого
lst2.add(lst1.get(nom));
// Удаляем элемент из первого списка
lst1.remove(nom);
При таком подходе размер первого списка будет с каждым разом уменьшаться на единицу, а размер второго увеличиваться на единицу. Процесс напоминает вынимание случайной карты из колоды и помещение ее во вторую колоду.Карты второй колоды при этом будут расположены случайным образом.Рассмотренный программный код осуществляет перенос одного случайного значения. Если запустить такой процесс в цикле, то можно заполнить новый список любым количеством случайных карт. Методsize() возвращает количество элементов в списке, и при изменении количества всегда будет возвращать текущее количество. Методremove() удаляет элемент из списка, уменьшая количество элементов на единицу. После выполнения метода remove()нумерация элементов в списке восстанавливается автоматически. Имеется в виду, что номера элементов всегда идут по порядку, начиная с нуля и увеличиваясь на единицу.