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

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

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

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

Файлы: 1 файл

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

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

    S1->Caption = '\0';

    S2->Caption = '\0';

    S3->Caption = '\0';

    S4->Caption = '\0';

    S5->Caption = '\0';

    S6->Caption = '\0';

    S7->Caption = '\0';

    S8->Caption = '\0';

    S9->Caption = '\0';

    S10->Caption = '\0'; 

    char *temp;

    temp = new char [20];

    //Загружаем  в temp строки из файла и показываем их

    //пока  не конец файла

    if (!infile.eof())

      {

      infile.getline(temp, 20, '\n');

      Name1->Caption = temp;

      infile >> temp;

      S1->Caption = temp;

      infile.seekg(infile.tellg()+2);    //перемещаемся  на 2 позиции вперед

      }

    else return;

    if (!infile.eof())

      {

      infile.getline(temp, 20, '\n');

      Name2->Caption = temp;

      infile >> temp;

      S2->Caption = temp;

      infile.seekg(infile.tellg()+2);

      }

    else return;

    if (!infile.eof())

      {

      infile.getline(temp, 20, '\n');

      Name3->Caption = temp;

      infile >> temp;

      S3->Caption = temp;

      infile.seekg(infile.tellg()+2);

      }

    else return;

    if (!infile.eof())

      {

      infile.getline(temp, 20, '\n');

      Name4->Caption = temp;

      infile >> temp;

      S4->Caption = temp;

      infile.seekg(infile.tellg()+2);

      }

    else return;

    if (!infile.eof())

      {

      infile.getline(temp, 20, '\n');

      Name5->Caption = temp;

      infile >> temp;

      S5->Caption = temp;

      infile.seekg(infile.tellg()+2);

      }

    else return;

    if (!infile.eof())

      {

      infile.getline(temp, 20, '\n');

      Name6->Caption = temp;

      infile >> temp;

      S6->Caption = temp;

      infile.seekg(infile.tellg()+2);

      }

    else return;

    if (!infile.eof())

      {

      infile.getline(temp, 20, '\n');

      Name7->Caption = temp;

      infile >> temp;

      S7->Caption = temp;

      infile.seekg(infile.tellg()+2);

      }

    else return;

    if (!infile.eof())

      {

      infile.getline(temp, 20, '\n');

      Name8->Caption = temp;

      infile >> temp;

      S8->Caption = temp;

      infile.seekg(infile.tellg()+2);

      }

    else return;

    if (!infile.eof())

      {

      infile.getline(temp, 20, '\n');

      Name9->Caption = temp;

      infile >> temp;

      S9->Caption = temp;

      infile.seekg(infile.tellg()+2);

      }

    else return;

    if (!infile.eof())

      {

      infile.getline(temp, 20, '\n');

      Name10->Caption = temp;

      infile >> temp;

      S10->Caption = temp;

      infile.seekg(infile.tellg()+2);

      }

    else return; 

    delete [] temp;

    infile.close(); 

    } 
     

         SeaButFrm.cpp 

    //Создание  новых кораблей

    void TSeaButForm::NewShips (int number)

    {

    if (number == 1) //Проверка номера поля (1 или 2), если 1ое поле

      {

      DelShips (1);  //Удалить корабли 

      Ships1 = new TDrawGrid * [10];    //Создать динамические корабли

      for (int i = 0; i < 10; i++)      //Придаем им необходимый внешний вид

          {

          Ships1[i] = new TDrawGrid (SeaButForm);

          Ships1[i]->Left = 0;

          Ships1[i]->Top = 29*i;

          Ships1[i]->DragMode = dmAutomatic;

          Ships1[i]->Height = 29;

          Ships1[i]->DefaultColWidth = 27;

          Ships1[i]->DefaultDrawing = false;

          Ships1[i]->DefaultRowHeight = 27;

          Ships1[i]->FixedCols = 0;

          Ships1[i]->FixedRows = 0;

          Ships1[i]->GridLineWidth = 2;

          Ships1[i]->RowCount = 1;

          Ships1[i]->ScrollBars = ssNone;

          Ships1[i]->BevelInner = bvNone;

          Ships1[i]->BevelOuter = bvNone;

          Ships1[i]->BorderStyle = bsSingle;

          Ships1[i]->Color = clYellow;

          Ships1[i]->FixedColor = clYellow;

          Ships1[i]->OnDragOver = ShipsDragOver;

          Ships1[i]->OnMouseDown = ShipsMouseDown;

          Ships1[i]->Parent = Field1;

          Ships1[i]->Cursor = (Controls::TCursor)4;

          Ships1[i]->DragCursor = (Controls::TCursor)5;

          }

      Ships1[0]->Tag = 410 + number;

      Ships1[1]->Tag = 310 + number;

      Ships1[2]->Tag = 320 + number;

      Ships1[3]->Tag = 210 + number;

      Ships1[4]->Tag = 220 + number;

      Ships1[5]->Tag = 230 + number;

      Ships1[6]->Tag = 110 + number;

      Ships1[7]->Tag = 120 + number;

      Ships1[8]->Tag = 130 + number;

      Ships1[9]->Tag = 140 + number;

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

          {

          Ships1[i]->Width = 29*(int)(Ships1[i]->Tag/100);

          Ships1[i]->ColCount = (int)(Ships1[i]->Tag/100);

          }

      }

    else    //Если 2ое поле, делать для него то же самое

      {………

      }

    } 

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

    bool TSeaButForm::CheckShips (int number)

    {

    if (number == 1)        //Если для 1го поля

      {

      Newfield (1);             //Создаем массив 1го поля 

      int x = 0, y = 0;

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

          {

          x = Ships1[i]->Left/29;       //Определяем координаты кораблей

          y = Ships1[i]->Top/29; 

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

          //площадей  вокруг кораблей. Как по x, так и по y

          int y_temp = 0, x_temp = 0, x_len, y_len; 

          //Проверка  на расположение корабля у  границ

          x == 9 ? x_len = 2 : x_len = 3;

          y == 9 ? y_len = 2 : y_len = 3;

          if (y)

            y_temp = y - 1;

          else

            y_len = 2;

          if (x)

            x_temp = x - 1;

          else

            x_len = 2; 

          //Проверка  расстояний между кораблями и  1 полем проверяемого корабля

          for (int ky = 0; ky < y_len; ky++)

            {

            for (int kx = 0; kx < x_len; kx++)

                {

                //Если есть рядом

                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 поля в ширину

          if (Ships1[i]->Width > 30)

            {

            x++;     //Переходим правее и проводим проверку для остальных полей корабля

            for (int j = 0; j < Ships1[i]->ColCount - 1; j++)

                {

                y_temp = 0, x_temp = 0;

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