Для завершения второго уровня сложности нам осталось добавить еще один метод в класс game. Это метод для раздачи карт в нижние семь стопок. После старта игры все карты загружаются в стопку с номером 0. Нам необходимо выполнить раздачу карт из стопки с номером0 в нижние семь стопок.
Схема раздачи будет следующей. Будем перебирать все нижние семь стопок и добавлять в них карты по очереди, начиная с самой левой с номером6. Каждая карта выбирается случайным образом из стопки с номером 0. После добавления в нижнюю стопку, карта будет удаляться из стопки с номером 0. При добавлении карт в одну из нижних стопок –будем размещать каждую следующую карту на 20пикселей ниже. Все карты, кроме самой верхней будут отображаться рубашкой вверх. В каждую последующую стопку будем добавлять карт на одну больше, чем в текущую. Получится так,что нижние стопки будут содержать:
стопка с номером 6: одну карту,
стопка с номером 7: две карты,
стопка с номером 8: три карты,
стопка с номером 9: четыре карты,
стопка с номером 10: пять карт,
стопка с номером 11: шесть карт,
стопка с номером 12: семь карт.
Добавим в класс game метод razdacha(), метод реализует описанную выше схему:
// Раздача карт в нижние семь стопок
private void razdacha()
{
//Начальная координата по X
int x = 30;
//Перебираем все стопки нижние семь стопок
for (int i=6;i<13;i++)
{
//Добавление карт в стопку
for (int j=6;j<=i;j++)
{
//Получаем номер случайной карты из верхней левой стопки
int rnd = (int)(Math.random()*stopki[0].size());
// Получаем эту карту
karta getKarta = stopki[0].get(rnd);
// Если карта не самая верхняя,
// то показываем ее рубашкой
if (j<i) getKarta.tipRubashka = true;
else getKarta.tipRubashka = false; // Если карта верхняя
// Координата по X
getKarta.x = x;
// Каждую следующую карту располагаем ниже на 20пикселей
getKarta.y = 130+stopki[i].size()*20;
// Добавляем карту в нижнюю стопку
stopki[i].add(getKarta);
// Удаляем карту из верхней левой стопки
stopki[0].remove(rnd);
}
//Увеличиваем координату по X
// (смещаемся правее)
x+=110;
}
}
Далее перейдем в метод start() и после метода load()–запишем вызов метода razdacha():
// Производим загрузку
load();
//Раздача карт в нижние семь стопок
razdacha();
//Признак конца игры - false
endGame = false;
Теперь при старте игры,после загрузки карт, произойдет раздача карт в нижние семь стопок. И в верхней левой стопке с номером 0–останется 24карты. Выполним запуск проекта (см. рис. 4).
Рис. 4
На этом реализация игры"Пасьянс-Косынка" для второго уровня сложности закончена. Полный программный код классаgameдля второго уровня сложности выглядит так:
// Для работы с событиями (мышь, таймер)
import java.awt.event.*;
// Для работы с окнами и кнопками
import javax.swing.*;
// Для работы с графикой
import java.awt.*;
// Для работы с картинками
import javax.imageio.*;
// Для работы с файлами
import java.io.*;
// Класс, реализующий логику игры - управление игрой