Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП Лабораторный практикум.doc
Скачиваний:
45
Добавлен:
07.06.2015
Размер:
505.34 Кб
Скачать
      1. Класс Deck.

Далее создаем класс «Колода карт». Под колодой будем понимать некоторую стопку карт, содержащую от 0 до 36 карт. По одной такой колоде будет у каждого игрока и две на столе, куда игроки будут выкладывать карты для сравнения.

Щелкните правой клавишей мыши на названии пакетаcardgameв окне проектов (слева вверху).В появившемся контекстном меню выберитеСоздать → Класс Java... Укажите имя классаDeck. Добавьте в него следующее содержимое:

//колода это динамический массив из объектов типа Card

private ArrayList<Card> deck;

//конструктор

public Deck(){

deck = new ArrayList<>(36);//указываем емкость ==36

}

//возвращает количество карт в колоде

public int getCount(){ return deck.size();}

//определяет: есть ли такая же карта в колоде

public boolean isPresent(Card pCard){

for(Card x: deck)

if(x.equals(pCard))

return true;

return false;

}

//добавляем новую карту на верх колоды

public void putInTop(Card pCard){

deck.add(0, pCard);

}

//добавляем новую карту в конец колоды

public void putInTail(Card pCard) {

deck.add(pCard);

}

//берем карту сверху

//если попытаемся взять карту из пустой колоды,

//метод вернет null

public Card take(){

Card card;

try{

card = deck.remove(0);

}catch(IndexOutOfBoundsException e){

return null;

}

return card;

}

//переносим все карты из нашей колоды в другую,

//которая указана в параметре

public void moveToOtherDeck(Deck otherDeck){

for (Card x: deck) {

otherDeck.putInTail(x);

}

deck.clear();

}

//очищаем колоду

public void clear(){ deck.clear();}

//перетасовка калоды

public void mix(){

//написать самим по следующему алгоритму:

//берем два случайных числа в диапазоне от 0 до количества

//карт в колоде, это будут индексы карт

//и меняем эти карты местами

//повторяем эту операцию 300 раз

}

//отображение колоды на форме в указанном ЭУ

public void show(JLabel lb){

if(deck.isEmpty()){

lb.setIcon(new ImageIcon(Card.cardPicArray[Card.NULL]));

lb.invalidate();

return;

}

Card topCard = deck.get(0);

lb.setIcon(new ImageIcon(topCard.getCardPic()));

lb.invalidate();

}

      1. Класс Game

Теперь создадим класс, описывающий игру. Этот класс будет содержать все данные по игре и методы для выполнения игровых действий.

Щелкните правой клавишей мыши на названии пакета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;

}