{strzelamy do kwadratowej piłki z trójkątnej armaty} program gierka1; uses crt,graph;
{trójkątna armata} procedure armata(x,y,bok,kolor:integer); begin setcolor(kolor); moveto(x,y); lineRel(0,bok); linerel(-bok,-bok div 2); linerel(bok, -bok div 2); end;
{kwadratowa piłka} 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;
var d,m:integer;
xs,ys,ds,ks, {dane poruszającego się pocisku} kxs, {szybkość pocisku} xr,yr,dr,kr, {dane rakietki} xp,yp,dp,kp, {dane piłki} kxp,kyp:integer; {szybkość ruchu piłki}
strzal:boolean; {można strzelać} 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;
{wspolrzedne pilki} xp:=0; yp:=0; dp:=30; kp:=12; kxp:=1; kyp:=1;
koniec:=false; {koniec gry} strzal:=false; {można strzelać gdy pocisk za ekranem}
{współrzędne pocisku} kxs:=-10; xs:=-10; ks:=10; ds:=3;
repeat {rysowanie} armata(xr,yr,dr,kr); pilka(xp,yp,dp,kp); {pocisk rysujemy i wymazujemy tylko wtedy gdy była spacja} if strzal then pilka(xs,ys,ds,ks);
{wstrzymanie} delay(10);
{wymazanie} armata(xr,yr,dr,0); pilka(xp,yp,dp,0); if strzal then pilka(xs,ys,ds,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-5;{kod kursora gora} 'P':yr:=yr+5;{kod kursora dol} {jeśli spacja to strzelamy, gdy nie ma pocisku na ekranie} ' ':if not(strzal) then begin strzal:=true; {jest pocisk na ekranie} xs:=xr; {współrzędne początkowe pocisku} ys:=yr+dr div 2; end; #27:koniec:=true;{kod klawisza ESC} end; {koniec case} {oczyszczamy bufor klawiatury zeby nie piszczalo} while keypressed do znak:=readkey; end; {gdy naciśnięto klawisz}
{ruch pilki} xp:=xp+kxp; yp:=yp+kyp;
{odbicia od brzegow ekranu} if xp<=0 then kxp:=-kxp; if (yp<=0) or (yp>=479) then kyp:=-kyp;
{koniec gry gdy piłka przeleci za rakietka} if xp>=639 then koniec:=true;
{odbicie od rakietki} if (xp+dp>=xr) and ((yp+dp>yr) and (yp+dp<yr+dr)) then kxp:=-kxp;
{jeśli jest pocisk na ekranie to go przesuwamy} if strzal then begin xs:=xs+kxs; {przesuwamy aż wylezie za ekran z lewej strony do tego momentu nie można strzelać} if xs<0 then strzal:=false; {teraz dopiero będzie można oddać nowy strzał} {i jeszcze trzeba sprawdzać czy nie uderzył w piłkę} {w pionie i w poziomie mieści się w obrębie piłki} if (ys>yp) and (ys<yp+dp) and (xs>xp) and (xs<xp+dp) then {gdy trafimy w piłkę to zmieniamy jej kolor na kolejny} if kp<15 then kp:=kp+1 else kp:=1; end; {strzał}
until koniec;
closegraph; end.