Для выполнения данной работы нам необходимо создать несколько классов, описывающих объекты реального мира: карта и колода карт.
Начнем с карты. Карта имеет масть и достоинство. Карта может лежать рубашкой вверх (не видима) или картинкой вверх (видима). С картой ассоциируется изображение (файл *.png), для отображения карты на форме.
Создайте в папке с проектом новую папку с именем «img» и скопируйте в нее содержимое папки “img” преподавателя.
Щелкните правой клавишей мыши на названии пакета cardgame в окне проектов (слева вверху).В появившемся контекстном меню выберите
Создать → Класс Java... Укажите имя класса BadCardException. Сделайте у него следующее содержимое:
public class BadCardException extends Exception {
public BadCardException() {
super();
}
public BadCardException(String msg) {
super(msg);
}
}
Щелкните правой клавишей мыши на названии пакета cardgame в окне проектов (слева вверху).В появившемся контекстном меню выберите
Создать → Класс Java... Укажите имя класса Card. Добавьте в него следующее содержимое:
//введем перечислимые типы для масти и достоинства
public static enum TMast { Diamonds, Harts, Spades, Clubs};
//обратите внимание: перечисление в Java это класс и мы можем
//добавлять в него дополнительные переменные и конструкотры
public static enum TRang {
Six(6), Seven(7), Eight(8), Nine(9), Ten(10), Jack(11), Queen(12), King(13), Ace(14);
//переменная для сравнения карт, чем она больше, тем
//карта старше
private int weight;
public int getWeight() { return weight;}
//конструктор
TRang(int pw){ weight = pw;}
};
////////////////////////////////////////////////////
// переменные уровня класса
///////////////////////////////////////////////////
//масть и достоинство нашей карты
private TMast mast;
private TRang rang;
//рубашкой вверх или вниз
private boolean isVisible;
//номер изображения в массиве изображений (см ниже)
private int indCardPicArray;
//массив с названиями файлов-картинок для карт
//обратите внимание: имя файла состоит
// из достоинства (как в перечислении)
// и масти (тоже как в перечислении)
public static String[] cardPicArray = {
"./img/Six_Diamonds.png",
"./img/Seven_Diamonds.png",
"./img/Eight_Diamonds.png",
"./img/Nine_Diamonds.png",
"./img/Ten_Diamonds.png",
"./img/Jack_Diamonds.png",
"./img/Queen_Diamonds.png",
"./img/King_Diamonds.png",
"./img/Ace_Diamonds.png",
"./img/Six_Harts.png",
"./img/Seven_Harts.png",
"./img/Eight_Harts.png",
"./img/Nine_Harts.png",
"./img/Ten_Harts.png",
"./img/Jack_Harts.png",
"./img/Queen_Harts.png",
"./img/King_Harts.png",
"./img/Ace_Harts.png",
"./img/Six_Spades.png",
"./img/Seven_Spades.png",
"./img/Eight_Spades.png",
"./img/Nine_Spades.png",
"./img/Ten_Spades.png",
"./img/Jack_Spades.png",
"./img/Queen_Spades.png",
"./img/King_Spades.png",
"./img/Ace_Spades.png",
"./img/Six_Clubs.png",
"./img/Seven_Clubs.png",
"./img/Eight_Clubs.png",
"./img/Nine_Clubs.png",
"./img/Ten_Clubs.png",
"./img/Jack_Clubs.png",
"./img/Queen_Clubs.png",
"./img/King_Clubs.png",
"./img/Ace_Clubs.png",
"./img/rubawka.png", //рубашка
"./img/null.png" //пустое место
};
//для удобства добавим две константы:
//индекс имени файла изображения рубашки
public static final int RUBAWKA = 36;
//индекс имени файла изображения пустого места
public static final int NULL = 37;
///////////////////////////////////////////////////////
// методы
//////////////////////////////////////////////////
//конструктор
public Card(TMast pm, TRang pr) throws BadCardException{
mast = pm;
rang = pr;
isVisible = false;
//метод getIndCardPicArray() описан ниже
indCardPicArray = getIndCardPicArray(pm, pr);
//если для карты нет изображения, вызываем исключение
if(indCardPicArray == -1) throw new BadCardException("Карта не существует!");
}
//возвращает значение свойства видимости
public boolean isIsVisible() {return isVisible;}
}
//устанавливает новое значение свойства видимости
public void setIsVisible(boolean isVisible) {
this.isVisible = isVisible;
}
//возвращает масть карты
public TMast getMast() {
return mast;
}
//возвращает достоинство карты
public TRang getRang() {
return rang;
}
//возвращает имя файла-картинки карты
//если карта не видима, то файла рубашки
public String getCardPic()
{
if(isVisible)
return cardPicArray[indCardPicArray];
else
return cardPicArray[Card.RUBAWKA]; //рубашка
}
//метод, который по масти и достоинству карты
//возвращает индекс имени файла-картинки
//из массива cardPicArray
private int getIndCardPicArray(TMast pm, TRang pr){
//написать самим:
//по масти и достоинству формируем строку
//с именем файла-картинки;
//ищем эту строку в массиве cardPicArray
//если нашли, возвращаем найденный индекс
//если нет, возвращаем -1.
}
//сравнивает карту с другой картой по масти и достоинству
public boolean equals(Card pCard){
if(pCard.rang == rang && pCard.mast == mast)
return true;
else
return false;
}
//сравнивает карту с другой картой только по достоинству
//т.к. в нашей игре масти не учитываются
public boolean equalsInGame(Card pCard){
if(pCard.rang == rang)
return true;
else
return false;
}
//метод определяет, какая карта старше, а значит бьет другую
public boolean isMoreInGame(Card pCard){
//написать самим, но учитывать, что:
//сравнить величину карты можно через rang.getWeight()
//для этого мы и ввели переменную в перечисление Trang,
//чтобы иметь числовую характеристику достоинства карты
//не забудьте: 6 бьет туза
}
//отображает карту в указанном в параметре ЭУ на форме
public void show(JLabel lb){
lb.setIcon(new ImageIcon(getCardPic()));
lb.invalidate();
}