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

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

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

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

Файлы: 1 файл

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

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

            cl = true;

            Cpu.RowNum[Choice] = -1;

            }

          }

      while (!cl);

      }

    //Если  же было попадание

    else

      {

      //Если неизвестно положение корабля

      if (!Cpu.TarDir)

      //Выбираем его случайно

      do

          {

          Choice = Cpu.Choice;

          Randomize();

          Cpu.Direction = Random(4);

          //Сверяем  на его доступность

          if (Cpu.Direction == Cpu.RowDir[Cpu.Direction])

            {

            cl = true;

            Cpu.RowDir[Cpu.Direction] = -1;   //Запоминаем  его

            //Проверка на границы и на доступность этого поля

            //Если недоступно, то повторить  выбор

            switch (Cpu.Direction)

                {

                case 0: if (!(Choice%10))

                              {

                              cl = false; break;

                              }

                            else

                              if (Cpu.RowNum[Choice-1] == -1)

                                  {

                                  cl = false; break;

                                  }

                            break;

                case 1: if (!(int)(Choice/10))

                              {

                              cl = false; break;

                              }

                            else

                              if (Cpu.RowNum[Choice-10] == -1)

                                  {

                                  cl = false; break;

                                  }

                            break;

                case 2: if (Choice%10 == 9)

                              {

                              cl = false; break;

                              }

                            else

                              if (Cpu.RowNum[Choice+1] == -1)

                                  {

                                  cl = false; break;

                                  }

                            break;

                case 3: if ((int)(Choice/10) == 9)

                              {

                              cl = false; break;

                              }

                            else

                              if (Cpu.RowNum[Choice+10] == -1)

                                  {

                                  cl = false; break;

                                  }

                            break;

                }

            }

          }

      while (!cl);

      //Если же известно положение корабля

      else

          //Проверяем,  верно ли выбрано было направление  его

          if (!Cpu.TarDirect)

            {

            //Если нет, тогда меняем на  противоположное

    M3:   switch (Cpu.Direction)

                  {

                  case 0: Cpu.Direction = 2; Choice = Cpu.Choice; break;

                  case 1: Cpu.Direction = 3; Choice = Cpu.Choice; break;

                  case 2: Cpu.Direction = 0; Choice = Cpu.Choice; break;

                  case 3: Cpu.Direction = 1; Choice = Cpu.Choice; break;

                  }

            Cpu.TarDirect = true;

            }

      } 

    //Определение  координат для стрельбы

    if (Cpu.Direction == -1)        //Если производится первый выстрел

      {

      x = Choice%10;

      y = (int)(Choice/10);

      }

    else

      {

      //Когда уже выбрано направление,  проверяем на граничность

      //и на доступность поля, если  все в порядке, то выстрел  можно выполнять

      //И тогда можно подтвердить  выбор

      switch (Cpu.Direction)

            {

            case 0: if (!(Choice%10))

                                  goto M3;

                              else

                                  if (Cpu.RowNum[Choice-1] == -1)

                                    goto M3;

                        Choice--; Cpu.RowNum[Choice] = -1; break;

            case 1: if (!(int)(Choice/10))

                                  goto M3;

                              else

                                  if (Cpu.RowNum[Choice-10] == -1)

                                    goto M3;

                        Choice-=10; Cpu.RowNum[Choice] = -1; break;

            case 2: if (Choice%10 == 9)

                                  goto M3;

                              else

                                  if (Cpu.RowNum[Choice+1] == -1)

                                    goto M3;

                        Choice++; Cpu.RowNum[Choice] = -1; break;

            case 3: if ((int)(Choice/10) == 9)

                                  goto M3;

                              else

                                  if (Cpu.RowNum[Choice+10] == -1)

                                    goto M3;

                        Choice+=10; Cpu.RowNum[Choice] = -1; break;

            }

      //И определяем координаты

      x = Choice%10;

      y = (int)(Choice/10);

      } 

    TShiftState Shift;    //Пустая переменная для передачи в функцию выстрела 

    //Производим выстрел

    GridField1MouseDown (GridField1, mbLeft, Shift, 29*x + 1, 29*y + 1);

    } 

    //Проверка  на необходимость выстрела по  каждому полю

    void TSeaButForm::CheckDestr ()

    {

    int len = 0;       //Переменная указывает для какого вида корабля проверяем

    //Определяем все ли 1палубные убиты

    for (int i = 0; i < 4; i++)

      if (Ships1Destr[i])

          if (i == 3)

            len++;

          else continue;

      else break;

    if (!len) return;   //Если нет, то выйти из функции 

    //Проверяем  для 1палубных

    for (int d1 = 0; d1 < 100; d1++)

      //Если нашли доступное поле

      if (Cpu.RowNum[d1] != -1)

          {

          //Проверяем  на то, есть ли вокруг него  доступные поля

          if (d1%10)

            if (Cpu.RowNum[d1-1] != -1) continue;

          if (d1>9)

            if (Cpu.RowNum[d1-10] != -1) continue;

          if (d1%10 < 9)

            if (Cpu.RowNum[d1+1] != -1) continue;

          if (d1<90)

            if (Cpu.RowNum[d1+10] != -1) continue;

            else  Cpu.RowNum[d1] = -1;     //Если нету, то делаем поле недоступным

          else Cpu.RowNum[d1] = -1;

          } 

    //Если 1палубные убиты, то определяем  все ли 2палубные убиты

    if (len)

      for (int i = 4; i < 7; i++)

          if (Ships1Destr[i])

            if (i == 6)

                len++;

            else continue;

          else break;

    if (len == 1) return; 

    //Делаем  аналогичную проверку, как и 1 палубных

    //Только  смотрим на ближайшие 2 поля  вокруг выбранного

    for (int d1 = 0; d1 < 100; d1++)

      if (Cpu.RowNum[d1] != -1)

          {

          if (d1%10)

            if (Cpu.RowNum[d1-1] != -1)

                if (d1%10>1)

                  {

                  if (Cpu.RowNum[d1-2] != -1) continue;

                  else

                      if (d1%10<9)

                        if (Cpu.RowNum[d1+1] != -1) continue;

                  }

                else

                  if (Cpu.RowNum[d1+1] != -1) continue;

          if (d1>9)

            if (Cpu.RowNum[d1-10] != -1)

                if (d1>19)

                  {

                  if (Cpu.RowNum[d1-20] != -1) continue;

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