Программа "Морской бой"

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

?.6)

 

Определить значение key, x, yKey = промах

 

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

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

 

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

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

 

ДаНеті от 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 = 1col_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 = 1col_ship = col_ship + 1Рис.6. Функция Disposition или Generation

 

Тестирование

 

Чтобы проверить корректность работы программы нужно провести тестирование. Бой с противником продолжается до полной победы, т.е. пока не будут уничтожены все 10 кораблей одного из противников.

Если первым свои корабли потерял компьютер, игроку выводится сообщение о победе

 

Рис.7. Сообщение о победе

Если первым свои корабли потерял игрок, ему выводится сообщение о проигрыше

 

Рис.8. Сообщение о проигрыше

 

В начале игры выводится приглашение к расстановке кораблей:

 

Рис.9. Расстановка кораблей

 

Если игрок выполнил недопустимое действие (например, попытался наложить корабль на корабль) ему будет выведено предупреждающее сообщение о его ошибке.

 

 

Если расстановка кораблей закончилась выводится приглашение к началу игры

 

Рис.10. Начало игры

 

В случае промаха игроку выводится сообщение о промахе

 

Рис.11. Сообщение о промахе

 

В случае попадания игроку выводится сообщение о попадании

 

Рис.12 Сообщение о попадании

 

В случае попадания в ячейку, которая уже обстреляна, игроку выводится сообщение с предложением выстрелить ещё раз

 

Рис.13. Сообщение о выстреле в обстрелянную ячейку

 

 

Анализ работы

 

В процессе выполнения данного курсового проекта были закреплены знания по использованию классов и использованию основ объектно-ориентированного программирования.

Конец игры предусмотрен в двух случаях: победа пользователя или победа компьютера. Также в процессе написания программы были рассмотрены все варианты некорректной работы программы, например: не размещает ли компьютер и пользователь корабли в соседних клетках, не ставит ли он корабли только в углах игрового поля, не накладываются ли корабли один на другой. Также проверяется соответствие количества кораблей и палуб на них (1 четырехпалубный, 2 трехпалубных, 3 двухпалубных, 1 однопалубных). Все вышеописанные неполадки были обнаружены и успешно устранены.

Во время написания программы я получил навыки по использованию некоторых, ранее не использованных мной, компонентов среды программирования С++ Builder 6.

Также при написании данного курсового проекта я закрепил свои знания в области написания объектно-ориентированных программ, содержащих взаимодействующие классы. Были получены новые знания о создании классов и работе с ними. Благодаря работе над программой были закреплены знания распределения обязанностей между классами.

 

Приложение: Текст программы

 

Текст программы состоит из следующих модулей: UShipBattle.h, UShipBattle.cpp, ShipBattle.cpp

ShipBattle.cpp

//

#include

#pragma hdrstop

//

USEFORM (UShipBattle.cpp, Form1);

//

WINAPI WinMain (HINSTANCE, HINSTANCE, LPSTR, int)

{

try

{

Application->Initialize();

Application->CreateForm (__classid(TForm1),&Form1);

Application->Run();

}

catch (Exception&exception)

{

Application->ShowException(&exception);

}

catch (…)

{

try

{

throw Exception();

}

catch (Exception&exception)

{

Application->ShowException(&exception);

}

}

return 0;

}

//

UShipBattle.cpp

//

#include

#pragma hdrstop

#include UShipBattle.h

//

#pragma package (smart_init)

#pragma resource *.dfm

TForm1 *Form1;

//

__fastcall TForm1:TForm1 (TComponent* Owner)

: TForm(Owner)

{

HE = new HandlersOfEvents (Fild1, Fild2);

}

//

int Flot: GetStatus()

{

destroy = true;

for (j = 0; j < 10; j++)

for (i = 0; i < ship[j].col_deck; i++)

if (ship[j].decks[i])

{

destroy = false;

return 1;

}

return 0;

}

//

int AI: Generation (Flot *CPU, int col_ship, int col_deck)

{

int x1, y1, k, i, j;

bool vertical = false, regen;

do {

randomize();

x1 = rand()% 10;

y1 = rand()% 10;

regen = false;

for (k = 0; k < col_deck; k++)

for (i = 0; i < col_ship; i++)

for (j = 0; j ship[i].col_deck; j++)

{

if(regen) break;

if(! vertical)

{

if((CPU -> ship[i].desp_of_part[j].x == x1 + k&&

CPU -> ship[i].desp_of_part[j].y == y1) || (x1 + k >= 10))

{

vertical = true;

regen = true;

continue;

}

if((CPU -> ship[i].desp_of_part[j].x 1 == x1 + k