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

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

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

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

Файлы: 1 файл

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

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

                                    break;

                                    } break;

                  default: Ships1Destr[9] = 1;

                  }

                if (Comp->Checked)

                  {

                  Cpu.TarDir = false;

                  Cpu.Target = false;

                  Cpu.TarDirect = false;

                  Cpu.TarDestr = true;

                  }

                for (int u = temp - 1 + bord2; u < temp + count + 1 - bord4; u++)

                  for (int v = xp-1+bord1; v < xp+2-bord3; v++)

                      if (field1[u][v] == 0)

                        {

                        field1[u][v] = 2;

                        SeaDraw (1,v,u,false);

                        }

                }

            } 

          //Если  убит однопалубный корабль

          //повторяем  те же процессы

          if ((dir == 0) && (field1[yp][xp-1+bord1]!=1) && (field1[yp-1+bord2][xp]!=1)

                && (field1[yp][xp+1-bord3]!=1) && (field1[yp+1-bord4][xp]!=1))

            {

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

            Count1Destr++;

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

                if (!Ships1Destr[dsh])

                  {

                  Ships1Destr[dsh] = 1;

                  break;

                  }

            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 = xp - 1 + bord1; v < xp + 2 - bord3; v++)

                      if (field1[u][v] == 0)

                        {

                        field1[u][v] = 2;

                        SeaDraw (1,v,u,false);

                        }

            }

          } 

      //Если произошло попадание в  "молоко"

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

          {

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

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

          //Указываем  компьютеру, что выбрано неправильное  направление

          if (Comp->Checked)

            Cpu.TarDirect = false;

          //Ставим  метку стреленого места

          field1[yp][xp] = 2;

          //Указываем  графически

          SeaDraw (1,xp,yp,false);

          //Позволяем  стрелять другому игроку

          Field1->Enabled = false;

          Field2->Enabled = true;

          RichEdit2->Color = clNavy;

          RichEdit1->Color = clRed;

          }

      }

      //Если стрельба проводится по 2му полю

      //то делать то же самое для  него

      else

      {……………

      }

      //Сохранить изображение канв

      SaveBM (1);

      SaveBM (2);

      //Если стрельбу не производит  компьютер

      if (!Timer2->Enabled && !Timer1->Enabled)

          SetWindow (1);  //Восстановить первоначальные свойства окна

      }

    } 

    //Таймер  для прорисовки линий и стрельбы  компьютера

    void __fastcall TSeaButForm::Timer1Timer(TObject *Sender)

    {

    //Проверка  активного поля

    if (Field1->Enabled)

      {

      //Дорисовать линию через время

      GridField1->Canvas->LineTo(linex,liney);

      //Выключить таймер

      Timer1->Enabled = false;

      //Если убиты не все корабли

      if (Count1Destr != 10)

          {

          //Если  компьютер стреляет, то указать  необходимые

          //ему  атрибуты

          if (Comp->Checked)

            {

            if (Cpu.Target)

                {

                if (Cpu.TarDir)

                  Cpu.TarDirect = true;

                else

                  {

                  Cpu.TarDir = true;

                  switch (Cpu.Direction)

                      {

                      case 0: Cpu.RowDir[1] = -1; Cpu.RowDir[3] = -1; break;

                      case 1: Cpu.RowDir[0] = -1; Cpu.RowDir[2] = -1; break;

                      case 2: Cpu.RowDir[1] = -1; Cpu.RowDir[3] = -1; break;

                      case 3: Cpu.RowDir[0] = -1; Cpu.RowDir[2] = -1; break;

                      }

                  Cpu.TarDirect = true;

                  }

                }

            else

                if (!Cpu.TarDestr)

                  Cpu.Target = true;

            //Включить 2ой таймер

            Timer2->Enabled = true;

            }

          else  SetWindow (1);  //Если стреляет игрок восстановить окно

          }

      //Если убиты все корабли

      else

          {

          //Воспроизвести  разные звуки в зависимости от того

          //человек  или компьютер играл

          if (Comp->Checked)

            PlaySound("Sounds\\Sounholi.wav", 0, SND_ASYNC);

          else

            PlaySound("Sounds\\Sounhihi.wav", 0, SND_ASYNC);

          //Активизация  элементов

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

            Ships2[i]->Visible = true;

          Field1->Enabled = false;

          SetWindow(1);

          FrameAgain->Enabled = true;

          FIGHT->OnClick = NewGameClick;

          FrameAgain->OnClick = NewGameClick;

          SaveRes (2);

          Timer3->Enabled = true;

          }

      //Сохранить изображение канвы1

      SaveBM (1);

      }

    //При  стрельбе по 2му полю

    else

      {

      //Провести линию и отключить  таймер

      GridField2->Canvas->LineTo(linex,liney);

      Timer1->Enabled = false; 

      //Сохранить изображение

      SaveBM (2);

      //восстановить окно

      SetWindow (1);

      //Елси убиты все корабли

      if (Count2Destr == 10)

          {

          PlaySound("Sounds\\Sounhihi.wav", 0, SND_ASYNC);  //звук победы

          //Активизация  элементов

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

            Ships1[i]->Visible = true;

          Field2->Enabled = false;

          FrameAgain->Enabled = true;     //Для быстрого начала новой игры

          FIGHT->OnClick = NewGameClick;

          FrameAgain->OnClick = NewGameClick;

          SaveRes (1);                //Сохранить результаты

          Timer3->Enabled = true;

          }

      } 

    } 

    //Функция  выстрелов компьютера

    void TSeaButForm::CompShot ()

    {

    bool cl = false;       //Логическая переменная

    int x = 0, y = 0;      //Координаты выстрела 

    //Определение  ненужных координат

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

      for (int j = 0; j < 10; j++)

          if ((field1[i][j]!=1) && (field1[i][j]!=0))

            Cpu.RowNum[10*i + j] = -1; 

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

    if (!Cpu.Target)

      {

      CheckDestr ();    //Проверка на необходимость стрельбы по всем полям

      //Заполнение массива направлений  стрельбы

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

            Cpu.RowDir[i] = i;

      //Обнуление переменных, показывающих  попадания по кораблю

      Cpu.Direction = -1;

      Cpu.TarDestr = false;

      //Выбор случайного поля

      do

          {

          Randomize();

          Cpu.Choice = Random(100);

          Choice = Cpu.Choice;

          //Проверка  на доступность

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

            {

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