Автор работы: Пользователь скрыл имя, 17 Февраля 2011 в 16:34, курсовая работа
Программный продукт «Логическая игра «Морской бой»», используемый пользователем персонального компьютера.
Разработчиком программы является студент Томского Политехнического Университета группы 8880 специальности «Информационные системы и технологии в бизнесе» Погребной Вадим Юрьевич.
Программный продукт создается на основании выданного задания от преподавателя кафедры АИКС Луневой Е.Е.
Первым этапом разработки программного продукта будет составление функциональной спецификации, в которой будет описана программа с точки зрения пользователя, её основные функции. Вторым этапом будет разработка основных модулей программы и их функциональных возможностей, кодирование программы, отладка и тестирование программы.
x == 9 ? x_len = 2 : x_len = 3;
if (y)
y_temp = y - 1;
x_temp = x - 1;
for (int ky = 0; ky < y_len; ky++)
{
for (int kx = 0; kx < x_len; kx++)
{
//Проверка
if (!kx && y_temp == y)
{
kx++;
x_temp++;
}
if (field1[y_temp][x_temp])
{
PlaySound("Sounds\\SOUNMETA.
MessageDlgPos("Корабли не должны соприкасаться!!!", mtWarning,
TMsgDl
SeaBut
return false;
}
x_temp += 1;
}
y_temp += 1;
x_temp -= x_len;
}
field1[y][x++] = 1; //Отмечаем поле и переходим правее
}
}
//Иначе больше 1го поля в высоту
else
{
y++; //Проводим аналогичные операции, только в высоту
for (int j = 0; j < Ships1[i]->RowCount - 1; j++)
{
y_temp = 0, x_temp = 0;
y == 9 ? y_len = 2 : y_len = 3;
y_temp = y - 1;
if (x)
x_temp = x - 1;
for (int ky = 0; ky < y_len; ky++)
{
for (int kx = 0; kx < x_len; kx++)
{
if (x_temp == x && !ky)
{
x_temp++;
continue;
}
if (field1[y_temp][x_temp])
{
PlaySound("Sounds\\SOUNMETA.
MessageDlgPos("Корабли не должны соприкасаться!!!", mtWarning,
TMsgDl
SeaBut
return false;
}
x_temp += 1;
}
y_temp += 1;
x_temp -= x_len;
}
field1[y++][x] = 1;
}
}
}
}
else //Иначе для 2го поля боя, повторяем аналогичные процессы
{………..
}
return true;
}
//Случайное создание кораблей компьютером
void TSeaButForm::CreateShips ()
{
NewShips (2);
//Скрытие кораблей 2 поля
for (int i = 0; i < 10; i++)
Ships2[i]->Visible = false;
Newfield (2);
//Создание массива 2го поля боя
int xc = -1, dir = -1, xx = -1; //Выбранная координата, направление
bool cl = false; //Переменная для проверки условий
int arr[100], arrdir[4] = {0,1,2,3}; //Для сверки с недоступными полями и направлениями
for (int i = 0; i < 100; i++) //Заполнение массива доступных полей
arr[i]
= i;
//Процесс создания 10 кораблей
for (int sh = 0; sh < 10; sh++)
{
int count; //Вид корабля
switch (sh)
{
case 0: count = 3; break;
case 1: count = 2; break;
case 2: count = 2; break;
case 3: count = 1; break;
case 4: count = 1; break;
case 5: count = 1; break;
default: count = 0;
}
cl = false;
//Заполнение массива доступных направлений
for (int k = 0; k < 4; k++)
arrdir[k] = k;
//Выбор случайного поля
M2: do
{
Randomize();
xc = Random(100);
//Сверить, доступно ли оно
if (xc == arr[xc])
{
cl = true;
xx = xc;
}
}
while
(!cl);
//Выбор направления корабля
M1: do
{
cl = false;
xx = xc; //Запомнить выбранное поле
//Проверка на существование
for (int m = 0; m < 4; m++)
if (arrdir[m] != -1) { cl = true; break; }
if (!cl)
{
//Заполнение массива направлений
for (int k = 0; k < 4; k++)
arrdir[k] = k;
goto M2; //Переход к выбору нового поля
}
//Выбор направления
do
{
cl = false;
Randomize();
dir = Random(4);
//Проверка на
if (dir == arrdir[dir])
{
arrdir[dir] = -1;
cl = true;
}
}
while (!cl);
//Проверка на то, впишется ли корабль
cl = false;
switch (dir)
{
case 0: if (xx%10 >= count) cl = true; break;
case 1: if (xx - 10*count >= 0) cl = true; break;
case 2: if (xx%10 <= 9 - count) cl = true; break;
case 3: if (99 - xx >= 10*count) cl = true; break;
}
}
while
(!cl);
//Проверка расположения других кораблей относительно полей данного
for (int j = 0; j < count + 1; j++)
{
cl = false;
//Переход в зависимости от направления
switch (dir)
{
case 0: if (xx%10) xx -= 1; break;
case 1: if ((int)(xx/10)) xx -= 10; break;
case 2: if ((xx%10) != 9) xx += 1; break;
case 3: if ((int)(xx/10) != 9 )xx += 10; break;
}
//Проверка на доступность
if (xx == arr[xx])
cl = true;
//Иначе переход к выбору
if (!cl) goto M1;
}
//Заполнение
массива в соответствии с
//и прорисовка кораблей
int
coor_x = xc%10, coor_y = (int)(xc/10);
switch (dir)
{
case 0: Ships2[sh]->Width = (count+1)*29;
Ships2
Ships2
Ships2
Ships2
Ships2
case 1: Ships2[sh]->Width = 29;
Ships2
Ships2
Ships2