Игровая программа "Нарды"

Автор работы: Пользователь скрыл имя, 28 Января 2011 в 12:02, курсовая работа

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

Задачей курсового проектирования ставится разработка игровой программы «Нарды», которая является виртуальным аналогом настольной игры. Перенос реальной игры на виртуальную основу имеет ряд преимуществ:
– позволяет немедленно приступить к игре без каких либо действий по ее подготовке;
– исключает возможность жульничества во время игры;
– исключает возможность случайных нарушений правил игры в связи с их незнанием;
– позволяет сохранять текущие результаты игры и продолжать партию в другое время.

Содержание работы

Введение 2
1 Общая часть 4
1.1 Постановка задачи 4
1.2 Технико-математическое описание 6
1.3 Программное обеспечение 9
1.4 Состав и параметры технических и программных средств 12
2 Специальная часть 14
2.1 Описание алгоритмов 14
2.2 Описание работы программы 16
2.3 Инструкция по выполнению программы 18
2.4 Тестирование и отладка 22
2.5 Контрольный пример 24
Заключение 28
Список литературы 30
Приложение А. Текст программы 31

Файлы: 1 файл

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

— 312.50 Кб (Скачать файл)
ign="justify">end; 

procedure TForm1.SpeedButton6Click(Sender: TObject);

begin

application.Minimize;

end; 

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

  Shift: TShiftState; X, Y: Integer);

begin

ReleaseCapture;

SendMessage(Form1.Handle, WM_SysCommand,$F012, 0);

end; 

procedure TForm1.SpeedButton7Click(Sender: TObject);

begin

form6.showmodal;

end; 

procedure TForm1.wdomclickClick(Sender: TObject);

begin

  game.movehouse(Sender,25,zar);

end; 

end. 

Модуль  GAME содержит процедуры реализации игрового процесса 

uses main, draw; 

procedure variants(Sender: TObject; num:integer);

var x,sum,i,j:integer;

begin

  if status=2 then begin

  messagedlg('Бросьте зары',mtinformation,[mbok],0);

  exit;

  end;

  if (status=1) and (mas[num,1]=player) then begin

    if player=1 then begin

      sum:=0;

      for i:=19 to 25 do

      if mas[i,1]=1 then sum:=sum+mas[i,2];

      if sum=15 then begin

        draw.visible(Sender);

        nomer:=num;

        for i:=1 to 4 do if bones[i]<>0 then begin

          x:=num+bones[i];

          sum:=0;

          for j:=18 to num-1 do if mas[j,1]=player then sum:=sum+mas[j,2];

          if (sum=0) and (x>25) then x:=25;

          if x=25 then zar:=i;

          if x<26 then if (mas[x,1]=player) or (mas[x,1]=0) then arrow(sender,x);

          end;

          exit;

        end;

      end;

    if player=2 then begin

      sum:=0;

      for i:=7 to 12 do

      if mas[i,1]=2 then sum:=sum+mas[i,2];

      sum:=sum+mas[26,2];

      if sum=15 then begin

        visible(Sender);

       nomer:=num;

        for i:=1 to 4 do if bones[i]<>0 then begin

          x:=num+bones[i];

         sum:=0;

         for j:=6 to num-1 do if mas[j,1]=player then sum:=sum+mas[j,2];

         if (sum=0) and (x>13) then x:=13;

         if x=13 then x:=26;

         if x=26 then zar:=i;

         if x<27 then if (mas[x,1]=player) or (mas[x,1]=0) then if (x<13) or (x=26) then arrow(sender,x);

        end;

        exit;

      end;

    end;

  end;

  if (status=1) and (mas[num,1]=player) then

  if ((mas[num,1]=1) and (num=1) and (golova=2)) or ((mas[num,1]=2) and (num=13) and (golova=2)) then else begin

  visible(Sender);

  nomer:=num;

  if bones[1]<>0 then begin

    x:=num+bones[1];

    if (mas[num,1]=2) and (x>24) then x:=x-24;

    if (x>24) or ((mas[num,1]=2) and (num<=12) and (x>12)) then else

    if (mas[x,1]=player) or (mas[x,1]=0) then arrow(sender, x);

  end;

  if bones[2]<>0 then begin

    x:=num+bones[2];

    if (mas[num,1]=2) and (x>24) then x:=x-24;

    if (x>24) or ((mas[num,1]=2) and (num<=12) and (x>12)) then else

    if (mas[x,1]=player) or (mas[x,1]=0) then arrow(sender, x);

  end;

  if main.bones[3]<>0 then begin

    x:=num+bones[3];

    if (mas[num,1]=2) and (x>24) then x:=x-24;

    if (x>24) or ((mas[num,1]=2) and (num<=12) and (x>12)) then else

    if (mas[x,1]=player) or (mas[x,1]=0) then arrow(sender, x);

  end;

  if bones[4]<>0 then begin

    x:=num+bones[4];

    if (mas[num,1]=2) and (x>24) then x:=x-24;

    if (x>24) or ((mas[num,1]=2) and (num<=12) and (x>12)) then else

    if (mas[x,1]=player) or (mas[x,1]=0) then arrow(sender, x);

  end;

end;

end; 

function proverka(m:integer; zz:integer):integer;

var  i,j,nn,x:integer;

begin

nn:=0;

case player of

  1: begin

    if mas[m,1]=player then  for j:=1 to 4 do

       if m+zz*j<=24 then

        if (mas[m+zz*j,1]=player)or (mas[m+zz*j,1]=0) then  begin nn:=nn+mas[m,2];

         end

          else begin

          result:=nn;

          exit;

          end; 
 

    end;

  2: if (m>=13) and (m<=24) then

    if mas[m,1]=player then  for j:=1 to 4 do begin

       x:=m+zz*j;

       if x>24 then x:=x-24;

        if (mas[x,1]=player)or (mas[x,1]=0) then   nn:=nn+mas[m,2]

          else begin

          result:=nn;

          exit;

          end; end else begin

    if mas[m,1]=player then  for j:=1 to 4 do

       if m+zz*j<=12 then

        if (mas[m+zz*j,1]=player)or (mas[m+zz*j,1]=0) then  nn:=nn+1*mas[m,2]

          else

          begin

          result:=nn;

          exit;

          end;

         end;

  end;

  result:=nn;

end; 

procedure doublebones(sender:tobject);

var i,j,n,z,x:integer;

begin

  z:=bones[1];

  n:=0;

  case player of

  1: begin

  for i:=1 to 24-bones[1] do begin

  x:=proverka(i,z);

  n:=n+x;

end;

  if mas[1,2]>=1 then begin

  if mas[1,2]=15 then n:=n-13 else n:=n+1-mas[1,2];

  end;

    end;

  2: begin

    for i:=13 to 24 do n:=n+proverka(i,z);

    for i:=1 to 12-bones[1] do n:=n+proverka(i,z);

    if mas[13,2]>=1 then begin

    if mas[13,2]=15 then n:=n-13 else n:=n+1-mas[13,2];

    end; //else

     end;

     end;

   if n>=4 then exit else case n of

   0: for i:=1 to 4 do bones[i]:=0;

   1: for i:=4 downto 2 do bones[i]:=0;

   2: for i:=4 downto 3 do bones[i]:=0;

   3: bones[4]:=0;

   end;

end; 

procedure ablemove(sender:tobject);

var z:array[1..2] of boolean;

    p:boolean;

    i,j,x,z1,z2,s1,s2,sum:integer;

begin

  if player=1 then begin

      for i:=19 to 25 do

      if mas[i,1]=1 then sum:=sum+mas[i,2];

      if sum=15 then exit;

      end;

  if player=2 then begin

      for i:=7 to 12 do

      if mas[i,1]=2 then sum:=sum+mas[i,2];

      sum:=sum+mas[26,2];

      if sum=15 then exit;

      end;

  z1:=bones[1];

  z2:=bones[2];

  s1:=mas[24,2]+mas[23,2]+mas[22,2]+mas[21,2]+mas[20,2]+mas[19,2];

  s2:=mas[7,2]+mas[8,2]+mas[9,2]+mas[10,2]+mas[11,2]+mas[12,2];

  z[1]:=false;

  z[2]:=false;

  p:=false;

  case player of

  1: begin if bones[1]<>main.bones[2] then begin

    for j:=1 to 2 do begin

      for i:=1 to 24-bones[j] do

          if (mas[i,1]=player) and (p=false) then

            if (mas[i+bones[j],1]=player) or (mas[i+bones[j],1]=0) then begin

              p:=true;

              z[j]:=true;

              end;

      p:=false;

    end;

  case z[1] of

  true: begin

    if z[1]=z[2] then exit else

        for i:= 1 to 24-bones[1]-bones[2] do

          if (mas[i,1]=player) and  (z[2]=false) then

            if (mas[i+bones[1]+bones[2],1]=player) or (

              mas[i+bones[1]+bones[2],1]=0) then z[2]:=true;

        if z[2]=false then bones[2]:=0;

    end;

  false: begin

    if z[1]=z[2] then begin

      bones[1]:=0;

      bones[2]:=0;

      end else

        for i:= 1 to 24-bones[1]-bones[2] do

          if (mas[i,1]=player) and  (z[1]=false) then

            if (mas[i+bones[1]+bones[2],1]=player) or (

              mas[i+bones[1]+bones[2],1]=0) then z[1]:=true;

        if z[1]=false then bones[1]:=0;

    end; 

  end;

  if s1=15 then begin

    if mas[z1+18,2]>=1 then bones[1]:=z1;

    if mas[z2+18,2]>=1 then bones[2]:=z2;

    end; end else doublebones(sender);

  end;

  2: begin if bones[1]<>bones[2] then begin

  for j:=1 to 2 do begin

      for i:=13 to 24 do

          if (mas[i,1]=player) and (p=false) then begin 

            x:=i+main.bones[j];

            if x>24 then x:=x-24;

            if (mas[x,1]=player) or (mas[x,1]=0) then begin

              p:=true;

              z[j]:=true;

              end;

            end;

      for i:=1 to 12-bones[j] do

Информация о работе Игровая программа "Нарды"