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

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

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

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

Файлы: 1 файл

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

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

  //Проверка поля

      if (Field->Tag == 1)

      {

      //Если произошло попадание

      if (field1[yp][xp] == 1)

          {

          //Звук  и увеличение количества выстрелов

          PlaySound("Sounds\\SOUNBROK.WAV", 0, SND_ASYNC);

          Shoots2->Caption = IntToStr(StrToInt(Shoots2->Caption)+1); 

          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)||(field1[yp][temp]==2)) temp++; 

            //Если не было нераненных полей

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

                Count1Destr++;    //Увеличиваем количество убитых кораблей

                //Заполняем массив убитых кораблей

                switch (count)

                  {

                  case 2: for (int dsh = 4; dsh < 7; dsh++)

                                  if (!Ships1Destr[dsh])

                                    {

                                    Ships1Destr[dsh] = 1;

                                    break;

                                    } break;

                  case 3: for (int dsh = 7; dsh < 9; dsh++)

                                  if (!Ships1Destr[dsh])

                                    {

                                    Ships1Destr[dsh] = 1;

                                    break;

                                    } break;

                  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)||(field1[temp][xp]==2)) temp++; 

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

                Count1Destr++;

                switch (count)

                  {

                  case 2: for (int dsh = 4; dsh < 7; dsh++)

                                  if (!Ships1Destr[dsh])

                                    {

                                    Ships1Destr[dsh] = 1;

                                    break;

                                    } break;

                  case 3: for (int dsh = 7; dsh < 9; dsh++)

                                  if (!Ships1Destr[dsh])

                                    {

                                    Ships1Destr[dsh] = 1;

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