Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовой проект Морской бой.rtf
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
17.73 Mб
Скачать

// Класс 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

Key = промах

Да Нет

Нарисовать промах в ячейке х, у

Кеу = попадание

Да Нет

Нарисовать в ячейке х, у подбитую палубу

Кеу = нарисовать корабль

Да Нет

і от 1 до количество палуб

По вертикали

Да Нет

Рисовать палубу в ячейке х, у+і

Рисовать палубу в ячейке х+і, у

Рис. 3 Функция Draw

Проверить куда пришлось попадание

Мимо

Н ет Да

Нарисовать след от выстрела

В цель

Да Нет

Запомнить, что туда уже стреляли

Нарисовать подбитую палубу

Сообщить о попадании в расстрелянную ранее ячейку

Запомнить, что туда уже стркляли

Рис. 4 Функция ShootPlayer (x, y, n)

Запомнить результата выстрела в ShootPlayer

в ShootPlayer попадание

Д а Нет

Флот CPU уничтожен

Да Нет

бесконечно

Генерация x, y, для CPU

Конец раунда

Выход

Запомнить результат выстрела компьютера в ShootCPU

Выход

в 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_ship = 3?

Да Нет

col_dec = 2

col_ship = 6?

Да Нет

col_dec = 1

col_ship = col_ship + 1

Рис. 6. Функция Disposition или Generation