Программа "Морской бой"
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
?.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