Разработка приложения Игра Морской Бой

Автор работы: Пользователь скрыл имя, 15 Апреля 2014 в 21:31, курсовая работа

Краткое описание

Целью моей курсовой работы является программирование с помощью Delphi 5. Прежде чем начать выполнять свое задание рассмотрим эту систему программирования, в общем.
Delphi - это греческий город, где жил дельфийский оракул. И этим именем был назван новый программный продукт с феноменальными характеристиками.

Вложенные файлы: 1 файл

kursovaya_po_delphi.doc

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

 

For i:=1 to 10 do        //рисует  желтым цветом корабль(ещё не  поставленный)

  for j:=1 to 10 do

    begin

      if (b1[i,j]=1) then

        begin

          image1.Canvas.Brush.Color:=clyellow;

          image1.Canvas.Rectangle(20*i-20,20*j-20,20*(i),20*(j));

        end;

    end;

end;

end;

end

 

else

 

if rot=false then begin   //ставит корабль  по горизонтали

 

case k11 of     //смотрит какой  корабль ставить

0: case  x1 of    //смотрит есть  ли рядом с однопалубным кораблём  другие корабли

     1: if (b1[x1,y1]<>2) and

       (b1[x1+1,y1+1]<>2) and

       (b1[x1,y1+1]<>2) and

       (b1[x1,y1-1]<>2) and

       (b1[x1+1,y1-1]<>2) and

       (b1[x1+1,y1]<>2) then

         begin

          b1[x1,y1]:=2;

          riad:=true

         end

        else

          riad:=false;

     2..10:  if  (b1[x1,y1]<>2) and

       (b1[x1+1,y1+1]<>2) and

       (b1[x1,y1+1]<>2) and

       (b1[x1-1,y1+1]<>2) and

       (b1[x1-1,y1]<>2)and

       (b1[x1-1,y1-1]<>2)and

       (b1[x1,y1-1]<>2) and

       (b1[x1+1,y1-1]<>2) and

       (b1[x1+1,y1]<>2) then begin

     b1[x1,y1]:=2;

     riad:=true

     end

    else

      riad:=false;

     end;

1: case  x1 of     //смотрит  есть ли рядом с двупалубным кораблём другие корабли

     1:if(b1[x1,y1]<>2) and

       (b1[x1+1,y1+1]<>2) and

       (b1[x1,y1+1]<>2) and

       (b1[x1,y1-1]<>2) and

       (b1[x1+1,y1-1]<>2) and

 

       (b1[x1+2,y1-1]<>2) and

       (b1[x1+2,y1+1]<>2) and

 

      (b1[x1+2,y1]<>2) and (x1+1<11)

        then

           for i:=0 to k11 do

            begin

              b1[x1+i,y1]:=2;

              riad:=true

            end

        else

          riad:=false;

 

     2..10:   if (b1[x1,y1]<>2) and

       (b1[x1+1,y1+1]<>2) and

       (b1[x1,y1+1]<>2) and

       (b1[x1-1,y1+1]<>2) and

       (b1[x1-1,y1]<>2)and

       (b1[x1-1,y1-1]<>2)and

       (b1[x1,y1-1]<>2) and

       (b1[x1+1,y1-1]<>2) and

 

       (b1[x1+2,y1-1]<>2) and

       (b1[x1+2,y1+1]<>2) and

 

       (b1[x1+2,y1]<>2) and (x1+1<11) then

     for i:=0 to k11 do begin

     b1[x1+i,y1]:=2;

     riad:=true

     end

    else

      riad:=false;

     end;

 2: case x1 of                      //смотрит есть ли рядом с трехпалубным кораблём другие корабли

    1: if (b1[x1,y1]<>2) and

       (b1[x1+1,y1+1]<>2) and

       (b1[x1,y1+1]<>2) and

       (b1[x1,y1-1]<>2) and

       (b1[x1+1,y1-1]<>2) and

 

       (b1[x1+2,y1-1]<>2) and

       (b1[x1+2,y1+1]<>2) and

 

       (b1[x1+3,y1-1]<>2) and

       (b1[x1+3,y1+1]<>2) and

 

       (b1[x1+3,y1]<>2) and (x1+2<11) then

     for i:=0 to k11 do begin

     b1[x1+i,y1]:=2;

     riad:=true

     end

    else

      riad:=false;

    2..10:

    if (b1[x1,y1]<>2) and

       (b1[x1+1,y1+1]<>2) and

       (b1[x1,y1+1]<>2) and

       (b1[x1-1,y1+1]<>2) and

       (b1[x1-1,y1]<>2)and

       (b1[x1-1,y1-1]<>2)and

       (b1[x1,y1-1]<>2) and

       (b1[x1+1,y1-1]<>2) and

 

       (b1[x1+2,y1-1]<>2) and

       (b1[x1+2,y1+1]<>2) and

 

       (b1[x1+3,y1-1]<>2) and

       (b1[x1+3,y1+1]<>2) and

 

       (b1[x1+3,y1]<>2) and (x1+2<11) then

     for i:=0 to k11 do begin

     b1[x1+i,y1]:=2;

     riad:=true

     end

    else

      riad:=false

      end;

  3: if x1+3<11 then      //ставит четырехпалубный корабль

      begin

    for i:=0 to k11 do

    b1[x1+i,y1]:=2;

     riad:=true

       end

     else

    riad:=false;

 

end;

 

 

if  riad=true then begin  //смотрит если корабль поставлен то уменьшает счетчик

if (k11=3) then

  begin;

    k11:=k11-1;

  end;

 

if (k11=2) and (k33=0) then

   begin

    k11:=k11-1;

    k33:=k33-1

   end

else

    k33:=k33-1;

 

if (k11=1) and (k32=0) then

    begin

    k11:=k11-1;

    k32:=k32-1

    end

else

    k32:=k32-1;

 

if (k11=0) and (k31=0) then

    begin

    k11:=k11-1;

    k31:=k31-1

    end

else

    k31:=k31-1;

end;

end

 

else                     //ставит корабль по горизонтали

  begin

case k11 of              //смотрит какой корабль ставить

0: case  x1 of             //смотрит есть ли рядом с  однопалубным кораблём другие корабли

     1: if (b1[x1,y1]<>2) and

       (b1[x1+1,y1+1]<>2) and

       (b1[x1,y1+1]<>2) and

       (b1[x1,y1-1]<>2) and

       (b1[x1+1,y1-1]<>2) and

       (b1[x1+1,y1]<>2) then

         begin

          b1[x1,y1]:=2;

          riad:=true

         end

        else

          riad:=false;

 

     2..10:  if

       (b1[x1,y1]<>2)  and

       (b1[x1+1,y1+1]<>2) and

       (b1[x1,y1+1]<>2) and

       (b1[x1-1,y1+1]<>2) and

       (b1[x1-1,y1]<>2)and

       (b1[x1-1,y1-1]<>2)and

       (b1[x1,y1-1]<>2) and

       (b1[x1+1,y1-1]<>2) and

       (b1[x1+1,y1]<>2) then begin

     b1[x1,y1]:=2;

     riad:=true

     end

    else

      riad:=false;

     end;

1: case x1 of                       //смотрит есть ли рядом с двупалубным кораблём другие корабли

    1:  if  (b1[x1,y1]<>2) and

       (b1[x1,y1-1]<>2)and

       (b1[x1+1,y1+1]<>2)and

       (b1[x1+1,y1]<>2) and

       (b1[x1+1,y1-1]<>2) and

 

       (b1[x1+1,y1+2]<>2) and

 

       (b1[x1,y1+2]<>2) and (y1+1<11)  then

    for i:=0 to k11 do begin

     b1[x1,y1+i]:=2;

     riad:=true

     end

    else

      riad:=false;

    2..10:

    if (b1[x1,y1]<>2) and

       (b1[x1-1,y1-1]<>2) and

       (b1[x1-1,y1]<>2) and

       (b1[x1-1,y1+1]<>2) and

       (b1[x1,y1-1]<>2)and

       (b1[x1+1,y1+1]<>2)and

       (b1[x1+1,y1]<>2) and

       (b1[x1+1,y1-1]<>2) and

 

       (b1[x1+1,y1+2]<>2) and

       (b1[x1-1,y1+2]<>2) and

 

       (b1[x1,y1+2]<>2) and (y1+1<11)  then

   for i:=0 to k11 do begin

     b1[x1,y1+i]:=2;

     riad:=true

     end

    else

      riad:=false

      end;

  2: case x1 of                     //смотрит есть ли рядом с двупалубным кораблём другие корабли

  1:if (b1[x1,y1]<>2) and

       (b1[x1,y1-1]<>2)and

       (b1[x1+1,y1+1]<>2)and

       (b1[x1+1,y1]<>2) and

       (b1[x1+1,y1-1]<>2) and

 

       (b1[x1+1,y1+2]<>2) and

 

 

       (b1[x1+1,y1+3]<>2) and

 

 

       (b1[x1,y1+3]<>2) and (y1+2<11) then

     for i:=0 to k11 do begin

     b1[x1,y1+i]:=2;

     riad:=true

     end

    else

      riad:=false;

  2..10:

    if (b1[x1,y1]<>2) and

       (b1[x1-1,y1-1]<>2) and

       (b1[x1-1,y1]<>2) and

       (b1[x1-1,y1+1]<>2) and

       (b1[x1,y1-1]<>2)and

       (b1[x1+1,y1+1]<>2)and

       (b1[x1+1,y1]<>2) and

       (b1[x1+1,y1-1]<>2) and

 

       (b1[x1+1,y1+2]<>2) and

       (b1[x1-1,y1+2]<>2) and

 

       (b1[x1+1,y1+3]<>2) and

       (b1[x1-1,y1+3]<>2) and

 

       (b1[x1,y1+3]<>2) and (y1+2<11) then

     for i:=0 to k11 do begin

     b1[x1,y1+i]:=2;

     riad:=true

     end

    else

      riad:=false

      end;                                 //ставит 4палубный корабль

  3: if y1+3<11 then

      begin

    for i:=0 to k11 do

    b1[x1,y1+i]:=2;

     riad:=true

       end

      else

       riad:=false

 

end;

 

 

if riad=true then begin                 //смотрит если корабль поставлен то уменьшает счетчик

 

if (k11=3) then

  begin;

    k11:=k11-1;

  end;

 

if (k11=2) and (k33=0) then

   begin

    k11:=k11-1;

    k33:=k33-1

   end

else

    k33:=k33-1;

 

if (k11=1) and (k32=0) then

    begin

    k11:=k11-1;

    k32:=k32-1

    end

else

    k32:=k32-1;

 

if (k11=0) and (k31=0) then

    begin

    k11:=k11-1;

    k31:=k31-1

    end

else

    k31:=k31-1;

end;

end;

For i:=1 to 10 do            //закрашивает поставленные корабли  Серым

  for j:=1 to 10 do

    begin

      if b1[i,j]=2 then

        begin

          image1.Canvas.Brush.Color:=clgray;

          image1.Canvas.Rectangle(20*i-20,20*j-20,20*i,20*j);

        end;

    end;

 

 

if k11<0 then begin           //проверяет поставлены ли все корабли, если "да" то начинает игру с компьютером

   label12.Height:=0;

   label13.Height:=13;

   label14.Height:=13;

   label15.Height:=13;

   label16.Height:=13;

   label17.Height:=13;

   label18.Height:=13;

   label19.Height:=13;

   label20.Height:=13;

   label21.Height:=13;

   label22.Height:=13;

   label23.Height:=13;

   label26.Height:=13;

   image2.Height:=200;

   image2.Width:=200;

   for i:=1 to 10 do      //ресует белую сетку поля компьютера

   for j:=1 to 10 do begin

   image2.Canvas.Brush.Color:=clwhite;

   image2.Canvas.Rectangle(20*i-20,20*j-20,20*i,20*j) end

    end

end;

end;

 

 

 

 

 

procedure TForm1.N2Click(Sender: TObject);   //начинает новыю игру

begin

image1.Canvas.Brush.Color:=clwhite;

rot:=false;

k11:=3;

k33:=2;

k32:=5;

k31:=9;

label12.Height:=62;

image2.Height:=0;

For i:=1 to 10 do   //обнуляет массивы

  for j:=1 to 10 do

    begin

      b1[i,j]:=0;

      b2[i,j]:=0;

      image1.Canvas.Rectangle(20*i-20,20*j-20,20*i,20*j);

    end;

FormCreate(self); //использует процедуру  создания формы

 

 

 

 

 

 

 

 

 

 

end;

 

procedure TForm1.vistrel(Sender: TObject; Button: TMouseButton;

  Shift: TShiftState; X, Y: Integer);                  //процедура обмена выстрелов

begin

x1:=(X div 20)+1;

y1:=(Y div 20)+1;

 

if kon=false then begin       //проверка  закончилась игра или нет

  case b2[x1,y1] of

    0: b2[x1,y1]:=3;          //если попал в пустую клетка  становится - просреленной пустой

    2: b2[x1,y1]:=4;          //если попал в клетку с кораблем  то она становится- подбитой

    3,4: exit;                //если попал в клетку в которую уже стрелял то ничего не происходит

  end;

  for i:=1 to 10 do           //рисуется графическое поле компютера

   for j:=1 to 10 do

    begin

    case b2[i,j] of

    4: begin                     //клетка в котрой стоит подбитый или не доконца подбитый корабль

         if ((b2[i+1,j]=2)        //не доконца подбитый корабль

             or(b2[i,j+1]=2)

             or(b2[i-1,j]=2)

             or(b2[i,j-1]=2))

             or (((b2[i+1,j]=4)and(b2[i+2,j]=2))

             or((b2[i,j+1]=4)and(b2[i,j+2]=2))

             or((b2[i-1,j]=4)and(b2[i-2,j]=2))

             or((b2[i,j-1]=4)and(b2[i,j-2]=2)))

             or(((b2[i+1,j]=4)and(b2[i+2,j]=4) and (b2[i+3,j]=2))

             or((b2[i,j+1]=4)and(b2[i,j+2]=4)and(b2[i,j+3]=2))

             or((b2[i-1,j]=4)and(b2[i-2,j]=4)and(b2[i-3,j]=2))

             or((b2[i,j-1]=4)and(b2[i,j-2]=4)and(b2[i,j-3]=2)))

             then

              begin

               image2.Canvas.Brush.Color:=clgray;

               image2.Canvas.Rectangle(20*i-20,20*j-20,20*i,20*j);

               image2.Canvas.pen.Color:=clred;

               image2.Canvas.MoveTo(20*i-19,20*j-19);

               image2.Canvas.LineTo(20*i-1,20*j-1);

               image2.Canvas.MoveTo(20*i-1,20*j-19);

               image2.Canvas.LineTo(20*i-19,20*j-1);

               image2.Canvas.pen.Color:=clblack;

              end

             else                                   //подбитый корабль

              begin

               image2.Canvas.Brush.Color:=clred;

               image2.Canvas.Rectangle(20*i-20,20*j-20,20*i,20*j)

              end;

       end;

     3: begin                                     //простреленная пустая клетка

         image2.Canvas.Brush.Color:=clwhite;

         image2.Canvas.Rectangle(20*i-15,20*j-15,20*i-5,20*j-5)

        end;

 

    end;

 

        end;

win:=true;

For i:=1 to 10 do       //если  находится хотябы один неподбитый  корабль то победы нет

  for j:=1 to 10 do

    if b2[i,j]=2 then

      win:=false;

if win=true then        //вывод сообщения при победе

begin

  showmessage ('Поздравляю!'+#13+'Вы победили.');

  kon:=true;

  exit

end;

 

if b2[x1,y1]=4 then      //если  игрок попал то компьютер не  ходит

  exit;

 

 

bum:=false;

cokil:=true;

while (bum=false) or (cokil=true) do   //стрел-ть  до тех пор пока не попал в клетку в которую не стрылял и если она пустая

begin

m:=random(10)+1;

n:=random(10)+1;

case b1[m,n] of

  0: begin

      b1[m,n]:=3;

      bum:=true;

      cokil:=false

     end;

  2: begin

      b1[m,n]:=4;

      bum:=true;

      cokil:=true

     end

end;

 

For i:=1 to 10 do                   //рисуется графическое поле игрока

  for j:=1 to 10 do

    begin

     case b1[i,j] of

     3: begin                       //простреленая пустая клетка

         image1.Canvas.Brush.Color:=clwhite;

         image1.Canvas.Rectangle(20*i-15,20*j-15,20*i-5,20*j-5)

        end;

     4:begin                       //клетка в котрой стоит подбитый  или не доконца подбитый корабль

          if ((b1[i+1,j]=2)

          or(b1[i,j+1]=2)

          or(b1[i-1,j]=2)

          or(b1[i,j-1]=2))

          or(((b1[i+1,j]=4)and(b1[i+2,j]=2))

          or((b1[i,j+1]=4)and(b1[i,j+2]=2))

          or((b1[i-1,j]=4)and(b1[i-2,j]=2))

          or((b1[i,j-1]=4)and(b1[i,j-2]=2)))

          or(((b1[i+1,j]=4)and(b1[i+2,j]=4)and(b1[i+3,j]=2))

          or((b1[i,j+1]=4)and(b1[i,j+2]=4)and(b1[i,j+3]=2))

          or((b1[i-1,j]=4)and(b1[i-2,j]=4)and(b1[i-3,j]=2))

          or((b1[i,j-1]=4)and(b1[i,j-2]=4)and(b1[i,j-3]=2)))

             then begin                                       //не доконца подбитый корабль

               image1.Canvas.pen.Color:=clred;

               image1.Canvas.MoveTo(20*i-19,20*j-19);

               image1.Canvas.LineTo(20*i-1,20*j-1);

               image1.Canvas.MoveTo(20*i-1,20*j-19);

               image1.Canvas.LineTo(20*i-19,20*j-1);

               image1.Canvas.pen.Color:=clblack;

             end

             else                                           //подбитый корабль

             begin

              image1.Canvas.Brush.Color:=clred;

              image1.Canvas.Rectangle(20*i-20,20*j-20,20*i,20*j)

             end;

       end;

    end;

  end;

end;

lose:=true;

For i:=1 to 10 do              //если находится хотябы один  неподбитый корабль то проигрыша  нет

  for j:=1 to 10 do

    if b1[i,j]=2 then

      lose:=false;

if lose=true then

begin

  kon:=true;

  showmessage ('Вы проиграли.'+#13+'Попробуйте  ещё раз!');

  exit

end;

end;

end;

procedure TForm1.N3Click(Sender: TObject);    //процедура нажатия на кнопку "выход"

begin

close

end;

 

procedure TForm1.N5Click(Sender: TObject);   //процедура нажатия на кнопку "О программе..."

begin

form2.ShowModal

 

end;

 

procedure TForm1.N6Click(Sender: TObject);

begin

winhelp(Form1.Handle,'morb.hlp',HELP_CONTEXT,1);

end;

 

 

end.

 

Приложение 2

Руководство пользователя

Правила

 

Морской бой –игра известная всем с детства.

Условия победы – уничтожить все корабли противника.

Условия поражения – потеря всех своих кораблей.

 

В начале игры перед вами пустое поле(рис. 1)

Рис. 1

 

для начала игры вы должны расставить свои корабли (расстановка начинается с 4палубного корабля и далее по уменьшению палуб) для этого переведите курсор мыши на поле с пустыми белыми клетками, при этом под курсором появиться желтое изображения корабля (рис. 2)

 Рис. 2

 

 при нажатии на правую кнопку мыши происходит ротация корабля (рис. 3)

Информация о работе Разработка приложения Игра Морской Бой