- •«Озерский технический колледж» Курсовой проект в сфере разработки «Delphi» Разработка программы «Морской бой»
- •Озерск, 2013
- •Описание классов
- •// Класс Flot
- •// Класс ai
- •// Класс Referee
- •// Класс HandlersOfEvents
- •// Структура Ship
- •Основные алгоритмы
- •Тестирование
- •Приложение: Текст программы
- •Литература
// Класс Flot
class Flot
{
public:
int i, j, n; // переменные, используемые в циклах
bool destroy; // флаг, проверяющий наличие флота
TImage *Im; // поле, на котором мы рисуем
Ship ship[10]; // количество кораблей
Flot (TImage *I)
{
destroy = false;
Im = I;
n = 1;
for (i = 0; i < 10; i++)
{
if (i < 6) n = 2;
if (i < 3) n = 3;
if (i == 0) n = 4;
ship[i].destroy = false;
ship[i].col_deck = n;
ship[i].decks = new bool[n];
ship[i].desp_of_part = new TPoint[n];
}
}
int GetStatus();
};
// Класс ai
class AI
{
public:
int Generation (Flot *CPU, int col_ship, int col_deck); // размещение кораблей противника
};
// Класс Referee
class Referee: public AI
{
public:
int i, j, target_player, target_CPU;
bool net1 [10] [10], net2 [10] [10], game_over;
Flot *player, *CPU;
Referee()
{
for (i = 0; i < 10; i++)
for (j = 0; j < 10; j++)
{
net1 [i] [j] = true;
net2 [i] [j] = true;
}
game_over = false;
target_player = 0;
target_CPU = 0;
}
int GoChecking (int x, int y, int n); // запуск функции проверки
int Check (bool net[10] [10], int x, int y); // проверка попадания в старую или новую ячейку
int GoScaning (int x, int y, int n); // запуск функции сканирования
int Scan (Flot *fl, int x, int y); // сканирование (проверка) попадания в корабль
int Miss (int x, int y, int n); // отмечание ячейки в которую попали (но не в корабль)
int EndRaund (int n); // конец игры
};
// Класс HandlersOfEvents
class HandlersOfEvents: public Referee
{
public:
bool play;
int col_deck, col_ship, i, j, k;
HandlersOfEvents (TImage *Im1, TImage *Im2)
{
play = false;
col_deck = 4; col_ship = 1;
player = new Flot(Im1);
CPU = new Flot(Im2);
}
int Play (TImage *Im1, TImage *Im2);
int Move();
int Desposition (int x, int y, TMouseButton Button); // размещение кораблей
int Draw (String key, int x, int y, int n); // рисование
int ShootPlayer (int x, int y, int n); // выстрел игрока
int Shoot (int x, int y); // выстрел компьютера
};
// Структура Ship
struct Ship
{
bool destroy; // флаг уничтожения корабля
int col_deck; // количество палуб
bool *decks; // массив палуб
TPoint *desp_of_part; // расположение частей (палуб) корабля
};
Основные алгоритмы
Ниже в виде схем Насси-Шнейдермана представлены алгоритмы основных функций, используемых в программе, а именно: Функция Draw (Рис. 3), Функция ShootPlayer (x, y, n) (Рис. 4), Функция Shoot (x, y, n) (Рис. 5). Функция Disposition или Generation (Рис. 6)
Определить значение key, x, y |
|||
Да Нет |
|||
Нарисовать промах в ячейке х, у
|
|
||
Кеу = попадание
Да Нет |
|||
Нарисовать в ячейке х, у подбитую палубу
|
|
||
Да Нет |
|||
і от 1 до количество палуб
|
|
||
|
Да Нет |
||
Рисовать палубу в ячейке х, у+і |
Рисовать палубу в ячейке х+і, у
|
||
Рис. 3 Функция Draw
Проверить куда пришлось попадание |
||
Н |
||
Нарисовать след от выстрела |
В цель
Да Нет |
|
Запомнить, что туда уже стреляли |
Нарисовать подбитую палубу
|
Сообщить о попадании в расстрелянную ранее ячейку |
|
Запомнить, что туда уже стркляли |
|
Рис. 4 Функция ShootPlayer (x, y, n)
Запомнить результата выстрела в ShootPlayer |
||||||||
Д |
||||||||
Флот CPU уничтожен
Да Нет |
бесконечно |
|||||||
|
Генерация x, y, для CPU |
|||||||
Конец раунда
|
Выход
|
Запомнить результат выстрела компьютера в ShootCPU |
||||||
Выход |
в Да Нет |
|||||||
Ф уничтожен
Да Нет |
Прервать цикл |
|||||||
Конец раунда |
|
Выход |
||||||
Выход |
|
|
||||||
Рис. 5. Функция Shoot (x, y, n)
Количество палуб col_dec = 4 Количество кораблей col_ship = 1 |
|||||||
col_ship < = 10
|
|||||||
|
k от 0 до col_ship
|
||||||
|
i от 0 до 10
|
||||||
|
j от 0 до 10
|
||||||
|
j от 0 до col_dec
|
||||||
|
М
Да Нет |
||||||
|
новые координаты корабля |
||||||
col_ship = 1?
Да Нет |
|||||||
col_dec = 3
|
|
||||||
Да Нет |
|||||||
col_dec = 2
|
|
||||||
col_ship = 6?
Да Нет |
|||||||
col_dec = 1 |
|
||||||
col_ship = col_ship + 1 |
|||||||
Рис. 6. Функция Disposition или Generation

Key
= промах
Кеу
= нарисовать корабль
По
вертикали
Мимо
ет Да
в
ShootPlayer
попадание
а Нет
ShootCPU
попадание
лот
игрока
ожет
ли здесь находиться данная палуба?
col_ship
= 3?