Program nards;
Uses crt,graph,mouse_os;
Const
kolvo_punkt=3;
name_punkt:array[1..kolvo_punkt] of string =('Play','Infomation','Exit');
Type
xy=record
x:integer;
y:integer;
end;
Var
zam,m,z:integer;
pos:array [1..12,1..24] of xy;
mesto_fishek:array [1..12,1..24] of integer;
sucs:boolean;
n,c,d,xto:integer;
x,y,h,v:integer;
lt,rt,ct:boolean;
kolvo,t:longint;
but:integer;
punkt,driver,mode,i,k:integer;
key:char;
s,s1:string;
procedure load;
var i:integer; ch:char;
begin
cleardevice;
setbkcolor (0);
setcolor(2);
outtextxy(300,390,'Starting game');
setfillstyle(4,4);
for i:=50 to 590 do
begin
bar(50,400,i,402);
delay(1000);
end;
setfillstyle(1,0);
bar(1,1,640,480);
outtextxy(320,240,'To start game please " press Enter "');
repeat
ch:=readkey;
until ch=#13;
cleardevice;
End;
Procedure menu (numb_punkt:integer);
Const
h_punkt=30;
h_prom=20;
w_punkt=100;
x_beg=300-round(w_punkt/2);
h_menu=h_punkt-kolvo_punkt+h_prom+(kolvo_punkt-1);
y_beg=200-round(h_menu/2);
Var i,x2,y1,y2:integer;
Begin
for i:=1 to kolvo_punkt do
begin
if i=numb_punkt then setfillstyle(6,2) else setfillstyle(7,14);
y1:=y_beg+(h_punkt+h_prom)*(i-1);
x2:=x_beg+w_punkt;
y2:=y1+h_punkt;
bar3d(x_beg,y1,x2,y2,3,topon);
settextjustify(1,1);
outtextxy(300,y1+round(h_punkt/2),name_punkt[i]);
end;
End;
Procedure draw_desk;
var i:integer;
Begin
setfillstyle(1,6);
bar(0,0,440,280);
setfillstyle(1,15);
bar(20,20,420,260);
setfillstyle(1,6);
bar(210,20,220,260);
setcolor(15);
setfillstyle(1,15);
for i:=1 to 6 do pieslice (32*i,20,0,360,10);
for i:=1 to 6 do pieslice (32*i,280-20,0,360,10);
for i:=1 to 6 do pieslice (205+32*i,20,0,360,10);
for i:=1 to 6 do pieslice (205+32*i,280-20,0,360,10);
end;
Procedure kubik(a,b:integer);
Begin
randomize;
setcolor(2);
if (a<1) and (b<1) then
begin
a:=random(6)+1;
b:=random(6)+1;
end;
c:=a;
d:=b;
if a=1 then
begin
setfillstyle (1,14);
bar3d (445,12,465,32,10,true);
setcolor(2);
setfillstyle(1,2);
pieslice (455,22,0,360,4);
end;
if a=2 then
begin
setfillstyle (1,14);
bar3d (445,12,465,32,10,true);
setcolor(2);
setfillstyle(1,2);
pieslice (451,22,0,360,2);
pieslice (459,22,0,360,2);
end;
if a=3 then
begin
setfillstyle (1,14);
bar3d (445,12,465,32,10,true);
setcolor(2);
setfillstyle(1,2);
pieslice (449,17,0,360,2);
pieslice (455,22,0,360,2);
pieslice (461,27,0,360,2);
end;
if a=4 then
begin
setfillstyle (1,14);
bar3d (445,12,465,32,10,true);
setcolor(2);
setfillstyle(1,2);
pieslice (451,17,0,360,2);
pieslice (460,17,0,360,2);
pieslice (460,27,0,360,2);
pieslice (451,27,0,360,2);
end;
if a=5 then
begin
setfillstyle (1,14);
bar3d (445,12,465,32,10,true);
setcolor(2);
setfillstyle(1,2);
pieslice (451,17,0,360,2);
pieslice (460,17,0,360,2);
pieslice (460,27,0,360,2);
pieslice (451,27,0,360,2);
pieslice (455,22,0,360,2);
end;
if a=6 then
begin
setfillstyle (1,14);
bar3d (445,12,465,32,10,true);
setcolor(2);
setfillstyle(1,2);
pieslice (450,17,0,360,2);
pieslice (460,17,0,360,2);
pieslice (455,17,0,360,2);
pieslice (450,27,0,360,2);
pieslice (460,27,0,360,2);
pieslice (455,27,0,360,2);
end;
if b=1 then
begin
setfillstyle (1,14);
bar3d (475,12,495,32,10,true);
setcolor(2);
setfillstyle(1,2);
pieslice (485,22,0,360,4);
end;
if b=2 then
begin
setfillstyle (1,14);
bar3d (475,12,495,32,10,true);
setcolor(2);
setfillstyle(1,2);
pieslice (481,22,0,360,2);
pieslice (489,22,0,360,2);
end;
if b=3 then
begin
setfillstyle (1,14);
bar3d (475,12,495,32,10,true);
setcolor(2);
setfillstyle(1,2);
pieslice (479,17,0,360,2);
pieslice (485,22,0,360,2);
pieslice (491,
24 июня 2009 в 10:05
наверняка экзамен сдать надо))
Владимир Aiditz Муромский, +5
24 июня 2009 в 9:00
Владимир Aiditz Муромский, +1
23 июня 2009 в 22:03
Ну а теперь попробуй встать на наше место.
Что известно?
1) Ошибка – в процедуре pr_knopka
2) Ошибка – после первого if в этой процедуре
3) Должны выводиться фишки в новом месте; что происходит на самом деле – неизвестно (ты не сообщил).
Чтобы понять, в чем ошибка, нужно знать, как должно быть, и как есть в данный момент. То есть начинаем с пункта 3. Чтобы узнать, что происходит, не выпытывая из тебя по слову, нужно анализировать код. Читаю первые три строчки этой процедуры:
repeat
mousecondition(x,y,lt,rt,ct);
until rt;
Что такое x, y, lt, rt и ct – неизвестно. Ни в объявлениях, ни где-либо еще нет никаких комментариев на этот счет, по названию догадаться тоже сложно. И что же мне дальше анализировать? Которым по счету чувством я должен догадаться в чем ошибка?
П.С. я конечно мог бы загнать весь код в IDE и отладчиком, шаг за шагом, пройтись по всем этим строчкам, но я пожалуй посоветую тебе ценить время тех, кто тебе помогает
23 июня 2009 в 20:04
Что за программа? Что не так в процедуре кнопка? У меня лично нет желания разбираться во ВСЕМ этом коде. Если вопрос звучит как "помогите, какая-то фигня", то и в ответе будет какая-то фигня.
23 июня 2009 в 20:04
Там после проверки в процедуре должны выводица фишки в новом месте, короче игра нарды с управлением мышкой, на паскале.
23 июня 2009 в 20:03
Не обнаружил pr_knopka
23 июня 2009 в 20:03
27,0,360,2);
end;
if b=4 then
begin
setfillstyle (1,14);
bar3d (475,12,495,32,10,true);
setcolor(2);
setfillstyle(1,2);
pieslice (481,17,0,360,2);
pieslice (490,17,0,360,2);
pieslice (490,27,0,360,2);
pieslice (481,27,0,360,2);
end;
if b=5 then
begin
setfillstyle (1,14);
bar3d (475,12,495,32,10,true);
setcolor(2);
setfillstyle(1,2);
pieslice (481,17,0,360,2);
pieslice (490,17,0,360,2);
pieslice (490,27,0,360,2);
pieslice (481,27,0,360,2);
pieslice (485,22,0,360,2);
end;
if b=6 then
begin
setfillstyle (1,14);
bar3d (475,12,495,32,10,true);
setcolor(2);
setfillstyle(1,2);
pieslice (480,17,0,360,2);
pieslice (490,17,0,360,2);
pieslice (485,17,0,360,2);
pieslice (480,27,0,360,2);
pieslice (490,27,0,360,2);
pieslice (485,27,0,360,2);
end;
End;
Procedure fischka (x,y:integer);
Begin
if mesto_fishek[i,k]=1 then
Begin
setcolor(8);
setfillstyle(1,2);
pieslice (x,y,0,360,8);
setfillstyle(1,8);
pieslice (x,y,0,360,4);
end else
if mesto_fishek[i,k]=2 then
Begin
setcolor (8);
setfillstyle(1,14);
pieslice (x,y,0,360,8);
setfillstyle(1,8);
pieslice (x,y,0,360,4);
end else
if mesto_fishek[i,k]=3 then
Begin
setcolor(4);
setfillstyle(1,4);
pieslice (x,y,0,360,8);
setfillstyle(1,4);
pieslice (x,y,0,360,4);
end else
if mesto_fishek[i,k]=4 then
Begin
setcolor (14);
setfillstyle(1,14);
pieslice (x,y,0,360,8);
setfillstyle(1,14);
pieslice (x,y,0,360,4);
end;
End;
Procedure mouse;
Var x,z:integer;
Begin
initmouse(sucs,3);
showcursor;
End;
Procedure lv_knopka_1;
Begin
repeat
mousecondition(x,y,lt,rt,ct);
until lt;
leftnum(x,y);
v:=x;
h:=y;
for i:=1 to 12 do
for k:=1 to 12 do
if ((pos[i,k].x-7)<x) and (x<(pos[i,k].x+7))
and ((pos[i,k].y-7)<y) and (y<(pos[i,k].y+7))
then
Begin
m:=i;
z:=k;
if mesto_fishek[i,k]=1 then mesto_fishek[i,k]:=3;
End;
cleardevice;
setbkcolor(7);
draw_desk;
kubik(c,d);
for i:=1 to 12 do
for k:=1 to 24 do fischka(pos[i,k].x,pos[i,k].y);
End;
Procedure lv_knopka_2;
Begin
repeat
mousecondition(x,y,lt,rt,ct);
until lt;
leftnum(x,y);
v:=x;
h:=y;
for i:=1 to 12 do
for k:=13 to 24 do
if ((pos[i,k].x-7)<x) and (x<(pos[i,k].x+7))
and ((pos[i,k].y-7)<y) and (y<(pos[i,k].y+7))
then
Begin
m:=i;
z:=k;
if mesto_fishek[i,k]=2 then mesto_fishek[i,k]:=4;
end;
cleardevice;
setbkcolor(7);
draw_desk;
kubik(c,d);
for i:=1 to 12 do
for k:=1 to 24 do fischka(pos[i,k].x,pos[i,k].y);
End;
Procedure pr_knopka;
Var i,k:integer;
Begin
repeat
mousecondition(x,y,lt,rt,ct);
until rt;
rightnum(x,y);
for i:= 1 to 12 do
for k:= 1 to 24 do
if ((pos[i,k].x-7)<x) and (x<(pos[i,k].x+7))
and ((pos[i,k].y-7)<y) and (y<(pos[i,k].y+7))
then if mesto_fishek[i,k]=0
then if mesto_fishek[m,z]=3
then
begin
mesto_fishek[m,z]:=0;
mesto_fishek[i,k]:=1;
end
else
if mesto_fishek[m,z]=4
then
begin
mesto_fishek[m,z]:=0;
mesto_fishek[i,k]:=2;
end;
cleardevice;
setbkcolor(7);
draw_desk;
kubik(c,d);
for i:=1 to 12 do
for k:=1 to 24 do fischka(pos[i,k].x,pos[i,k].y);
End;
Procedure hod;
Begin
if xto=1 then
begin
lv_knopka_1;
pr_knopka;
xto:=2;
end
else
if xto=2 then
begin
lv_knopka_2;
pr_knopka;
xto:=1;
end;
End;
Procedure zap_pos(x0,y0:integer);
Var i,k:integer;
Begin
for i:=1 to 6 do
for k:=24 downto 13 do
Begin
pos[i,k].x:=x0*i;
pos[i,k].y:=y0-9*k;
End;
for i:=7 to 12 do
for k:=24 downto 13 do
Begin
pos[i,k].x:=pos[1,6].x+13+x0*i;
pos[i,k].y:=y0-9*k;
End;
for i:=1 to 6 do
for k:=1 to 12 do
Begin
pos[i,k].x:=x0*i;
pos[i,k].y:=13+9*k;
End;
for i:=7 to 12 do
for k:=1 to 12 do
Begin
pos[i,k].x:=pos[i,12].x+13+x0*i;
po
23 июня 2009 в 20:03
pos[i,k].y:=y0-9*k;
End;
for i:=1 to 6 do
for k:=1 to 12 do
Begin
pos[i,k].x:=x0*i;
pos[i,k].y:=13+9*k;
End;
for i:=7 to 12 do
for k:=1 to 12 do
Begin
pos[i,k].x:=pos[i,12].x+13+x0*i;
pos[i,k].y:=13+9*k;
End;
End;
Procedure nach_pos;
Var i,k:integer;
Begin
for i:=1 to 12 do
Begin
mesto_fishek[12,i]:=1;
mesto_fishek[1,i]:=0;
End;
for i:=13 to 24 do
Begin
mesto_fishek[1,i]:=2;
mesto_fishek[12,i]:=0;
end;
for i:=2 to 11 do
for k:=1 to 24 do mesto_fishek[i,k]:=0;
End;
Procedure help;
Begin
cleardevice;
setcolor(4);
outtextxy(320,231,'Instruction');
setcolor(2);
outtextxy(320,240,'Levoi knopkoi – vibiraem fischky');
setcolor(1);
outtextxy(320,249,'Pravoi knopkoi – peremeshaem fischky');
readln;
closegraph;
End;
Begin
clrscr;
driver:=detect;
InitGraph(driver,mode,'e:\bp\bgi\');
setbkcolor(15);
setcolor(1);
outtextxy(50,470,' Program made student of college "Server". Alex Kaplunov');
punkt:=1;
repeat;
menu(punkt);
key:=readkey;
if ord(key)=0 then
Begin
key:=readkey;
if ord(key)=72 then
if punkt=1 then punkt:=kolvo_punkt else dec(punkt);
if ord(key)=80 then
if punkt=kolvo_punkt then punkt:=1 else inc(punkt);
end;
until ord(key)=13;
Case punkt of
1:Begin
load;
xto:=1;
zap_pos(32,375);
nach_pos;
cleardevice;
setbkcolor(7);
draw_desk;
kubik(0,0);
for i:=1 to 12 do
for k:=1 to 24 do fischka(pos[i,k].x,pos[i,k].y);
mouse;
hod;
readln;
closegraph;
end;
2:help;
3:closegraph;
end;
End.