Автор работы: Пользователь скрыл имя, 17 Февраля 2011 в 16:34, курсовая работа
Программный продукт «Логическая игра «Морской бой»», используемый пользователем персонального компьютера.
Разработчиком программы является студент Томского Политехнического Университета группы 8880 специальности «Информационные системы и технологии в бизнесе» Погребной Вадим Юрьевич.
Программный продукт создается на основании выданного задания от преподавателя кафедры АИКС Луневой Е.Е.
Первым этапом разработки программного продукта будет составление функциональной спецификации, в которой будет описана программа с точки зрения пользователя, её основные функции. Вторым этапом будет разработка основных модулей программы и их функциональных возможностей, кодирование программы, отладка и тестирование программы.
//Проверка поля
if (Field->Tag == 1)
{
//Если произошло попадание
if (field1[yp][xp] == 1)
{
//Звук
и увеличение количества
PlaySound("Sounds\\
Shoots2->Caption
= IntToStr(StrToInt(Shoots2->
field1[yp][xp] = 3; //На месте выстрела поставить метку 3
//Графически показать попадание
SeaDraw (1,xp,yp,true);
linex = xp*29 + 24;
liney = yp*29 + 3;
Timer1->Enabled
= true;
//Переменные для определения границ, направления и необходимые для
//определения убитого корабля и выставления "мимо" вокруг него
int dir = 0, temp = 0, count = 0;
bool
bord1 = !xp, bord2 = !yp, bord3 = !(9-xp), bord4 = !(9-yp);
//Определение вспомогательных переменных
if (!bord1)
if ((field1[yp][xp-1] == 3))
{
dir = 1;
temp = xp;
goto M1;
}
if (!bord2)
if ((field1[yp-1][xp] == 3))
{
dir = 2;
temp = yp;
goto M1;
}
if (!bord3)
if ((field1[yp][xp+1] == 3))
{
dir = 1;
temp = xp;
goto M1;
}
if (!bord4)
if ((field1[yp+1][xp] == 3))
{
dir = 2;
temp = yp;
goto M1;
}
//Логическая переменная для обозначения, убит ли корабль
M1: bool emp = false;
//Условие на направление корабля, если влево
if (dir == 1)
{
//Условие на приграничность
if (!bord1)
//Переходим к
while (field1[yp][temp]==3)
{
//Если дошли до границы
if (!temp)
{
bord1;
break;
}
//Если дошли до нераненного поля
if (field1[yp][temp--]==1)
{
emp = true;
break;
}
};
//В случае, если ушли от корабля влево, увеличиваем temp
if ((field1[yp][temp]==0)||(
//Если не было нераненных полей
if (!emp)
//Теперь идем до конца корабля вправо
for (int i = 0; i < 5; i++)
{
//Определение границы справа
if (temp+i == 10)
{
bord3 = true;
break;
}
//Если ранен, то идем дальше, увеличиваем
//количество палуб корабля
if (field1[yp][temp+i]==3) count++;
else //Если есть нераненое поле, то закончить проверку
//И
if (field1[yp][temp+i]==1)
{
emp = true;
break;
}
//Иначе, он
else break;
}
if (!emp)
{
PlaySound("Sounds\
Count1Destr++; //Увеличиваем количество убитых кораблей
//Заполняем массив убитых кораблей
switch (count)
{
case 2: for (int dsh = 4; dsh < 7; dsh++)
case 3: for (int dsh = 7; dsh < 9; dsh++)
default: Ships1Destr[9] = 1;
}
//В случае игры с компьютером
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 = temp - 1 + bord1; v < temp + count + 1 - bord3; v++)
if (field1[u][v] == 0)
{
field1[u][v] = 2;
SeaDraw (1,v,u,false);
}
}
}
//В
случае вертикального
//повторяем аналогичные процессы
if (dir == 2)
{
if (!bord2)
while (field1[temp][xp]==3)
{
if (!temp)
{
bord2 = true;
break;
}
if (field1[temp--][xp]==1)
{
emp = true;
break;
}
};
if ((field1[temp][xp]==0)||(
if (!emp)
for (int i = 0; i < 5; i++)
{
if (temp+i == 10)
{
bord4 = true;
break;
}
if (field1[temp+i][xp]==3) count++;
else
if (field1[temp+i][xp]==1)
{
emp = true;
break;
}
else break;
}
if (!emp)
{
PlaySound("Sounds\
Count1Destr++;
switch (count)
{
case 2: for (int dsh = 4; dsh < 7; dsh++)
case 3: for (int dsh = 7; dsh < 9; dsh++)