program kraz; uses graph,crt; const f=20; n=10; down=#80; up=#72; st=25; var xa,ya:array[1..f,1..n] of integer; {Двумерный масив для проектирования препятсвтий } gd,gm,x,x1,y,y1,c,ca,ra,n1,stx,i,fa,fya,s1,j,ga1,xa1:integer; ch:char; {Процедура создания Краза желтый прямоугольник} procedure Kraz(x,y,x1,y1,c:integer); begin setfillstyle(1,c); bar(x,y,x1,y1); end; {Помехи, пока кольца} procedure pomehi(xa,ya,ra,ca:integer); begin setcolor(ca); circle(xa,ya,ra); end; {Процедура управления краза, с клавиатуры} procedure upr(var x,y,x1,y1:integer;c:integer); begin ch:=readkey; if ch=#0 then ch:=readkey; Kraz(x,y,x1,y1,0); case ch of up: if y>0 then begin y:=y-st; y1:=y1-st; end; down: if y1<getmaxy-50 then begin y:=y+st; y1:=y1+st; end; end; Kraz(x,y,x1,y1,c); end; {Процедура полета колец с право на лево} procedure neupr(var xa,ya,ra,stx:integer); begin pomehi(xa,ya,ra,0); xa:=xa-stx; pomehi(xa,ya,ra,ca); delay(2); end; {Тело программы} begin Gd:=Detect; initgraph(gm,gd,''); randomize; s1:=0; {Зануление с1} xa1:=50; ga1:=0; {Зануление га1} for j:=1 to f do {Начало двумерного массива, столбец } begin ga1:=ga1+1; {накрутка га1 } xa1:=xa1*ga1; { задание дистанции между столбцами массива,тоесть колонны выхода колец.} for i:=1 to n do {колонка массива} begin s1:=s1+1; {накрутка дистанции появления между кольцами в 1 столбце, т.к для прохаждения краза требуеться ширина не меньше его ширины} fa:=random(2); {Случайное задани о наличии кольца в данной строке столбца кольца,0- пусто, 1 есть} if fa=1 then {Если есть кольцо то выполняем создание для него координат} xa[j,i]:=getmaxx-xa1; {Эта координата по вертикали, меняеться тока в колонках } ya[j,i]:=getmaxy-60*s1; {Это устанавливает растояние между кольцами, т.к накрутка стоит раньше то, не имеет разницы есть или нету кольца в соседней клтке, переходит на следующую} delay(30); {Все дальше мозг отказал....} {Все вроде правильно....но с двумерным масивом незапускаеться, с 1 мерным запустилось все красиво, если кто сможет допишите или поправте для более удобного употребления зарание благодарен :)} end; end; x:=50; y:=getmaxy div 2; x1:=x+70; y1:=y+20; c:=14; ra:=10; ca:=5; stx:=5; pomehi(xa[j,i],ya[j,i],ra,ca); Kraz(x,y,x1,y1,c); Repeat for j:=1 to f do begin for i:=1 to n do begin neupr(xa[j,i],ya[j,i],ra,stx); end; end; if keypressed then upr(x,y,x1,y1,c); until ch=#27; readln; closegraph; end.