Логическая игра «Морской бой»

Автор работы: Пользователь скрыл имя, 17 Февраля 2011 в 16:34, курсовая работа

Описание работы

Программный продукт «Логическая игра «Морской бой»», используемый пользователем персонального компьютера.
Разработчиком программы является студент Томского Политехнического Университета группы 8880 специальности «Информационные системы и технологии в бизнесе» Погребной Вадим Юрьевич.
Программный продукт создается на основании выданного задания от преподавателя кафедры АИКС Луневой Е.Е.
Первым этапом разработки программного продукта будет составление функциональной спецификации, в которой будет описана программа с точки зрения пользователя, её основные функции. Вторым этапом будет разработка основных модулей программы и их функциональных возможностей, кодирование программы, отладка и тестирование программы.

Файлы: 1 файл

Пояснительная записка.doc

— 552.50 Кб (Скачать файл)

                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.WAV", 0, SND_ASYNC);

                        MessageDlgPos("Корабли не должны соприкасаться!!!", mtWarning,

                            TMsgDlgButtons() << mbRetry, 0, SeaButForm->Left + SeaButForm->Width/2 - 120,

                            SeaButForm->Top + SeaButForm->Height - 130);

                        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.WAV", 0, SND_ASYNC);

                        MessageDlgPos("Корабли не должны соприкасаться!!!", mtWarning,

                            TMsgDlgButtons() << mbRetry, 0, SeaButForm->Left + SeaButForm->Width/2 - 120,

                            SeaButForm->Top + SeaButForm->Height - 130);

                        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[sh]->Height = 29;

                            Ships2[sh]->Left = (coor_x-count)*29;

                            Ships2[sh]->Top = coor_y*29;

                            Ships2[sh]->ColCount = count+1;

                            Ships2[sh]->RowCount = 1; break;

                case 1: Ships2[sh]->Width = 29;

                            Ships2[sh]->Height = (count+1)*29;

                            Ships2[sh]->Left = coor_x*29;

                            Ships2[sh]->Top = (coor_y-count)*29;

Информация о работе Логическая игра «Морской бой»