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

Автор работы: Пользователь скрыл имя, 25 Мая 2011 в 14:00, курсовая работа

Описание

В данной курсовой работе речь пойдет о создании несложной игровой программы «Морской бой», которая и будет являться объектом исследования.

Содержание

Введение………………………………………………………………………..3

1. Разработка эскизного и технического проектов программы.....................5

1.1 Назначение и область применения.............................................................4

1.2 Постановка задачи........................................................................................4

1.3 Описание алгоритма.....................................................................................5

2. Разработка рабочего проекта.......................................................................12

2.1 Разработка программы...............................................................................12

2.2 Текст программы........................................................................................14

Заключение.......................................................................................................26

Список использованных источников.............................................................27

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

КУРСОВАЯ.doc

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

For t1:=Xn-cl to Xe+cr do

  For t2:=Yn-cu to Ye+cd do

   If Ar[t1,t2]=1 Then

    Begin

     ArRound:=False;

     Exit;

    End;

end; 

procedure TMainform.CompRun;

// Процедура хода компьютера

Label 1;

Begin

// Выбор  случайной координаты, если они  не равны нулю

1:If (mX=0)and(mY=0) then repeat

                           mX:=random(10)+1;

                           mY:=random(10)+1;

                           If Win Then Exit;

                          until Comp[mX,mY]<2;

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

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;

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