Теперь создадим класс, описывающий игру. Этот класс будет содержать все данные по игре и методы для выполнения игровых действий.
Щелкните правой клавишей мыши на названии пакета cardgame в окне проектов (слева вверху).В появившемся контекстном меню выберите
Создать → Класс Java... Укажите имя класса Game. Добавьте в него следующее содержимое:
// «главная» колода. В ней будут сформированы все 36 карт,
//из нее будут раздаваться карты игрокам
//в конце игры все карты будут в нее возвращены.
//На игровом поле не отображается
private Deck mainDeck;
//колоды игроков
private Deck player1;
private Deck player2;
//колоды на игровом поле
private Deck desktop1;
private Deck desktop2;
//ЭУ игроков и на игровом поле для привязки к форме
private JLabel Player1Label;
private JLabel Player2Label;
private JLabel Desktop1Label;
private JLabel Desktop2Label;
//конструктор
public Game(JLabel p1, JLabel p2, JLabel d1, JLabel d2){
//создаем колоды игроков и игрового поля
player1 = new Deck();
player2 = new Deck();
desktop1 = new Deck();
desktop2 = new Deck();
// привязка класса к форме
Player1Label = p1;
Player2Label = p2;
Desktop1Label = d1;
Desktop2Label = d2;
//создаем главную колоду карт
|
|
mainDeck = new Deck();
for(Card.TMast m: Card.TMast.values()) {
for(Card.TRang r: Card.TRang.values())
try {
mainDeck.putInTail(new Card(m, r));
} catch (BadCardException ex) {
JoptionPane.showMessageDialog(null,ex);
System.exit(-1);
}
}
//перемешиваем
mainDeck.mix();
}
//для удобства создадим метод обновления игрового поля
public void updateView(){
player1.show(Player1Label);
player2.show(Player2Label);
desktop1.show(Desktop1Label);
desktop2.show(Desktop2Label);
}
//новая игра
public void newGame(){
//перемешиваем главную колоду
mainDeck.mix();
//раздаем игрокам по 18 карт
while (mainDeck.getCount()>0) {
player1.putInTail(mainDeck.take());
player2.putInTail(mainDeck.take());
}
//обновляем вид
updateView();
}
//завершение игры
public void gameOver(){
//возвращаем все карты в главную колоду
player1.moveToOtherDeck(mainDeck);
player2.moveToOtherDeck(mainDeck);
desktop1.moveToOtherDeck(mainDeck);
desktop2.moveToOtherDeck(mainDeck);
//обновляем вид
updateView();
}
//получение количества карт в колодах игроков
public int getCountPlayer1(){return player1.getCount();}
public int getCountPlayer2(){return player2.getCount();}
//делаем ход — шаг 1
public void stepOne(){
//берем по карте с каждой колоды игроков
//делаем их видимыми
//кладем на игровой стол в колоды desktop1 и desktop2
//обновляем вид
}
//делаем ход — шаг 2
//здесь мы проверяем карты на столе
//если карты равны, то возникает «спор» и метод возвращает true
//если одна карта больше, все содержимое колод на столе переходит
//выигрывавшему игроку и метод возвращает false
public boolean stepTwo(){
//берем по верхней карте с колод на столе
//если карты равны, то
//возвращаем их на колоды на столе
//return true;
//делаем карты не видимыми
//если первая карта больше
//возвращаем их на колоды на столе
//карты из обеих колод на столе переносим первому игр.
//иначе
//возвращаем их на колоды на столе
//карты из обеих колод на столе переносим второму игр.
|
|
//обновляем вид
//return false;
}
//возвращает true, если возникла спорная ситуация
public boolean isContest(){
//берем по верхней карте с колод на столе
//если карты равны, то
//возвращаем их на колоды на столе
//return true;
//иначе
//возвращаем их на колоды на столе
//return false;
}