Что-то меня зацепило... ;) Взялся без особого интереса, но...
Сделано все плохо, но стандартными паскалевскими средствами! Никакого асма. + до кучи подсчет дырок.
Только без пинков по поводу шлейфа около круга, это не от кривых рук, а для красотищи..
И еще, товарищи, давайте обойдемся без тупых вопросов, графика не инициализируется и все такое... <_<
Код
Uses
Graph,Crt;
Const
LineCount = 10;
HoleSize = 30;
Step = 01;
LineC = White;
R = 10;
Pause = 4500;
Var
i,j:Word;
Gd,Gm:Integer;
S:String;
LineH:Word;
A:array[1..LineCount,1..3] of Word;
Process,MustMove:Boolean;
X,Y:Word; {Љ®®а¤Ё вл и аЁЄ }
C:Char;
HC:LongInt;
Procedure OutLine(N:Word);
begin
If (A[N,1]>0) and (A[N,1]<641) then
begin
Line(1,A[N,1],A[N,2],A[N,1]);
Line(A[N,2]+HoleSize,A[N,1],A[N,3],A[N,1]);
Line(A[N,3]+HoleSize,A[N,1],640,A[N,1]);
end;
end;
Begin
Randomize;
Gd:=Detect;
InitGraph(Gd,Gm,'');
{‚ᥠЁ§ з «м® ®ЇвЁ¬Ё§Ёа®ў ® Ї®¤ а §аҐиҐЁҐ 640е480}
LineH:=640 DIV (LineCount+5);
For i:=1 to LineCount do
begin
A[i,1]:=i*LineH;
A[i,2]:=Random(320)+10;
A[i,3]:=Random(200)+320;
OutLine(i);
end;
Y:=LineCount;
X:=((A[i,3]-A[i,2]+HoleSize) DIV 2) + HoleSize + A[i,2];
Circle(X,A[Y,1]-R,R);
Process:=True;
MustMove:=False;
{j:=1; {‘зҐвзЁЄ ®в®бЁвҐ«м®Ј® ᬥ饨п}
ReadLn;
HC:=0;
While Process do
begin
If KeyPressed then
begin
C:=ReadKey;
Case C of
#122:If X<>1 then Dec(X);
#120:If X<>640 then Inc(X);
#27:Process:=False;
end;
If ((A[Y,2]+HoleSize DIV 2)=X) or
((A[Y,3]+HoleSize DIV 2)=X) then
begin
Inc(HC);
Inc(Y);
If Y=LineCount+1 then Process:=False;
end;
end;
SetColor(Black);
Circle(X,A[Y,1]-R,R);
For i:=1 to LineCount do
begin
{‘вЁа Ґ¬ бв ஥}
Line(1,A[i,1],640,A[i,1]);
Dec(A[i,1],Step);
end;
{Џа®и« ЇҐаў п Ё ўв®а п}
If (A[1,1]=1) then MustMove:=True; {Check range}
SetColor(LineC);
If MustMove then
{Move array}
begin
MustMove:=False;
For i:=1 to LineCount-1 do
begin
A[i,1]:=A[i+1,1];
A[i,2]:=A[i+1,2];
A[i,3]:=A[i+1,3];
end;
Dec(Y);
If Y=0 then Process:=False;
{Last line}
i:=LineCount;
A[i,1]:=i*LineH;
A[i,2]:=Random(320)+10;
A[i,3]:=Random(200)+320;
end;
For i:=1 to LineCount do
begin
OutLine(i);
end;
Circle(X,A[Y,1]-R,R);
Delay(Pause);
end;
ClearDevice;
SetTextStyle(TriplexFont,0,7);
SetColor(Red);
Str(HC,S);
OutText('CRASH!!! BABAX!!!');
If HC=0 then OutTextXY(10,200,'XEPOBO!!!')
else
OutTextXY(10,200,S+' HOLES!');
ReadLn;
CloseGraph;
end.