Автор работы: Пользователь скрыл имя, 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
procedure TForm1.SpeedButton6Click(
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(
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[
s2:=mas[7,2]+mas[8,2]+mas[9,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]=
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]=
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