Разработка приложения для Windows, представ-ляющего собой компьютерную игру “Морской бой”

Автор работы: Пользователь скрыл имя, 23 Июня 2011 в 00:44, курсовая работа

Описание

Цель курсовой работы – разработка приложения , моделирующего игру “Морской бой”.
Для выполнения поставленной задачи использовалась среда программирования ИСР Delphi 7.0.
ИСР Delphi – это среда разработки программ, ориентированных на работу в Windows. В основе идеологии Delphi лежит технология визуального проектирования и методология объектно-ориентированного программирования. Для представления программ в Delphi используется разработанный фирмой Borland язык Object Pascal, в основе которого лежит Turbo Pascal. Слово “Object” особо подчеркивает, что язык поддерживает концепцию объектно-ориентированного программирования.

Содержание

ОСНОВНЫЕ ДАННЫЕ О РАБОТЕ 1
СОДЕРЖАНИЕ 2
ВВЕДЕНИЕ 3
1. РАЗРАБОТКА ЭСКИЗНОГО И ТЕХНИЧЕСКОГО ПРОЕКТОВ ПРОГРАММЫ 4
1.1. Назначение и область применения 4
1.2. Постановка задачи 4
1.3. Описание алгоритма 4
1.4. Организация входных и выходных данных 12
1.5. Выбор состава технических и программных средств 12
2. РАЗРАБОТКА РАБОЧЕГО ПРОЕКТА 13
2.1. Разработка программы 13
2.2 Спецификация программы 15
2.3 Текст программы 16
2.4 Описание программы 25
2.5 Тестирование программы 25
3. ВНЕДРЕНИЕ 26
ЗАКЛЮЧЕНИЕ 29
ГЛОССАРИЙ 30
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 32

Работа состоит из  1 файл

старая Курсовая.doc

— 450.50 Кб (Скачать документ)

If Proverka(mX,mY,Comppole,Comp) then

  Begin

   mX:=0;

   mY:=0;

   Goto 1;

  End;

If Comp[mX,mY]=2 then

  Begin

   mX:=0;

   mY:=0;

   vX:=0;

   vY:=0;

   Exit;

  End;

 If (vX=0)and(vY=0) then Repeat

                          Case random(4) of

                           0:vY:=-1;

                           1:vX:=-1;

                          2:vX:=1;

                          3:vY:=1;

                         End;

                          If (Comp[mX+vX,mY+vY]>1)or(mX+vX=0)or(mY+vY=0)or(mX+vX=11)

                             or(mY+vY=11) Then

                           Begin

                            vX:=0;

                           vY:=0;

                           End;

                        Until Comp[mX+vX,mY+vY]<2;

 Repeat

  mX:=mX+vX;

  mY:=mY+vY;

  Draw(mX,mY,True,Comppole,Comp);

  If Proverka(mX,mY,Comppole,Comp) then

   Begin

    mX:=0;

    mY:=0;

    vX:=0;

    vY:=0;

    Goto 1;

   End

  else If ((mX+vX=0)or(mX+vX=11)or(mY+vY=0)or(mY+vY=11))and(Comp[mX,mY]<>2) Then

   Begin

    vX:=-vX;

    vY:=-vY;

    Goto 1;

   End;

 Until Comp[mX,mY]=2;

If (mX>0)or(mY>0) then

  Begin

   vX:=-vX;

   vY:=-vY;

   mX:=mX+vX;

   mY:=mY+vY;

  If (Comp[mX+vX,mY+vY]=2)or(mX+vX<1)or(mY+vY<1) then

    Begin

     vX:=0;

     vY:=0;

    End;

  End

Else

  Begin

   vX:=0;

   vY:=0;

  End;

End; 

procedure TMainform.ManpoleClick(Sender: TObject);

// Процедура хода игрока

Begin

// Определение координат  щелчка мыши

 X:=Manpole.Selection.Right+1;

Y:=Manpole.Selection.Bottom+1;

  // Если ячейка открыта, то выходим

 If Man[X,Y] in [2,3] Then Exit;

 Draw(X,Y,True,Manpole,Man);

Proverka(X,Y,Manpole,Man);

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

 If Win Then Exit;

// Если в ячейке  ничего нет, то - ход компьютера

 If Man[X,Y]=2 then CompRun;

end; 

procedure TMainForm.Generate;

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

Label 1,2;

var napr:array [0..3] of byte;

    // Сохраняет направления, которые были испробованы при постановке корабля на поле

    t1:integer;

    // Вспомогательная  переменная

Begin

For x:=4 downto 1 do

  For y:=x to 4 do

   Begin

     // Обнуления направлений

    1:For Size:=0 to 3 do

       Napr[Size]:=0;

    // Случайный выбор  координат

    Repeat

     mX:=random(10)+1;

     mY:=random(10)+1;

    Until Man[mX,mY]=0;

    2:t1:=0;

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

    For Size:=0 to 3 do

     t1:=t1+Napr[Size];

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

    If t1=4 then Goto 1;

    Repeat

     vY:=0; vX:=0;

      // Случайное определение направления

     Size:=random(4);

     Case Size of

      0:vX:=1;

      1:vX:=-1;

      2:vY:=-1;

      3:vY:=1;

     end;

    Until Napr[Size]=0;

    Napr[Size]:=1;

    // Если направление  выбрано по оси  X, то...

    If vX<>0 Then

     Begin

      If vX=1 Then vX:=mX+X-1

              Else vX:=mX-X+1;

      // Проверка преемственности  размещения корабля

      If (vX<1)or(vX>10) Then Goto 2;

      If not ArRound(Man,mX,mY,vX,mY) Then Goto 2;

      // Регистрация корабля в массиве

      For mX:=mX To vX Do

       Man[mX,mY]:=1;

     End;

    // Если направление  выбрано по оси  Y, то...

    If vY<>0 Then

     Begin

      If vY=1 Then vY:=mY+X-1

              Else vY:=mY-X+1;

      // Проверка преемственности  размещения корабля

      If (vY<1)or(vY>10) Then Goto 2;

      If not ArRound(Man,mX,mY,mX,vY) Then Goto 2;

      // Размещение корабля в массиве

      For mY:=mY To vY Do

       Man[mX,mY]:=1;

     End;

   End;

End; 

procedure TMainform.Menu2Click(Sender: TObject);

// Выбор из главного  меню пункта "Начать  новую" 

procedure Clear(Obj:TDrawGrid; var AR:Arr);

// Очистка графического  поля и соответствующего этому полю массива

Begin

 Obj.Canvas.Brush.Color:=ClWhite;

For x:=1 To 10 Do

  For y:=1 To 10 do

   Begin

    Ar[x,y]:=0;

    Obj.Canvas.FillRect(Rect(21*(x-1),21*(y-1),21*(x-1)+20,21*(y-1)+20));

   End;

End; 

Begin

Clear(Comppole,Comp);

Clear(Manpole,Man);

Manpole.Enabled:=False;

Label1.Font.Color:=ClBlack;

Label1.Caption:='Корабль: 4-палубный';

Size:=1;

For x:=4 downto 1 do

  For y:=x to 4 do

   Begin

    Boat[Size]:=x;

    Inc(Size);

   End;

Size:=1;

Comppole.Enabled:=True;

End; 

procedure TMainform.ComppoleMouseDown(Sender: TObject;Button: TMouseButton;

          Shift: TShiftState; X, Y: Integer);

// Координаты, при нажатии  клавиши мыши (при  расстановке кораблей  игроком)

Begin

 If Button<>MbLeft Then Exit;

mX:=Comppole.Selection.Right+1;

mY:=Comppole.Selection.Top+1;

End; 

procedure TMainform.ComppoleMouseUp(Sender: TObject; Button: TMouseButton;

         Shift: TShiftState; X, Y: Integer);

// Координаты при  отпускании клавиши  мыши (при расстановке  кораблей игроком)

Begin

If Button<>MbLeft Then Exit;

X:=Comppole.Selection.Right+1;

Y:=Comppole.Selection.Top+1;

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

 If X=mx then

  Begin

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

   If Boat[Size]<>abs(Y-my)+1 then exit;

   // Проверка на  пустоту соседних клеток

   If not ArRound(Comp,X,mY,X,Y) Then Exit;

   // Регистрация корабля в массиве и отображение его на игровом поле

   For mY:=mY to Y do

    Begin

     Comp[X,mY]:=1;

     Draw(X,mY,False,Comppole,Comp);

    End;

  End

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

 Else If Y=my Then

  Begin

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

   If Boat[Size]<>abs(X-mx)+1 then exit;

   // Проверка на  пустоту соседних  клеток

   If not ArRound(Comp,mX,Y,X,Y) Then exit;

   // Запись корабля  в массив и отображение  его на игровом  поле

   For mX:=mX to X do

    Begin

     Comp[mX,Y]:=1;

     Draw(mX,Y,False,Comppole,Comp);

    End;

  End

 Else Exit;

 Boat[Size]:=0;

// Проверка на расстановку  всех кораблей

 If Size<10 then

  Begin

   Inc(Size);

   Label1.Caption:='Корабль: '+inttostr(Boat[Size])+'-палубный';

  End

 Else

  Begin

   Size:=0;

   // Вызов процедуры расстановки кораблей компьютером

   Generate;

   Label1.Font.Color:=ClLime;

   Label1.Caption:='Ваше поле:';

   Comppole.Enabled:=False;

   Comppole.Tag:=20;

   Manpole.Enabled:=True;

   Manpole.Tag:=20;

   mX:=0; mY:=0; vX:=0; vY:=0;

  End;

End; 

procedure TMainform.FormCreate(Sender: TObject);

Begin

Randomize;

vX:=0;

vY:=0;

mX:=0;

Информация о работе Разработка приложения для Windows, представ-ляющего собой компьютерную игру “Морской бой”