Автор работы: Пользователь скрыл имя, 17 Февраля 2011 в 16:34, курсовая работа
Программный продукт «Логическая игра «Морской бой»», используемый пользователем персонального компьютера.
Разработчиком программы является студент Томского Политехнического Университета группы 8880 специальности «Информационные системы и технологии в бизнесе» Погребной Вадим Юрьевич.
Программный продукт создается на основании выданного задания от преподавателя кафедры АИКС Луневой Е.Е.
Первым этапом разработки программного продукта будет составление функциональной спецификации, в которой будет описана программа с точки зрения пользователя, её основные функции. Вторым этапом будет разработка основных модулей программы и их функциональных возможностей, кодирование программы, отладка и тестирование программы.
default: Ships1Destr[9] = 1;
}
if (Comp->Checked)
{
Cpu.TarDir = false;
Cpu.Target = false;
Cpu.TarDirect = false;
Cpu.TarDestr = true;
}
for (int u = temp - 1 + bord2; u < temp + count + 1 - bord4; u++)
for (int v = xp-1+bord1; v < xp+2-bord3; v++)
if (field1[u][v] == 0)
{
field1[u][v] = 2;
SeaDraw (1,v,u,false);
}
}
}
//Если убит однопалубный корабль
//повторяем те же процессы
if ((dir == 0) && (field1[yp][xp-1+bord1]!=1) && (field1[yp-1+bord2][xp]!=1)
&& (field1[yp][xp+1-bord3]!=1) && (field1[yp+1-bord4][xp]!=1))
{
PlaySound("Sounds\\SOUNDESTR.
Count1Destr++;
for (int dsh = 0; dsh < 4; dsh++)
if (!Ships1Destr[dsh])
{
Ships1Destr[dsh] = 1;
break;
}
if (Comp->Checked)
{
Cpu.TarDir = false;
Cpu.Target = false;
Cpu.TarDirect = false;
Cpu.TarDestr = true;
}
for (int u = yp - 1 + bord2; u < yp + 2 - bord4; u++)
for (int v = xp - 1 + bord1; v < xp + 2 - bord3; v++)
if (field1[u][v] == 0)
{
field1[u][v] = 2;
SeaDraw (1,v,u,false);
}
}
}
//Если произошло попадание в "молоко"
if (field1[yp][xp] == 0)
{
PlaySound("Sounds\\
Shoots2->Caption
= IntToStr(StrToInt(Shoots2->
//Указываем компьютеру, что выбрано неправильное направление
if (Comp->Checked)
Cpu.TarDirect = false;
//Ставим метку стреленого места
field1[yp][xp] = 2;
//Указываем графически
SeaDraw (1,xp,yp,false);
//Позволяем стрелять другому игроку
Field1->Enabled = false;
Field2->Enabled = true;
RichEdit2->Color = clNavy;
RichEdit1->Color = clRed;
}
}
//Если стрельба проводится по 2му полю
//то делать то же самое для него
else
{……………
}
//Сохранить изображение канв
SaveBM (1);
SaveBM (2);
//Если стрельбу не производит компьютер
if (!Timer2->Enabled && !Timer1->Enabled)
SetWindow (1); //Восстановить первоначальные свойства окна
}
}
//Таймер
для прорисовки линий и
void __fastcall
TSeaButForm::Timer1Timer(
{
//Проверка активного поля
if (Field1->Enabled)
{
//Дорисовать линию через время
GridField1->Canvas->LineTo(
//Выключить таймер
Timer1->Enabled = false;
//Если убиты не все корабли
if (Count1Destr != 10)
{
//Если компьютер стреляет, то указать необходимые
//ему атрибуты
if (Comp->Checked)
{
if (Cpu.Target)
{
if (Cpu.TarDir)
Cpu.TarDirect = true;
else
{
Cpu.TarDir = true;
switch (Cpu.Direction)
{
case 0: Cpu.RowDir[1] = -1; Cpu.RowDir[3] = -1; break;
case 1: Cpu.RowDir[0] = -1; Cpu.RowDir[2] = -1; break;
case 2: Cpu.RowDir[1] = -1; Cpu.RowDir[3] = -1; break;
case 3: Cpu.RowDir[0] = -1; Cpu.RowDir[2] = -1; break;
}
Cpu.TarDirect = true;
}
}
else
if (!Cpu.TarDestr)
Cpu.Target = true;
//Включить 2ой таймер
Timer2->Enabled = true;
}
else SetWindow (1); //Если стреляет игрок восстановить окно
}
//Если убиты все корабли
else
{
//Воспроизвести разные звуки в зависимости от того
//человек или компьютер играл
if (Comp->Checked)
PlaySound("Sounds\\Sounholi.
else
PlaySound("Sounds\\Sounhihi.
//Активизация элементов
for (int i = 0; i < 10; i++)
Ships2[i]->Visible = true;
Field1->Enabled = false;
SetWindow(1);
FrameAgain->Enabled = true;
FIGHT->OnClick = NewGameClick;
FrameAgain->OnClick = NewGameClick;
SaveRes (2);
Timer3->Enabled = true;
}
//Сохранить изображение канвы1
SaveBM (1);
}
//При стрельбе по 2му полю
else
{
//Провести линию и отключить таймер
GridField2->Canvas->LineTo(
Timer1->Enabled = false;
//Сохранить изображение
SaveBM (2);
//восстановить окно
SetWindow (1);
//Елси убиты все корабли
if (Count2Destr == 10)
{
PlaySound("Sounds\\
//Активизация элементов
for (int i = 0; i < 10; i++)
Ships1[i]->Visible = true;
Field2->Enabled = false;
FrameAgain->Enabled = true; //Для быстрого начала новой игры
FIGHT->OnClick = NewGameClick;
FrameAgain->OnClick = NewGameClick;
SaveRes (1); //Сохранить результаты
Timer3->Enabled = true;
}
}
}
//Функция выстрелов компьютера
void TSeaButForm::CompShot ()
{
bool cl = false; //Логическая переменная
int x =
0, y = 0; //Координаты выстрела
//Определение ненужных координат
for (int i = 0; i < 10; i++)
for (int j = 0; j < 10; j++)
if ((field1[i][j]!=1) && (field1[i][j]!=0))
Cpu.RowNum[10*i + j] = -1;
//Если не было попадания
if (!Cpu.Target)
{
CheckDestr (); //Проверка на необходимость стрельбы по всем полям
//Заполнение массива
for (int i = 0; i < 4; i++)
Cpu.RowDir[i] = i;
//Обнуление переменных, показывающих попадания по кораблю
Cpu.Direction = -1;
Cpu.TarDestr = false;
//Выбор случайного поля
do
{
Randomize();
Cpu.Choice = Random(100);
Choice = Cpu.Choice;
//Проверка на доступность
if (Choice == Cpu.RowNum[Choice])
{