{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.