Лабораторная работа по "Программированию"

Автор работы: Пользователь скрыл имя, 27 Января 2013 в 04:14, лабораторная работа

Описание работы

Разработать игру согласно варианту задания.
Игра “кто вперед”
Два игрока стартуют в левом верхнем углу поля 9*9 и движутся к центру поля. Победит тот, кто придет первым. Положение первого игрока можно отмечать “+”, второго “*”, если оба в одной клетке – “0”.
Игроки могут ходить на одну или две клетки по спирали к центру (игрок вводит, соответственно 1 или 2).

Содержание работы

1. Постановка задачи 4
2. Описание структуры пользовательского меню 4
3. Описание структуры классов 5
4. Описание методов классов и спецификация локальных переменных 6
Поля 6
Методы 6
Класс GameEngine 6
Поля 6
Методы 6
Класс ButListener 6
Поля 6
Методы 6
Класс Battlefield 6
Поля 6
Методы 6
Класс ImgBut 7
Поля 7
Методы 7
Класс Points 7
Поля 7
Методы 7
Класс SpecPoints 7
Поля 7
Методы 7
Класс Player 7
Поля 7
Методы 7
Класс DisplayPanel 7
Поля 8
Методы 8
Класс ControlPanel 8
Поля 8
Методы 8
5. Таблица тестов 8
6. Результаты тестирования 8
Тест №1 8
Тест №2 10
Тест №3 11
7. Листинги программ 12
Класс GameEngine 12
Класс ButListener 3
Класс Battlefield 3
Класс ImgBut 5
Класс Points 5
Класс SpecPoints 5
Класс Player 6
Класс DisplayPanel 7
Класс ControlPanel 7

Файлы: 1 файл

Отчёт по лабораторной работе №5(Java).docx

— 875.50 Кб (Скачать файл)

 

Министерство образования и  науки Российской Федерации

ИРКУТСКИЙ ГОСУДАРСТВЕНЫЙ ТЕХНИЧЕСКИЙ  УНИВЕРСИТЕТ

факультет кибернетики

кафедра Вычислительной техники

ОТЧЕТ

к лабораторным работам по дисциплине

объектно-ориентированное программирование

Работа с графическим интерфейсом


(наименование  темы)

 

Выполнил студент группы

ЭВМб-11-1

     

Белясников С. А.

 

шифр группы

 

подпись

 

Фамилия И. О.

Проверил

       

Аршинский В.Л.

 

должность

 

подпись

 

Фамилия И. О.


Иркутск 2012 г.

 

 

Оглавление

1. Постановка задачи 4

2. Описание структуры пользовательского меню 4

3. Описание структуры классов 5

4. Описание методов классов и спецификация локальных переменных 6

Поля 6

Методы 6

Класс GameEngine 6

Поля 6

Методы 6

Класс ButListener 6

Поля 6

Методы 6

Класс Battlefield 6

Поля 6

Методы 6

Класс ImgBut 7

Поля 7

Методы 7

Класс Points 7

Поля 7

Методы 7

Класс SpecPoints 7

Поля 7

Методы 7

Класс Player 7

Поля 7

Методы 7

Класс DisplayPanel 7

Поля 8

Методы 8

Класс ControlPanel 8

Поля 8

Методы 8

5. Таблица тестов 8

6. Результаты тестирования 8

Тест №1 8

Тест №2 10

Тест №3 11

7. Листинги программ 12

Класс GameEngine 12

Класс ButListener 3

Класс Battlefield 3

Класс ImgBut 5

Класс Points 5

Класс SpecPoints 5

Класс Player 6

Класс DisplayPanel 7

Класс ControlPanel 7

 

 

  1. Постановка задачи

Вариант 3

Разработать игру согласно варианту задания.

 

Игра “кто вперед”

 

Два игрока стартуют в левом верхнем  углу поля 9*9 и движутся к центру поля. Победит тот, кто придет первым. Положение первого игрока можно  отмечать “+”, второго “*”, если оба  в одной клетке – “0”.

Игроки могут ходить на одну или  две клетки по спирали к центру  (игрок вводит, соответственно 1 или 2).

На пути есть 5 особых точек, расставленных программой случайным образом:

- Назад  на 3 клетки;

- Вперед на две клетки;

- Пропустить ход;

- Сделать дополнительный ход;

- Встать в одну клетку с  противником

Клетки невидимы до тех пор, пока один из противников не попадет на них.

  1. Описание структуры пользовательского меню

Меню  состоит из нескольких уровней:

    1. Начать игру

1. Начать игру

2. Завершить игру

3. Сделать 1 шаг

4. Сделать 2 шага

    2. Завершить игру

    3. Выход

  1. Описание структуры классов

  1. Описание методов классов  и спецификация локальных переменных

Класс WhoIsFirst

Главный класс.

Поля

FrMain -

CPan -

DPan -

Методы

main(String[] args) – метод для запуска и работы с командной строкой

 

Класс GameEngine

Класс выполняющий все основные игровые действия.

Поля

time – Время игры

PlayerSkipStep – Условие пропуска игроком хода

timer - Таймер

Методы

beginGame() - Запускает новую игру

finishGame() - Завершает текущую игру

doStep(numberOfMoves : int) – Сделать ход

catchUp() - Эффект особой точки(встать в одну клетку с игроком)

extraStep() - Эффект особой точки(сделать дополнительный ход)

goBackward() - Эффект особой точки(вернуться на 3 клетки назад)

goForward() - Эффект особой точки(переместиться вперёд на 2 клетки)

skipStep() - Эффект особой точки(пропустить ход)

Класс ButListener

Класс для работы с кнопками

Поля

Методы

mouseClicked(e) - Выполняет действие по событию «Клика» мыши

Класс Battlefield

Класс игрового поля .

Поля

CurrPlayer – Текущий игрок(кому передано управление)

pointsSpecNumArr – Массив номеров клеток на поле для особых точек

pointsNumArr – Массив номеров клеток на поле для обычных точек

pointsArr –массив точек

Player1 - Игрок 1

Player2 - Игрок 2

Методы

refresh() - Обновляет изображения объектов игрового поля

setNewParameters() - Генерирует новые значения для объектов игрового поля

setDefault() - Сбрасывает значения объектов игрового поля

 

 

Класс ImgBut

Класс кнопок с иконкой.

Поля

Методы

action(But : ImgBut) – Выполнить команду определённую для этой кнопки

 

Класс Points

Класс точек игрового поля.

Поля

visible - Условие видимости точки

Image - Изображение точки

Методы

 

Класс SpecPoints

Класс особых точек игрового поля..

Поля

catchUp - числовое  значение особой точки(Встать в одну клетку с игроком)

extraStep - числовое  значение особой точки(сделать дополнительный ход)

goBackward - числовое  значение особой точки(переместится на 3 клетки обратно)

goForward - числовое  значение особой точки(переместится на 2 клетки вперед)

skipStep - числовое  значение особой точки(пропустить ход)

Методы

refresh(PointType : int) - Обновляет изображение точки

showPointEffect(specPointType : int) - Показывает эффект точки

 

Класс Player

Класс игроков.

Поля

steps – количество ходов

color – цвет игрока

name – имя игрока

curPosition – текущая позиция игрока

Opponent – Оппонент игрока

Методы

stayOnPoint() - Проверяет стоит ли игрок на особой точке

moveForward() - Переместится на одну клетку вперёд

moveBackward() - Переместится на одну клетку назад

 

Класс DisplayPanel

Класс верхней панели отображающей игровое поле.

Поля

BF -  Игровое поле

Методы

 

Класс ControlPanel

Класс нижней панели с управляющими элементами.

Поля

imgbut1 – Кнопка (Сделать 1 шаг)

imgbut2 - Кнопка (Сделать 2 шага)

imgbut3 - Кнопка (Начать игру)

imgbut4 - Кнопка (Завершить игру)

imgbut5 - Кнопка (Выход)

timeLabel – показывает время игры

playerLabel – показывает имя текущего игрока

playerStepsLabel – показывает количество сделанных ходов игроками

Методы

 

  1. Таблица тестов

Последовательность действий

Результат

1

Игрок попадает на особую точку

На игроке срабатывает эффект особой точки, и она появляется

2

Игроку остается одна клетка до финиша, и он делает ход на две клетки

Вывод результатов игры

3

Попытка во время запущенной игры начать ешё одну

Игра начинается заново


 

  1. Результаты тестирования

Тест  №1

 

Игрок перед особой точкой.

 

Демонстрация работы эффекта особой точки.

 

Тест №2

Игрок в одной клетке от финиша.

 

Игрок сделал количество шагов больше чем нужно до финиша.

 

 

Тест №3

 

Идёт игра.

 

Нажатие кнопки «Начать игру» запускает  игру заново.

 

  1. Листинги программ

Класс WhoIsFirst

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package whoisfirst;

 

/**

*

* @author Администратор

*/

public class WhoIsFirst {

    public static FrmMain FrMain=new FrmMain();

    public static ControlPanel CPan=new ControlPanel();

    public static DisplayPanel DPan=new DisplayPanel();

    /**

     * @param args the command line arguments

     */

    public static void main(String[] args) {

        FrMain.add(CPan);

        FrMain.add(DPan);

        FrMain.setVisible(true);

        GameEngine.beginGame();

        GameEngine.finishGame();

    }

}

Класс GameEngine

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package whoisfirst;

 

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

 

/**

* Класс с основными дествиями игры

* @author Администратор

 */

public class GameEngine {

    public static int time;

    public static Player PlayerSkipStep;

   

    /**

     * сделаем таймер

     */

    public static javax.swing.Timer timer = new javax.swing.Timer(1000, new ActionListener() {

        @Override

        public void actionPerformed(ActionEvent e) {

            time++;

            ControlPanel.timeLabel.setText("Время игры: "+time+" сек");

        }

    });

 

    /**

     * Начать игру

     */

    public static void beginGame() {

        finishGame();//чтобы при повторном нажати на эту кнопку игра начиналась заново а не глючила =)

        ControlPanel.imgbut1.setVisible(true);

        ControlPanel.imgbut2.setVisible(true);

        Battlefield.setNewParameters();

        timer.start();

        ControlPanel.playerLabel.setText("Ходит - "+Battlefield.Player1.name);

    }

    /**

     * Завершить игру

     */

    public static void finishGame() {

        ControlPanel.imgbut1.setVisible(false);

        ControlPanel.imgbut2.setVisible(false);

        Battlefield.setDefault();

        timer.stop();

        time=0;

    }

    /**

     * Сделать ход

     * @param numberOfMoves

     */

    public static void doStep(int numberOfMoves) {

        if (Battlefield.CurrPlayer == PlayerSkipStep) {

            extraStep();

            PlayerSkipStep = null;

        }

        for (int i = 1; i <= numberOfMoves; i++) {

            Battlefield.CurrPlayer.moveForward();

        }

        if (Battlefield.CurrPlayer.curPosition != 81) {

            Battlefield.CurrPlayer.stayOnPoint();

            Battlefield.CurrPlayer.steps++;

            Battlefield.CurrPlayer = Battlefield.CurrPlayer.Opponent;

            ControlPanel.playerLabel.setText("Ходит - "+Battlefield.CurrPlayer.name);

            ControlPanel.playerLabel.setForeground(Battlefield.CurrPlayer.color);

            ControlPanel.playerStepsLabel.setText("Ходов: "+Battlefield.Player1.name+" "+Battlefield.Player1.steps+" "+Battlefield.Player2.name+" "+Battlefield.Player2.steps);

        } else {

            ControlPanel.playerLabel.setText("Победил - "+Battlefield.CurrPlayer.name);

            GameEngine.finishGame();

        }

    }

    /**

     * Встать в одну  клетку с оппонентом

     */

    public static void catchUp() {

        Battlefield.CurrPlayer.curPosition = Battlefield.CurrPlayer.Opponent.curPosition;

        Battlefield.CurrPlayer.stayOnPoint();

    }

    /**

     * Сделать дополнительный ход

     */

    public static void extraStep() {

        Battlefield.CurrPlayer = Battlefield.CurrPlayer.Opponent;

        Battlefield.CurrPlayer.stayOnPoint();

    }

    /**

     * Вернуться на 3 клетки назад

     */

    public static void goBackward() {

        Battlefield.CurrPlayer.moveBackward();

        Battlefield.CurrPlayer.moveBackward();

        Battlefield.CurrPlayer.moveBackward();

        Battlefield.CurrPlayer.stayOnPoint();

    }

    /**

     * перейти на 2 клетки вперёд

     */

    public static void goForward() {

        Battlefield.CurrPlayer.moveForward();

        Battlefield.CurrPlayer.moveForward();

        Battlefield.CurrPlayer.stayOnPoint();

    }

    /**

     * Пропустить ход

     */

    public static void skipStep() {

        if (PlayerSkipStep == Battlefield.CurrPlayer) {

            PlayerSkipStep = null;

        } else {

            PlayerSkipStep = Battlefield.CurrPlayer;

        }

    }

}

Класс ButListener

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package whoisfirst;

 

import java.awt.event.MouseListener;

 

/**

*

* @author Администратор

*/

public class butListener implements MouseListener{

   

    @Override

    public void mouseClicked(java.awt.event.MouseEvent e) {

        ImgBut imgBut=(ImgBut) e.getSource();

        imgBut.action(imgBut);

    }

 

    @Override

    public void mousePressed(java.awt.event.MouseEvent e) {

        //throw new UnsupportedOperationException("Not supported yet.");

    }

 

    @Override

    public void mouseReleased(java.awt.event.MouseEvent e) {

        //throw new UnsupportedOperationException("Not supported yet.");

    }

 

    @Override

    public void mouseEntered(java.awt.event.MouseEvent e) {

        //throw new UnsupportedOperationException("Not supported yet.");

    }

 

    @Override

    public void mouseExited(java.awt.event.MouseEvent e) {

        //throw new UnsupportedOperationException("Not supported yet.");

    }

}

Класс Battlefield

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package whoisfirst;

 

import java.awt.Color;

import java.awt.GridLayout;

import java.util.Random;

import javax.swing.ImageIcon;

import javax.swing.JLabel;

 

/**

* Класс игрового поля

* @author Администратор

*/

 

public class Battlefield extends JLabel{

    public static Player CurrPlayer;

    public static int[] pointsSpecNumArr=new int[6];

    public static int[] pointsNumArr={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 18, 27, 36, 45, 54, 63, 72, 81, 80, 79, 78, 77, 76, 75, 74, 73, 64, 55, 46, 37, 28, 19, 10, 11, 12, 13, 14, 15, 16, 17, 26, 35, 44, 53, 62, 71, 70, 69, 68, 67, 66, 65, 56, 47, 38, 29, 20, 21, 22, 23, 24, 25, 34, 43, 52, 61, 60, 59, 58, 57, 48, 39, 30, 31, 32, 33, 42, 51, 50, 49, 40, 41};

    public static Points[] pointsArr=new Points[82];//задаём длину массива точек

    public static Player Player1=new Player("Player1","H:\\Учёба\\Программирование\\2 Курс\\Курсовая\\game project\\Player1.jpg");

    public static Player Player2=new Player("Player2","H:\\Учёба\\Программирование\\2 Курс\\Курсовая\\game project\\Player2.jpg");

    /**

     * Обновить игровое поле

     */

    public static void refresh(){

        for (int i = 1; i <= 81; i++) {

            pointsArr[pointsNumArr[i]].Image=null;

        }    

        if(pointsArr[pointsNumArr[Player1.curPosition]]==pointsArr[pointsNumArr[Player2.curPosition]]){

            pointsArr[pointsNumArr[Player1.curPosition]].Image=new ImageIcon("H:\\Учёба\\Программирование\\2 Курс\\Курсовая\\game project\\Both.jpg");

        }else{

            pointsArr[pointsNumArr[Player1.curPosition]].Image=Player1.Image;

Информация о работе Лабораторная работа по "Программированию"