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

Теперь остается все соединить вместе.

В классе DesktopFrame создаем переменную уровня класса типа Game:

Game game;

Далее, в конструктор класса DesktopFrame добавьте (в конец) следующий код:

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

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

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

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

Этот код присваивает местам для карт на форме изображение красного креста на белом фоне.

Затем там же создаем объект game:

game = new Game(lbP1, lbP2, lbD1, lbD2);

Создаем обработчик выбора пункта меню «Новая игра». Для этого выберите этот пункт меню, нажмите на него правой клавишей мыши и в появившемся контекстном меню выберите События->Action->ActionPerformed.

В создавшемся методе-обработчике напишите:

//вызываем метод newGame

game.newGame();

//Показываем количество карт у игроков

lbCount1.setText(String.valueOf(game.getCountPlayer1()));

lbCount2.setText(String.valueOf(game.getCountPlayer2()));

//делаем кнопку «Сделать ход» активной

btStep1.setEnabled(true);

//а кнопку «ОК» неактивной

btStep2.setEnabled(false);

Аналогично создаем обработчики событий ActionPerformed (нажатие на кнопку) для кнопок btStep1 и btStep2.

В обработчике для кнопки btStep1 добавляем:

//вызываем метод stepOne объекта game

game.stepOne();

//обновляем информацию о количестве карт у пользователей

lbCount1.setText(String.valueOf(game.getCountPlayer1()));

lbCount2.setText(String.valueOf(game.getCountPlayer2()));

//делаем кнопку «Сделать ход» неактивной

btStep1.setEnabled(false);

//а кнопку «ОК» активной

btStep2.setEnabled(true);

//если возник спор, текст на кнопке btStep2 изменяем на «Спор»

if(game.isContest()) btStep2.setText("Спор");

Обработчик нажатия на кнопку btStep2, делаем самостоятельно.

В нем должно быть следующее:

  • вызываем метод game.stepTwo();

  • если спора нет, обновляем информацию о количестве карт у игроков;

  • если у кого-то из игроков закончились карты, объявляем конец игры для этого вводим следующий код:

JOptionPane.showMessageDialog(rootPane, "Игра окончена");

game.gameOver();

btStep1.setEnabled(false);

btStep2.setEnabled(false);

  • текст на кнопке btStep2 изменяем на «ОК»

  • делаем активными/неактивными кнопки как до начала хода

А что делать, если возник спор? Подумайте сами...

  1. Лабораторная работа 5. Лабораторная работа Создание игры «Тетрис».

      1. Задание.

Написать программу, реализующую игру «Тетрис».

      1. Правила игры.

Игра представляет собой «стакан», в который падают различные фигуры. Если упавшие фигуры составляют сплошную строку, эта строка удаляется. Пользователь с помощью клавиш может двигать фигуры влево, вправо и вращать.

      1. Выполнение.

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

Соответственно, первая часть данной работы будет заключаться в создании пользовательского интерфейса. Вторая часть — в разработке классов для реализации игры «Тетрис». В третьей части попробуем собрать все вместе.

      1. Создание пользовательского интерфейса.

В данной работе будем создавать интерфейс пользователя «вручную», т. е. без использования конструктора форм.

Создайте новый проект: простое приложение Java. Имя главного класса назовите Tetris пакет tetris.

После создания проекта необходимо сделать наш главный класс «наследником» класса JFrame, который описывает окно программы.

public class Tetris extends JFrame {

}

Таким образом наше консольное приложение превращается в программу с графическим интерфейсом.

Добавим в класс переменную уровня класса типа javax.swing.Timerс именемtimer.

Далее создадим конструктор главного класса со строковым параметром:

Tetris(String s) {

super(s);

timer = new Timer(400, null); //создаем таймер

//сюда в будущем будет добавлен код,

//добавляющий элементы управления

setSize(300, 300);

setVisible(true);

}

И изменим метод main():

public static void main(String[] args) {

try {

UIManager.setLookAndFeel(

UIManager.getSystemLookAndFeelClassName());

} catch (Exception e) {}

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

JFrame frame = new Tetris("Тетрис");

frame.setDefaultCloseOperation(EXIT_ON_CLOSE);

}

});

}

Запустите программу и посмотрите, что у вас получилось.

Следующим шагом добавим меню. Меню будет состоять из меню «Файл» и иметь пункты меню «Новая игра» и «Выход».

Для этого:

//добавляем объект «строка меню»,

JMenuBar mbar = new JmenuBar();

//создаем меню «Файл»

JMenu mm = new Jmenu("Файл");

//создаем пункты меню

JMenuItem mNewGame = new JMenuItem("Новая игра");

JMenuItem mExit = new JmenuItem("Выход");

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

mm.add(mNewGame);

mm.add(new Jseparator()); //разделитель

mm.add(mExit);

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

mbar.add(mm);

//устанавливаем полученное меню на форму

setJMenuBar(mbar);

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

//для «Выход»

mExit.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {timer.stop(); dispose(); }

});

//для «Новая игра»

mNewGame.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

//startNewGame();

}

});

Добавьте этот код в конструктор перед вызовом setSize(). Запустите программу. Как работает меню?