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

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

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

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

Файлы: 1 файл

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

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

                            Ships2[sh]->ColCount = 1;

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

                case 2: Ships2[sh]->Width = (count+1)*29;

                            Ships2[sh]->Height = 29;

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

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

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

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

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

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

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

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

                            Ships2[sh]->ColCount = 1;

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

                } 

          for (int i = 0; i < count + 1; i++)

            {

            field2[coor_y][coor_x] = 1;

            switch (dir)

                {

                case 0: coor_x--; break;

                case 1: coor_y--; break;

                case 2: coor_x++; break;

                case 3: coor_y++; break;

                }

            } 

          //Заполнение  границ вокруг корабля недоступными  значениями

          //с  учетом границ поля боя и  выбранного направления

          int bord1 = 0, bord2 = 0, bord3 = 0, bord4 = 0;

          switch (dir)

            {

            case 0: if (!(coor_x + 1))

                            bord1 = 1;

                        else

                            if (coor_x + count + 1 == 9)

                              bord3 = 1;

                        if (!coor_y)

                            bord2 = 1;

                        else

                            if (coor_y == 9)

                              bord4 = 1;

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

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

                                  arr[xc+u*10+v] = -1;

                        break;

            case 1: if (!coor_x)

                            bord1 = 1;

                        else

                            if (coor_x == 9)

                              bord3 = 1;

                        if (!(coor_y + 1))

                            bord2 = 1;

                        else

                            if (coor_y + count + 1 == 9)

                              bord4 = 1;

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

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

                                  arr[xc+u*10+v] = -1;

                        break;

            case 2: if (!(coor_x - count - 1))

                            bord1 = 1;

                        else

                            if (coor_x - 1 == 9)

                              bord3 = 1;

                        if (!coor_y)

                            bord2 = 1;

                        else

                            if (coor_y == 9)

                              bord4 = 1;

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

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

                                  arr[xc+u*10+v] = -1;

                        break;

            case 3: if (!coor_x)

                            bord1 = 1;

                        else

                            if (coor_x == 9)

                              bord3 = 1;

                        if (!(coor_y - count - 1))

                            bord2 = 1;

                        else

                            if (coor_y - 1 == 9)

                              bord4 = 1;

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

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

                                  arr[xc+u*10+v] = -1;

                        break;

            } 

          }

    } 

    //Перетаскивание  кораблей над полем

    void __fastcall TSeaButForm::GridField1DragOver(TObject *Sender,

            TObject *Source, int X, int Y, TDragState State, bool &Accept)

    {

    Accept = Source->ClassNameIs("TDrawGrid");

    TDrawGrid *S = (TDrawGrid *) Source;

    S->DragCursor = (Controls::TCursor)5;   //Изменение курсора

    //Изменение  координат корабля в соответствии  с положением указателя мыши

    S->Top = Y - Y%29;

    S->Left = X - X%29;

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

    if (S->Left + S->Width > 300)

      switch ((int)S->Tag/100)

       {

       case 4: S->Left = 174; break;

       case 3: S->Left = 203; break;

       case 2: S->Left = 232; break;

       case 1: S->Left = 261; break;

       }

    if (S->Top + S->Height > 300)

      switch ((int)S->Tag/100)

       {

       case 4: S->Top = 174; break;

       case 3: S->Top = 203; break;

       case 2: S->Top = 232; break;

       case 1: S->Top = 261; break;

       }

    } 

    //Возможность  перетаскивания при положении  курсора над кораблем

    void __fastcall TSeaButForm::ShipsDragOver(TObject *Sender, TObject *Source,

            int X, int Y, TDragState State, bool &Accept)

    {

    TDrawGrid *S = (TDrawGrid *) Source;

    Accept = Source->ClassNameIs("TDrawGrid");

    S->DragCursor = (Controls::TCursor)5;     //Изменение  курсора

    } 

    //При  перетаскивании корабля над формой

    void __fastcall TSeaButForm::FormDragOver(TObject *Sender, TObject *Source,

            int X, int Y, TDragState State, bool &Accept)

    {

    TDrawGrid *S = (TDrawGrid *)Source;

    S->DragCursor = (Controls::TCursor)7;      //Изменение  курсора

    } 

    //Изменение  положения корабля при нажатии  правой кнопки мыши

    void __fastcall TSeaButForm::ShipsMouseDown(TObject *Sender,

            TMouseButton Button, TShiftState Shift, int X, int Y)

    {

    TDrawGrid *S = (TDrawGrid *) Sender;

    //Проверка  нажатой кнопки

    if (Button == mbRight)

      {

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

      //Определение положения и замена на противоположное

      if (S->Width > 29)

          {

          S->Height = S->Width;

          S->Width = 29;

          S->RowCount = S->ColCount;

          S->ColCount = 1;

          }

      else

          {

          S->Width = S->Height;

          S->Height = 29;

          S->ColCount = S->RowCount;

          S->RowCount = 1;

          }

      }

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

    if (S->Left + S->Width > 300)

      switch ((int)S->Tag/100)

       {

       case 4: S->Left = 174; break;

       case 3: S->Left = 203; break;

       case 2: S->Left = 232; break;

       case 1: S->Left = 261; break;

       }

    if (S->Top + S->Height > 300)

      switch ((int)S->Tag/100)

       {

       case 4: S->Top = 174; break;

       case 3: S->Top = 203; break;

       case 2: S->Top = 232; break;

       case 1: S->Top = 261; break;

       } 

    } 

    //О  программе

    void __fastcall TSeaButForm::AboutClick(TObject *Sender)

    {

    //Запоминание  изображения канвы

    SaveBM (1);

    SaveBM (2);

    //Показать  окно

    AboutProg->Position = poMainFormCenter;

    AboutProg->Visible = Enabled;

    } 

    //Интерфейс  игры с компьютером

    void __fastcall TSeaButForm::CompClick(TObject *Sender)

    {

    //Если  выбран интерфейс игры с человеком

    if (Human->Checked)

      {

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

      //Активизация элементов интерфейса и удаление кораблей

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