{od płaskiej rakietki odbijamy kwadratowe piłki których współrzędne pamiętamy w tablicy} program gierka; uses crt,graph; {pionowa linia o długosci i kolorze} procedure rakietka(x,y,dlugosc,kolor:integer); begin setcolor(kolor); line(x,y,x,y+dlugosc); end; {kwadratowa pilka o dlogosci sciany i kolorze} procedure pilka(x,y,dlugosc,kolor:integer); begin setcolor(kolor); line(x,y,x+dlugosc,y); line(x+dlugosc,y,x+dlugosc,y+dlugosc); line(x+dlugosc,y+dlugosc,x,y+dlugosc); line(x,y+dlugosc,x,y); end; type Tpilka=record xp,yp, {współrzędne lewego górnego rogu piłki} dp,kp, {bok i kolor piłki} kxp,kyp:integer; {szybkość ruchu piłki w kierunku x i y} end; var d,m:integer; {inicjacja grafiki} i,ile:byte; {ilość piłek na ekranie} pilki:array[1..50] of Tpilka; xr,yr,dr,kr:integer; {dane rakietki} koniec:boolean; {kiedy koniec gierki} znak:char; {jaki znak na klawiaturze} begin d:=detect; initgraph(d,m,''); {wspolrzedne rakietki} xr:=630; yr:=200; dr:=50; kr:=14; randomize; ile:=5; {wspolrzedne piłek są losowane} for i:=1 to ile do begin pilki[i].xp:=random(300); pilki[i].yp:=random(460); pilki[i].dp:=10; pilki[i].kp:=random(5)+10; pilki[i].kxp:=random(5)-2; pilki[i].kyp:=random(5)-2; end; koniec:=false; repeat {rysowanie} rakietka(xr,yr,dr,kr); for i:=1 to ile do pilka(pilki[i].xp,pilki[i].yp,pilki[i].dp,pilki[i].kp); {wstrzymanie} delay(10); {wymazanie} rakietka(xr,yr,dr,0); for i:=1 to ile do pilka(pilki[i].xp,pilki[i].yp,pilki[i].dp,0); {sprawdzanie klawiatury-gdy nacisnieto jakis klawisz} if keypressed then begin {odczytanie klawisza-kod klawisza w zmiennen znak} znak:=readkey; {gdy to byl kod kursora to czytamy kolejny znak bo pierwszy ma kod 0} if znak=#0 then znak:=readkey; case znak of 'H':yr:=yr-10;{kod kursora gora} 'P':yr:=yr+10;{kod kursora dol} #27:koniec:=true;{kod klawisza ESC} end; {oczyszczamy bufor klawiatury zeby nie piszczalo} while keypressed do znak:=readkey; end; {ruch pilki} for i:=1 to ile do begin pilki[i].xp:=pilki[i].xp+pilki[i].kxp; pilki[i].yp:=pilki[i].yp+pilki[i].kyp; end; for i:=1 to ile do begin {odbicia od brzegow ekranu} if pilki[i].xp<=0 then pilki[i].kxp:=-pilki[i].kxp; if (pilki[i].yp<=0) or (pilki[i].yp>=479) then pilki[i].kyp:=-pilki[i].kyp; {gdy przeleci za rakietka to piłka nie rysowana} if pilki[i].xp>=639 then begin pilki[i].kxp:=0; pilki[i].kyp:=0; pilki[i].dp:=0; end; {odbicie od rakietki} if (pilki[i].xp+pilki[i].dp>=xr) and ((pilki[i].yp+pilki[i].dp>yr) and (pilki[i].yp+pilki[i].dp<yr+dr)) then pilki[i].kxp:=-pilki[i].kxp; end; until koniec; closegraph; end.