Автор работы: Пользователь скрыл имя, 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
Министерство образования и науки Российской Федерации
ИРКУТСКИЙ ГОСУДАРСТВЕНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
факультет кибернетики
кафедра Вычислительной техники
ОТЧЕТ
к лабораторным работам по дисциплине
объектно-ориентированное |
Работа с графическим |
(наименование темы)
Выполнил студент группы |
ЭВМб-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
Вариант 3
Разработать игру согласно варианту задания.
Игра “кто вперед”
Два игрока стартуют в левом верхнем углу поля 9*9 и движутся к центру поля. Победит тот, кто придет первым. Положение первого игрока можно отмечать “+”, второго “*”, если оба в одной клетке – “0”.
Игроки могут ходить на одну или две клетки по спирали к центру (игрок вводит, соответственно 1 или 2).
На пути есть 5 особых точек, расставленных программой случайным образом:
- Назад на 3 клетки;
- Вперед на две клетки;
- Пропустить ход;
- Сделать дополнительный ход;
- Встать в одну клетку с противником
Клетки невидимы до тех пор, пока один из противников не попадет на них.
Меню состоит из нескольких уровней:
1. Начать игру
1. Начать игру
2. Завершить игру
3. Сделать 1 шаг
4. Сделать 2 шага
2. Завершить игру
3. Выход
Класс 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 |
Игрок попадает на особую точку |
На игроке срабатывает эффект особой точки, и она появляется |
2 |
Игроку остается одна клетка до финиша, и он делает ход на две клетки |
Вывод результатов игры |
3 |
Попытка во время запущенной игры начать ешё одну |
Игра начинается заново |
Тест №1
Игрок перед особой точкой.
Демонстрация работы эффекта особой точки.
Тест №2
Игрок в одной клетке от финиша.
Игрок сделал количество шагов больше чем нужно до финиша.
Тест №3
Идёт игра.
Нажатие кнопки «Начать игру» запускает игру заново.
Класс 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.
}
});
/**
* Начать игру
*/
public static void beginGame() {
finishGame();//чтобы при повторном нажати на эту кнопку игра начиналась заново а не глючила =)
ControlPanel.imgbut1.
ControlPanel.imgbut2.
Battlefield.setNewParameters()
timer.start();
ControlPanel.playerLabel.
}
/**
* Завершить игру
*/
public static void finishGame() {
ControlPanel.imgbut1.
ControlPanel.imgbut2.
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.
}
if (Battlefield.CurrPlayer.
Battlefield.CurrPlayer.
Battlefield.CurrPlayer.steps++
Battlefield.CurrPlayer = Battlefield.CurrPlayer.
ControlPanel.playerLabel.
ControlPanel.playerLabel.
ControlPanel.playerStepsLabel.
} else {
ControlPanel.playerLabel.
GameEngine.finishGame();
}
}
/**
* Встать в одну клетку с оппонентом
*/
public static void catchUp() {
Battlefield.CurrPlayer.
Battlefield.CurrPlayer.
}
/**
* Сделать дополнительный ход
*/
public static void extraStep() {
Battlefield.CurrPlayer
= Battlefield.CurrPlayer.
Battlefield.CurrPlayer.
}
/**
* Вернуться на 3 клетки назад
*/
public static void goBackward() {
Battlefield.CurrPlayer.
Battlefield.CurrPlayer.
Battlefield.CurrPlayer.
Battlefield.CurrPlayer.
}
/**
* перейти на 2 клетки вперёд
*/
public static void goForward() {
Battlefield.CurrPlayer.
Battlefield.CurrPlayer.
Battlefield.CurrPlayer.
}
/**
* Пропустить ход
*/
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.
ImgBut imgBut=(ImgBut) e.getSource();
imgBut.action(imgBut);
}
@Override
public void mousePressed(java.awt.event.
//throw new UnsupportedOperationException(
}
@Override
public void mouseReleased(java.awt.event.
//throw new UnsupportedOperationException(
}
@Override
public void mouseEntered(java.awt.event.
//throw new UnsupportedOperationException(
}
@Override
public void mouseExited(java.awt.event.
//throw new UnsupportedOperationException(
}
}
Класс 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:\\Учёба\\
public static Player Player2=new Player("Player2","H:\\Учёба\\
/**
* Обновить игровое поле
*/
public static void refresh(){
for (int i = 1; i <= 81; i++) {
pointsArr[pointsNumArr[i]].
}
if(pointsArr[pointsNumArr[
pointsArr[pointsNumArr[
}else{
pointsArr[pointsNumArr[
Информация о работе Лабораторная работа по "Программированию"