Автор работы: Пользователь скрыл имя, 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
if (mas[i,1]=player) and (p=false) then begin
x:=i+main.bones[j];
if (mas[x,1]=player) or (mas[x,1]=0) then begin
p:=true;
z[j]:=true;
end;
end;
p:=false;
end;
case z[1] of
true: begin
if z[1]=z[2] then exit else
for i:= 13 to 24 do
if (mas[i,1]=player) and (z[2]=false) then begin
x:=i+bones[1]+bones[2];
if x>24 then x:=x-24;
if (mas[x,1]=player) or (mas[x,1]=0) then z[2]:=true;
end;
for i:=1 to 12-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:= 13 to 24 do
if (mas[i,1]=player) and (z[1]=false) then begin
x:=i+bones[1]+bones[2];
if x>24 then x:=x-24;
if (mas[x,1]=player) or (mas[x,1]=0) then z[1]:=true;
end;
for i:=1 to 12-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 s2=15 then begin
if mas[z1+6,2]>=1 then bones[1]:=z1;
if mas[z2+6,2]>=1 then bones[2]:=z2;
end; end else doublebones(sender);
end; end;
end;
procedure bonesclick(Sender: TObject);
var i,j:integer;
begin
if (player=1) and (mas[25,2]=15) then begin
messagedlg('Игра закончена! Белые победили!',mtinformation,[
exit;
end ;
if (player=2) and (mas[26,2]=15) then begin
messagedlg('Игра закончена! Черные победили!',mtinformation,[
exit;
end;
if (main.bones[1]=0) and (main.bones[2]=0) and (main.bones[3]=0) and
(main.bones[4]=0) then begin
status:=2;
if player=1 then begin
player:=2;
messagedlg('Ходят черные',mtinformation,[mbok],
end else begin
player:=1;
messagedlg('Ходят белые',mtinformation,[mbok],0)
end;
with form1 do begin
randomize;
z1:=random(6)+1;
case z1 of
1: leftbone.Picture:=b1.Picture;
…
6: leftbone.Picture:=b6.Picture;
end;
z2:=random(6)+1;
case z2 of
1: rightbone.Picture:=b1.Picture;
…
6: rightbone.Picture:=b6.Picture;
end;
golova:=0;
status:=1;
if z1<>z2 then begin
bones[1]:=z1;
bones[2]:=z2;
bones[3]:=0;
bones[4]:=0;
end else begin
bones[1]:=z1;
bones[2]:=z1;
bones[3]:=z2;
bones[4]:=z2;
end;
if (player=1) and (bones[3]<>0) and (mas[1,2]=15) then wf:=1;
if (player=2) and (bones[3]<>0) and (mas[13,2]=15) then blf:=1;
ablemove(sender);
varbones(sender);
if (bones[1]=0) and (main.bones[2]=0) and (bones[3]=0) and (bones[4]=0) then begin
messagedlg('Вы не можете походиться!',mtinformation,[
end;
end;
for i:=1 to 26 do
for j:=1 to 2 do mas2[i,j]:=mas[i,j];
for i:=1 to 4 do bones2[i]:=bones[i];
end
else messagedlg('Ход не завершен!',mtinformation,[
end;
procedure move(Sender: TObject; number1:integer);
var i,k:integer;
begin
if (nomer=1) and (mas[nomer,1]=1) then golova:=2;
if (nomer=1) and (mas[nomer,1]=1) and (wf=1) then begin
golova:=1;
wf:=0;
end;
if (nomer=13) and (mas[nomer,1]=2) then golova:=2;
if (nomer=13) and (mas[nomer,1]=2) and (blf=1) then begin
golova:=1;
blf:=0;
end;
mas[nomer,2]:=mas[nomer,2]-1;
mas[number1,1]:=player;
mas[number1,2]:=mas[number1,2]
if mas[nomer,2]=0 then mas[nomer,1]:=0;
draw.visible(sender);
draw.redraw(sender);
k:=number1-nomer;
if k<1 then k:=k+24;
i:=0;
repeat
i:=i+1;
if main.bones[i]=k then begin
main.bones[i]:=0;
k:=0;
end;
until k=0;
varbones(sender);
end;
procedure movehouse(Sender: TObject; number2,zar:integer);
begin
main.bones[zar]:=0;
mas[number2,2]:=mas[number2,2]
mas[nomer,2]:=mas[nomer,2]-1;
if mas[nomer,2]=0 then mas[nomer,1]:=0;
draw.visible(sender);
draw.redraw(sender);
varbones(sender);
if (player=1) and (mas[25,2]=15) then begin
messagedlg('Игра закончена! Белые победили!',mtinformation,[
exit;
end ;
if (player=2) and (mas[26,2]=15) then begin
messagedlg('Игра закончена! Черные победили!',mtinformation,[
exit;
end;
end;
end.
Модуль
DRAW содержит процедуры отображения игрового
процесса
uses main;
procedure visible(Sender: TObject);
begin
with form1 do begin
m1.Visible:=false;
…
m24.Visible:=false;
wdomclick.Visible:=false;
bldomclick.Visible:=false;
end;
end;
procedure arrow(Sender: TObject; number:integer);
begin
with form1 do
case number of
1: begin
m1.Visible:=true;
if mas[1,2]=0 then begin
m1.Left:=n1.Left;
m1.Top:=n1.Top;
end else begin
m1.Left:=n1.Left;
m1.Top:=n1.Top-20;
end;
end;
…
26: begin
bldomclick.Visible:=true;
if mas[26,2]=0 then begin
bldomclick.Left:=bldom.Left;
bldomclick.Top:=bldom.Top;
end else begin
bldomclick.Left:=bldom.Left;
bldomclick.Top:=bldom.Top-20;
end;
end;
end;
end;
procedure redraw(sender: TObject);
var i:integer;
pic:tpicture;
begin
with form1 do
for i:=1 to 26 do begin
if mas[i,1]=0 then
case i of
1: n1.Visible:=false;
…
26: bldom.Visible:=false;
end else begin
case i of
1: n1.Visible:=true;
…
26: bldom.Visible:=true;
end;
if mas[i,1]=1 then
case mas[i,2] of
0: pic:=picpusto.Picture;
…
15: pic:=w15.Picture;
end;
if mas[i,1]=2 then
case mas[i,2] of
0: pic:=picpusto.Picture;
…
15: pic:=bl15.Picture;
end;
case i of
1: n1.Picture:=pic;
…
26: bldom.Picture:=pic;
end;
end;
end;
end;
procedure varbones(sender: Tobject);
var pic:tpicture;
i:integer;
begin
with form1 do
for i:=1 to 4 do begin
case bones[i] of