- •Объектно-ориентированное программирование
- •Шаг 4. Настройка надписи.
- •Шаг 5. Настройка кнопок.
- •Шаг 6. Запуск приложения.
- •Шаг 7. Обработка событий цифровых кнопок.
- •Шаг 8. Обработка арифметических операций.
- •Шаг 9. Обработка нажатий на остальные кнопки.
- •Лабораторная работа 2. Создание классов. Конструкторы.
- •Лабораторная работа 3. Создание классов. Наследование и агрегация.
- •Лабораторная работа 4. Моделирование карточной игры на компьютере.
- •Задание.
- •Выполнение.
- •Создание проекта.
- •Создание формы.
- •Размещение элементов управления (эу) на форме.
- •Создание класса карты.
- •Класс Deck.
- •Класс Game
- •Привязка к пользовательскому интерфейсу
- •Лабораторная работа 5. Лабораторная работа Создание игры «Тетрис».
- •Создание панели для отображения действий игры.
- •Лабораторная работа 6. Списки и динамические массивы
Класс 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();
}
Класс 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;
}