unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, LCLtype, Math, MMSystem;

type

  { TForm1 }

  TForm1 = class(TForm)
    procedure FormClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure FormPaint(Sender: TObject);
    procedure palyafrissites(Sender: TObject);
    procedure villanas(Sender: TObject);
    procedure idobeallitas(Sender: TObject);
    procedure cucccsinalo(Sender: TObject);
    procedure hanglejatszas(hang: string);
    procedure kilepgombbe(Sender: TObject);
  private

  public

  end;

type Tlabda = class(TObject)
  private
  public
    xhely,yhely: word;
    kepe: TPortableNetworkGraphic;
    sebessege: byte;
    irany: integer;
end;

type Tsarokresz = class(TObject)
  private
  public
    xhely,yhely: word;
    kepe: TPortableNetworkGraphic;
end;

type Toldalresz = class(TObject)
  private
  public
    xhely,yhely: word;
    kepe: TPortableNetworkGraphic;
end;

type Tizzo = class(TObject)
  private
  public
    xhely,yhely: word;
    kepe: TPortableNetworkGraphic;
    irany: integer;
end;

type Tcucc = class(TObject)
  private
  public
    xhely,yhely: word;
    kepe: TPortableNetworkGraphic;
    eltuntetoidozito: byte;
end;

type Tuto = class(TObject)
  private
  public
    xhely,yhely: word;
    kepe: TPortableNetworkGraphic;
    sebessege: byte;
end;

type Tnyelvgomb = class(TObject)
  private
  public
    xhely,yhely: word;
    kepe: TBitmap;
end;

var
  Form1: TForm1;
  palyafrissito,villanasidozito,idozito,cuccidozito: TTimer;
  labdakep,izzokikep,izzobekep,utobaljobbkep,utofentlentkep,sarokreszkep,oldalbekep,oldalkikep,orakep,cimkep,javitaskep: TPortableNetworkGraphic;
  angolulkep1,angolulkep2,magyarulkep1,magyarulkep2: TBitmap;
  balgomb,jobbgomb,felgomb,legomb,szunet,kilepes,ujrakezdes: boolean;
  oldalreszdb,mostvillanooldalresz: word;
  sarokreszdb,flutodb,bjutodb,izzodb,maxeps,eps,jatallapot,szint,nyelv,perc,masodperc,cuccdb: byte;
  nyelvgomb: Tnyelvgomb;
  labda: Tlabda;
  sarokresz: array of Tsarokresz;
  oldalresz: array of Toldalresz;
  fluto,bjuto: array of Tuto;
  izzo: array of Tizzo;
  cucc: array of Tcucc;
  cimszoveg,kilepszoveg,kudarcszoveg,sikerszoveg,kudarcidoszoveg,jatekkeszszoveg: array [0..1] of string;
  hangbuffer: array [0..255] of Char;
  hangero: Dword;

implementation

{$R *.lfm}

{ TForm1 }

function pontirany(x1: integer; y1: integer; x2: integer; y2: integer): double;
var szam: double;
begin
  szam:=arctan2(y2-y1,x2-x1);
  if szam<0 then szam:=szam+2*pi;
  pontirany:=360-(szam*180)/pi;
end;

procedure nyelvgombcsinalas(idex, idey: word);
begin
  nyelvgomb:=Tnyelvgomb.Create;
  nyelvgomb.xhely:=idex;
  nyelvgomb.yhely:=idey;
  case nyelv of
       0: nyelvgomb.kepe:=angolulkep1;
       1: nyelvgomb.kepe:=magyarulkep1;
  end;
end;

procedure labdacsinalas(idex, idey: word);
begin
  labda:=Tlabda.Create;
  labda.xhely:=idex;
  labda.yhely:=idey;
  labda.kepe:=labdakep;
  labda.sebessege:=8;
  labda.irany:=round(random(360));
end;

procedure sarokreszcsinalas(idex, idey: word);
begin
  setlength(sarokresz,sarokreszdb+1);
  sarokresz[sarokreszdb]:=Tsarokresz.Create;
  sarokresz[sarokreszdb].xhely:=idex;
  sarokresz[sarokreszdb].yhely:=idey;
  sarokresz[sarokreszdb].kepe:=sarokreszkep;
  inc(sarokreszdb,1);
end;

procedure oldalreszcsinalas(idex, idey: word);
begin
  setlength(oldalresz,oldalreszdb+1);
  oldalresz[oldalreszdb]:=Toldalresz.Create;
  oldalresz[oldalreszdb].xhely:=idex;
  oldalresz[oldalreszdb].yhely:=idey;
  oldalresz[oldalreszdb].kepe:=oldalkikep;
  inc(oldalreszdb,1);
end;

procedure izzocsinalas(idex, idey: word);
begin
  setlength(izzo,izzodb+1);
  izzo[izzodb]:=Tizzo.Create;
  izzo[izzodb].xhely:=idex;
  izzo[izzodb].yhely:=idey;
  izzo[izzodb].kepe:=izzokikep;
  izzo[izzodb].irany:=round(pontirany(idex,idey,Form1.width div 2,Form1.height div 2));
  inc(izzodb,1);
end;

procedure cucccsinalas(idex, idey: word);
begin
  setlength(cucc,cuccdb+1);
  cucc[cuccdb]:=Tcucc.Create;
  cucc[cuccdb].xhely:=idex;
  cucc[cuccdb].yhely:=idey;
  cucc[cuccdb].eltuntetoidozito:=255;
  if eps<maxeps then
  begin
       if round(random(2))=1 then
          cucc[cuccdb].kepe:=javitaskep
       else cucc[cuccdb].kepe:=orakep;
  end
  else cucc[cuccdb].kepe:=orakep;
  inc(cuccdb,1);
end;

procedure fentlentutocsinalas();
begin
  setlength(fluto,flutodb+1);
  fluto[flutodb]:=Tuto.Create; //Fenti ütő
  fluto[flutodb].xhely:=(Form1.Width div 2)-(utofentlentkep.width div 2);
  fluto[flutodb].yhely:=32;
  fluto[flutodb].sebessege:=16;
  fluto[flutodb].kepe:=utofentlentkep;
  inc(flutodb,1);
  setlength(fluto,flutodb+1);
  fluto[flutodb]:=Tuto.Create; //Lenti ütő
  fluto[flutodb].xhely:=(Form1.Width div 2)-(utofentlentkep.width div 2);
  fluto[flutodb].yhely:=Form1.height-oldalkikep.height;
  fluto[flutodb].sebessege:=16;
  fluto[flutodb].kepe:=utofentlentkep;
end;

procedure baljobbutocsinalas();
begin
  setlength(bjuto,bjutodb+1);
  bjuto[bjutodb]:=Tuto.Create; //Bal oldali ütő
  bjuto[bjutodb].xhely:=0;
  bjuto[bjutodb].yhely:=(Form1.Height div 2)-(utobaljobbkep.height div 2);
  bjuto[bjutodb].sebessege:=16;
  bjuto[bjutodb].kepe:=utobaljobbkep;
  inc(bjutodb,1);
  setlength(bjuto,bjutodb+1);
  bjuto[bjutodb]:=Tuto.Create; //Jobb oldali ütő
  bjuto[bjutodb].xhely:=Form1.Width-sarokreszkep.width;
  bjuto[bjutodb].yhely:=(Form1.Height div 2)-(utobaljobbkep.height div 2);
  bjuto[bjutodb].sebessege:=16;
  bjuto[bjutodb].kepe:=utobaljobbkep;
end;

procedure keretcsinalas();
var xhely,yhely: word;
begin
  sarokreszcsinalas(0,sarokreszkep.height); sarokreszcsinalas(Form1.width-sarokreszkep.width,sarokreszkep.height);
  sarokreszcsinalas(0,Form1.height-sarokreszkep.height); sarokreszcsinalas(Form1.width-sarokreszkep.width,Form1.height-sarokreszkep.height);
  xhely:=sarokreszkep.width; yhely:=sarokreszkep.height;
  repeat //Fölső sor:
    oldalreszcsinalas(xhely,yhely);
    xhely:=xhely+oldalkikep.width;
  until xhely>=Form1.width-oldalkikep.width;
  xhely:=Form1.width-sarokreszkep.width; yhely:=sarokreszkep.height*2;
  repeat //Jobb oldali sor:
    oldalreszcsinalas(xhely,yhely);
    yhely:=yhely+oldalkikep.height;
  until yhely>=Form1.height-(oldalkikep.height*2);
  xhely:=Form1.width-(sarokreszkep.width*2); yhely:=Form1.height-sarokreszkep.height;
  repeat //Alsó sor:
    oldalreszcsinalas(xhely,yhely);
    xhely:=xhely-oldalkikep.width;
  until xhely<sarokreszkep.width;
  xhely:=0; yhely:=Form1.height-(sarokreszkep.height*2);
  repeat //Bal oldali sor:
    oldalreszcsinalas(xhely,yhely);
    yhely:=yhely-oldalkikep.height;
  until yhely<=sarokreszkep.height*2;
  fentlentutocsinalas();
  baljobbutocsinalas();
end;

procedure izzokirakas();
var i: byte;
begin
  if izzodb>0 then
  begin
       for i:=0 to izzodb-1 do
           delete(izzo,i,1);
       izzodb:=0;
  end;
  if cuccdb>0 then
  begin
       for i:=0 to cuccdb-1 do
           delete(cucc,i,1);
       cuccdb:=0;
  end;
  case szint of
  1,3: begin
     izzocsinalas(Form1.width div 4,Form1.height div 2);
     izzocsinalas(Form1.width-(Form1.width div 4),Form1.height div 2);
     end;
  2,4: begin
     izzocsinalas(Form1.width div 2,Form1.height div 4);
     izzocsinalas(Form1.width div 2,Form1.height-(Form1.height div 4));
     end;
  5: begin
     izzocsinalas(Form1.width div 2,Form1.height div 4);
     izzocsinalas(Form1.width div 4,Form1.height-(Form1.height div 4));
     izzocsinalas(Form1.width-(Form1.width div 4),Form1.height-(Form1.height div 4));
     end;
  6: begin
     izzocsinalas(Form1.width div 4,Form1.height div 4);
     izzocsinalas(Form1.width-(Form1.width div 4),Form1.height div 4);
     izzocsinalas(Form1.width div 2,Form1.height-(Form1.height div 4));
     end;
  7,8: begin
     izzocsinalas(Form1.width div 2,Form1.height div 4);
     izzocsinalas(Form1.width div 2,Form1.height-(Form1.height div 4));
     izzocsinalas(Form1.width div 4,Form1.height div 2);
     izzocsinalas(Form1.width-(Form1.width div 4),Form1.height div 2);
     end;
  end;
end;

procedure epsegcsikrajza();
var epsegszazalek,csikszazalek,csikszelesseg: word;
begin
  csikszelesseg:=(Form1.width div 2)-4;
  Form1.Canvas.Brush.Color:=clWhite;
  Form1.Canvas.Rectangle((Form1.width div 2)+2,2,(Form1.width div 2)+2+csikszelesseg,sarokreszkep.height-2);
  if eps<round(maxeps/2) then Form1.Canvas.Brush.Color:=clRed
  else Form1.Canvas.Brush.Color:=clBlue;
  epsegszazalek:=round((100*eps)/maxeps);
  csikszazalek:=round((csikszelesseg*epsegszazalek)/100);
  Form1.Canvas.Rectangle((Form1.width div 2)+2,2,(Form1.width div 2)+2+csikszazalek,sarokreszkep.height-2);
end;

procedure szovegek();
begin
  cimszoveg[0]:='Ebben a kis játékban a 4 ütővel a labdát terelgetve kell azt ütköztetni a lámpákkal, hogy azok bekapcsoljanak.'+LineEnding+'Ne hagyd, hogy a labda ütközzön a pálya szélével, mert az károsodást okoz!'+LineEnding+'A játékból az <ESC> gomb lenyomásával léphetsz ki, az ütőket pedig a nyíl gombokkal irányíthatod.'+LineEnding+'A hangerő a jobb oldali, numerikus billentyűzet <+> és <-> gombjaival állítható.'+LineEnding+'Nyomj le egy gombot a kezdéshez!';
  kilepszoveg[0]:='<ESC>: kilépés. Szint: ';
  kudarcszoveg[0]:='Nem sikerült...';
  sikerszoveg[0]:='Pálya teljesítve! Bónuszidő: ';
  kudarcidoszoveg[0]:='Lejárt az idő! Nem sikerült...';
  jatekkeszszoveg[0]:='Játék teljesítve! Gratulálok!';
  cimszoveg[1]:='In this small game you can move the 4 rackets to direct the ball onto lamps to switch on those.'+LineEnding+'You must avoid collision between ball and edge playground, because it causes damage!'+LineEnding+'You can exit the game by press <ESC> and direct the rackets by arrow keys.'+LineEnding+'You can set the volume with the <+> and <-> buttons on numpad.'+LineEnding+'Press a key to begin!';
  kilepszoveg[1]:='<ESC>: exit. Level: ';
  kudarcszoveg[1]:='Failed...';
  sikerszoveg[1]:='Level completed! Bonus time: ';
  kudarcidoszoveg[1]:='Time is up! Failed...';
  jatekkeszszoveg[1]:='Game completed! Congratulations!';
end;

procedure palyatorles();
var i: word;
begin
  mostvillanooldalresz:=0;
  villanasidozito.enabled:=false;
  cuccidozito.enabled:=false;
  for i:=0 to sarokreszdb-1 do
      delete(sarokresz,i,1);
  for i:=0 to oldalreszdb-1 do
      delete(oldalresz,i,1);
  for i:=0 to flutodb do
      delete(fluto,i,1);
  for i:=0 to bjutodb do
      delete(bjuto,i,1);
  for i:=0 to izzodb-1 do
      delete(izzo,i,1);
  for i:=0 to cuccdb-1 do
      delete(cucc,i,1);
  FreeAndNil(labda);
end;

procedure TForm1.hanglejatszas(hang: string);
begin
    mciSendString(PChar('play '+hang), hangbuffer, 255, 0);
end;

procedure TForm1.kilepgombbe(Sender: TObject);
var valasz,stilus: integer;
begin
 stilus:=MB_ICONQUESTION + MB_YESNO;
 case nyelv of
 0: valasz:=Application.MessageBox('Biztosan ki akarsz lépni?', 'Megerősítés', stilus);
 1: valasz:=Application.MessageBox('Are you sure you want to exit?', 'Confirmation', stilus);
 end;
 if valasz=IDYES then
 begin
         palyatorles();
         Canvas.Font.Size:=16;
         jatallapot:=0;
         nyelvgombcsinalas(5,5);
         with canvas do invalidate;
 end
 else
 begin
    if mostvillanooldalresz<>0 then villanasidozito.enabled:=true;
    idozito.enabled:=true;
    cuccidozito.enabled:=true;
    szunet:=false;
 end;
end;

procedure TForm1.FormClick(Sender: TObject);
begin
  if jatallapot=0 then
  begin
       if (Mouse.CursorPos.X>=nyelvgomb.xhely) and (Mouse.CursorPos.X<=nyelvgomb.xhely+nyelvgomb.kepe.width) and (Mouse.CursorPos.Y>=nyelvgomb.yhely) and (Mouse.CursorPos.Y<=nyelvgomb.yhely+nyelvgomb.kepe.height) then
       begin
            case nyelv of
                 0: begin
                   nyelvgomb.kepe:=magyarulkep1;
                   nyelv:=1;
                 end;
                 1: begin
                   nyelvgomb.kepe:=angolulkep1;
                   nyelv:=0;
                 end;
            end;
            with canvas do invalidate;
       end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  BorderStyle:=bsNone;
  WindowState:=wsFullScreen;
  width:=Screen.width;
  height:=Screen.height;
  randomize;
  labdakep:=TPortableNetworkGraphic.Create();
  labdakep.transparent:=true;
  labdakep.LoadFromFile('kepei\labda.png');
  izzokikep:=TPortableNetworkGraphic.Create();
  izzokikep.transparent:=true;
  izzokikep.LoadFromFile('kepei\izzo_ki.png');
  izzobekep:=TPortableNetworkGraphic.Create();
  izzobekep.transparent:=true;
  izzobekep.LoadFromFile('kepei\izzo_be.png');
  oldalkikep:=TPortableNetworkGraphic.Create();
  oldalkikep.transparent:=true;
  oldalkikep.LoadFromFile('kepei\oldal_ki.png');
  oldalbekep:=TPortableNetworkGraphic.Create();
  oldalbekep.transparent:=true;
  oldalbekep.LoadFromFile('kepei\oldal_be.png');
  sarokreszkep:=TPortableNetworkGraphic.Create();
  sarokreszkep.transparent:=true;
  sarokreszkep.LoadFromFile('kepei\sarokresz.png');
  utofentlentkep:=TPortableNetworkGraphic.Create();
  utofentlentkep.transparent:=true;
  utofentlentkep.LoadFromFile('kepei\uto_fent_lent.png');
  utobaljobbkep:=TPortableNetworkGraphic.Create();
  utobaljobbkep.transparent:=true;
  utobaljobbkep.LoadFromFile('kepei\uto_bal_jobb.png');
  orakep:=TPortableNetworkGraphic.Create();
  orakep.transparent:=true;
  orakep.LoadFromFile('kepei\ora.png');
  cimkep:=TPortableNetworkGraphic.Create();
  cimkep.transparent:=true;
  cimkep.LoadFromFile('kepei\cimfelirat.png');
  javitaskep:=TPortableNetworkGraphic.Create();
  javitaskep.transparent:=true;
  javitaskep.LoadFromFile('kepei\javitas.png');
  angolulkep1:=TBitmap.Create();
  angolulkep1.LoadFromFile('kepei\angolulgomb1.bmp');
  angolulkep2:=TBitmap.Create();
  angolulkep2.LoadFromFile('kepei\angolulgomb2.bmp');
  magyarulkep1:=TBitmap.Create();
  magyarulkep1.LoadFromFile('kepei\magyarulgomb1.bmp');
  magyarulkep2:=TBitmap.Create();
  magyarulkep2.LoadFromFile('kepei\magyarulgomb2.bmp');
  palyafrissito:=TTimer.Create(nil);
  palyafrissito.interval:=25;
  palyafrissito.ontimer:=@palyafrissites;
  idozito:=TTimer.Create(nil);
  idozito.interval:=1000;
  idozito.enabled:=false;
  idozito.ontimer:=@idobeallitas;
  cuccidozito:=TTimer.Create(nil);
  cuccidozito.interval:=5000;
  cuccidozito.enabled:=false;
  cuccidozito.ontimer:=@cucccsinalo;
  villanasidozito:=TTimer.Create(nil);
  villanasidozito.interval:=50;
  villanasidozito.enabled:=false;
  villanasidozito.ontimer:=@villanas;
  mostvillanooldalresz:=0;
  nyelv:=0;
  nyelvgombcsinalas(5,5);
  Canvas.Font.Size:=16;
  szovegek();
  hangero:=20000;
  jatallapot:=0; //Címképernyő
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState
  );
begin
  if jatallapot=0 then
  begin
       if Key=VK_ESCAPE then close()
       else
       begin
         FreeAndNil(nyelvgomb);
         labdacsinalas(Form1.width div 2,Form1.height div 2);
         sarokreszdb:=0; oldalreszdb:=0; flutodb:=0; bjutodb:=0; izzodb:=0; cuccdb:=0;
         felgomb:=false; legomb:=false; balgomb:=false; jobbgomb:=false;
         maxeps:=100; eps:=maxeps;
         szint:=1;
         keretcsinalas();
         izzokirakas();
         szunet:=false;
         kilepes:=false;
         ujrakezdes:=false;
         Canvas.Font.Size:=16;
         perc:=5; masodperc:=0;
         idozito.enabled:=true;
         cuccidozito.enabled:=true;
         jatallapot:=1;
       end;
  end;
  if jatallapot=1 then
  begin
    if Key=VK_ESCAPE then
    begin
         villanasidozito.enabled:=false;
         idozito.enabled:=false;
         cuccidozito.enabled:=false;
         felgomb:=false; legomb:=false; balgomb:=false; jobbgomb:=false;
         szunet:=true;
         kilepgombbe(Form1);
    end;
    if (Key=VK_UP) and (szunet=false) then felgomb:=true;
    if (Key=VK_DOWN) and (szunet=false) then legomb:=true;
    if (Key=VK_LEFT) and (szunet=false) then balgomb:=true;
    if (Key=VK_RIGHT) and (szunet=false) then jobbgomb:=true;
    if (Key=VK_ADD) and (szunet=false) then
    begin
      if hangero+500<=65535 then
      begin
           hangero:=hangero+500;
           waveOutSetVolume(0,hangero);
      end;
    end;
    if (Key=VK_SUBTRACT) and (szunet=false) then
    begin
      if hangero-500>0 then
      begin
           hangero:=hangero-500;
           waveOutSetVolume(0,hangero);
      end;
    end;
  end;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if jatallapot=1 then
  begin
    if Key=VK_UP then felgomb:=false;
    if Key=VK_DOWN then legomb:=false;
    if Key=VK_LEFT then balgomb:=false;
    if Key=VK_RIGHT then jobbgomb:=false;
  end;
end;

procedure TForm1.FormPaint(Sender: TObject);
var i: word;
  szovstilus: TTextStyle;
begin
  case jatallapot of
  0: begin
       canvas.draw((Form1.width div 2)-(cimkep.width div 2),1,cimkep);
       canvas.draw(nyelvgomb.xhely,nyelvgomb.yhely,nyelvgomb.kepe);
       szovstilus:=Canvas.TextStyle;
       szovstilus.Wordbreak:=True;
       szovstilus.SingleLine:=False;
       Canvas.TextRect(Rect(0,0,Form1.width,Form1.height),1,Form1.height div 3,cimszoveg[nyelv],szovstilus);
     end;
  1:  begin
      canvas.textout(1,1,kilepszoveg[nyelv]+inttostr(szint));
      canvas.draw(Form1.width div 4,1,orakep);
      canvas.textout((Form1.width div 4)+orakep.width,1,inttostr(perc)+':'+inttostr(masodperc));
      epsegcsikrajza();
      for i:=0 to sarokreszdb-1 do
          canvas.draw(sarokresz[i].xhely,sarokresz[i].yhely,sarokresz[i].kepe);
      for i:=0 to oldalreszdb-1 do
          canvas.draw(oldalresz[i].xhely,oldalresz[i].yhely,oldalresz[i].kepe);
      for i:=0 to flutodb do
          canvas.draw(fluto[i].xhely,fluto[i].yhely,fluto[i].kepe);
      for i:=0 to bjutodb do
          canvas.draw(bjuto[i].xhely,bjuto[i].yhely,bjuto[i].kepe);
      for i:=0 to izzodb-1 do
          canvas.draw(izzo[i].xhely,izzo[i].yhely,izzo[i].kepe);
      if cuccdb>0 then
      begin
        for i:=0 to cuccdb-1 do
            canvas.draw(cucc[i].xhely,cucc[i].yhely,cucc[i].kepe);
      end;
      canvas.draw(labda.xhely,labda.yhely,labda.kepe);
    end;
  end;
end;

procedure TForm1.palyafrissites(Sender: TObject);
var labdakovx,labdakovy,i: word;
  labdautkozik,mindenizzovilagit: boolean;
begin
  if kilepes=true then
  begin
    palyatorles();
    jatallapot:=0;
    nyelvgombcsinalas(5,5);
  end
  else
  if ujrakezdes=true then
  begin
    maxeps:=100; eps:=maxeps;
    labda.xhely:=Form1.width div 2; labda.yhely:=Form1.height div 2;
    fluto[0].xhely:=(Form1.Width div 2)-(utofentlentkep.width div 2);
    fluto[1].xhely:=(Form1.Width div 2)-(utofentlentkep.width div 2);
    bjuto[0].yhely:=(Form1.Height div 2)-(utobaljobbkep.height div 2);
    bjuto[1].yhely:=(Form1.Height div 2)-(utobaljobbkep.height div 2);
    felgomb:=false; legomb:=false; balgomb:=false; jobbgomb:=false;
    izzokirakas();
    perc:=5; masodperc:=0;
    idozito.enabled:=true;
    cuccidozito.enabled:=true;
    szunet:=false;
    ujrakezdes:=false;
  end
  else
  if jatallapot=0 then
  begin
       if (Mouse.CursorPos.X>=nyelvgomb.xhely) and (Mouse.CursorPos.X<=nyelvgomb.xhely+nyelvgomb.kepe.width) and (Mouse.CursorPos.Y>=nyelvgomb.yhely) and (Mouse.CursorPos.Y<=nyelvgomb.yhely+nyelvgomb.kepe.height) then
       begin
            if nyelvgomb.kepe=magyarulkep1 then nyelvgomb.kepe:=magyarulkep2
            else if nyelvgomb.kepe=angolulkep1 then nyelvgomb.kepe:=angolulkep2;
       end
       else
       begin
            if nyelvgomb.kepe=magyarulkep2 then nyelvgomb.kepe:=magyarulkep1
            else if nyelvgomb.kepe=angolulkep2 then nyelvgomb.kepe:=angolulkep1;
       end;
  end
  else
  if (jatallapot=1) and (szunet=false) then
  begin
    if felgomb=true then
    begin
         if bjuto[0].yhely-bjuto[0].sebessege>=sarokreszkep.height*2 then
                  begin
                       bjuto[0].yhely:=bjuto[0].yhely-bjuto[0].sebessege;
                       bjuto[1].yhely:=bjuto[1].yhely-bjuto[1].sebessege;
                  end;
    end;
    if legomb=true then
    begin
         if bjuto[0].yhely+utobaljobbkep.height+bjuto[0].sebessege<=Form1.height-sarokreszkep.height then
                  begin
                       bjuto[0].yhely:=bjuto[0].yhely+bjuto[0].sebessege;
                       bjuto[1].yhely:=bjuto[1].yhely+bjuto[1].sebessege;
                  end;
    end;
    if balgomb=true then
    begin
         if fluto[0].xhely-fluto[0].sebessege>=sarokreszkep.width then
                  begin
                       fluto[0].xhely:=fluto[0].xhely-fluto[0].sebessege;
                       fluto[1].xhely:=fluto[1].xhely-fluto[1].sebessege;
                  end;
    end;
    if jobbgomb=true then
    begin
         if fluto[0].xhely+utofentlentkep.width+fluto[0].sebessege<=Form1.width-sarokreszkep.width then
                  begin
                       fluto[0].xhely:=fluto[0].xhely+fluto[0].sebessege;
                       fluto[1].xhely:=fluto[1].xhely+fluto[1].sebessege;
                  end;
    end;
    case szint of
    3: begin
         for i:=0 to izzodb-1 do
         begin
             izzo[i].irany:=izzo[i].irany+1;
             if izzo[i].irany>359 then izzo[i].irany:=0;
             izzo[i].xhely:=round(izzo[i].xhely+cos(degtorad(360-izzo[i].irany)));
             izzo[i].yhely:=round(izzo[i].yhely+cos(degtorad(360-izzo[i].irany)));
         end;
       end;
    4,7: begin
         for i:=0 to izzodb-1 do
         begin
             izzo[i].irany:=izzo[i].irany-1;
             if izzo[i].irany<0 then izzo[i].irany:=359;
             izzo[i].xhely:=round(izzo[i].xhely+cos(degtorad(360-izzo[i].irany)));
             izzo[i].yhely:=round(izzo[i].yhely+cos(degtorad(360-izzo[i].irany)));
         end;
       end;
    8: begin
         for i:=0 to izzodb-1 do
         begin
             izzo[i].irany:=izzo[i].irany+1;
             if izzo[i].irany>359 then izzo[i].irany:=0;
             izzo[i].xhely:=round(izzo[i].xhely+cos(degtorad(360-izzo[i].irany)));
             izzo[i].yhely:=round(izzo[i].yhely+sin(degtorad(360-izzo[i].irany)));
         end;
       end;
    end;
    labdautkozik:=false;
    labdakovx:=round(labda.xhely+cos(degtorad(360-labda.irany))*labda.sebessege);
    labdakovy:=round(labda.yhely+sin(degtorad(360-labda.irany))*labda.sebessege);
    if ((labdakovx<bjuto[0].xhely+utobaljobbkep.width) and (labdakovx+labdakep.width>bjuto[0].xhely) and (labdakovy<bjuto[0].yhely+utobaljobbkep.height) and (labdakep.height+labdakovy>bjuto[0].yhely)) or ((labdakovx<bjuto[1].xhely+utobaljobbkep.width) and (labdakovx+labdakep.width>bjuto[1].xhely) and (labdakovy<bjuto[1].yhely+utobaljobbkep.height) and (labdakep.height+labdakovy>bjuto[1].yhely)) then
    begin
         hanglejatszas('hangok\utohang.wav');
         if labda.xhely>Form1.width div 2 then //A pálya jobb szélén van ütközés az ütővel?
         begin
           repeat
                 labda.irany:=round(random(360));
           until (labda.irany>=135) and (labda.irany<=225);
         end
         else //Vagy a bal szélén?
         begin
           repeat
                 labda.irany:=round(random(360));
           until (labda.irany<=45) or (labda.irany>=315);
         end;
         labdautkozik:=true;
    end
    else if ((labdakovx<fluto[0].xhely+utofentlentkep.width) and (labdakovx+labdakep.width>fluto[0].xhely) and (labdakovy<fluto[0].yhely+utofentlentkep.height) and (labdakep.height+labdakovy>fluto[0].yhely)) or ((labdakovx<fluto[1].xhely+utofentlentkep.width) and (labdakovx+labdakep.width>fluto[1].xhely) and (labdakovy<fluto[1].yhely+utofentlentkep.height) and (labdakep.height+labdakovy>fluto[1].yhely)) then
    begin
         hanglejatszas('hangok\utohang.wav');
         if labda.yhely<Form1.height div 2 then //A pálya tetején van ütközés az ütővel?
         begin
           repeat
                 labda.irany:=round(random(360));
           until (labda.irany>=225) and (labda.irany<=315);
         end
         else //Vagy az alján?
         begin
           repeat
                 labda.irany:=round(random(360));
           until (labda.irany>=45) and (labda.irany<=135);
         end;
         labdautkozik:=true;
    end
    else
    begin
         for i:=0 to oldalreszdb-1 do
         begin
              if (labdakovx<oldalresz[i].xhely+oldalkikep.width) and (labdakovx+labdakep.width>oldalresz[i].xhely) and (labdakovy<oldalresz[i].yhely+oldalkikep.height) and (labdakep.height+labdakovy>oldalresz[i].yhely) then
              begin
                   hanglejatszas('hangok\utkfalhang.wav');
                   if (oldalresz[i].xhely=0) or (oldalresz[i].xhely=Form1.width-sarokreszkep.width) then
                   begin
                         if labda.xhely>Form1.width div 2 then //A pálya jobb szélével van az ütközés?
                         begin
                           repeat
                                 labda.irany:=round(random(360));
                           until (labda.irany>=135) and (labda.irany<=225);
                         end
                         else //Vagy a bal szélével?
                         begin
                           repeat
                                 labda.irany:=round(random(360));
                           until (labda.irany<=45) or (labda.irany>=315);
                         end;
                   end;
                   if (oldalresz[i].yhely=sarokreszkep.height) or (oldalresz[i].yhely=Form1.height-sarokreszkep.height) then
                   begin
                         if labda.yhely<Form1.height div 2 then //A pálya tetejével van ütközés?
                         begin
                           repeat
                                 labda.irany:=round(random(360));
                           until (labda.irany>=225) and (labda.irany<=315);
                         end
                         else //Vagy az aljával?
                         begin
                           repeat
                                 labda.irany:=round(random(360));
                           until (labda.irany>=45) and (labda.irany<=135);
                         end;
                   end;
                   labdautkozik:=true;
                   if eps-5>=0 then
                   begin
                     eps:=eps-5;
                     if mostvillanooldalresz=0 then
                     begin
                          villanasidozito.enabled:=true;
                          oldalresz[mostvillanooldalresz].kepe:=oldalbekep;
                     end;
                   end
                   else
                   begin
                        szunet:=true;
                        idozito.enabled:=false;
                        cuccidozito.enabled:=false;
                        showmessage(kudarcszoveg[nyelv]);
                        ujrakezdes:=true;
                   end;
                   break;
              end;

         end;
    end;
    if labdautkozik=false then
    begin
         labda.xhely:=labdakovx;
         labda.yhely:=labdakovy;
    end;
    if cuccdb>0 then
    begin
      for i:=0 to cuccdb-1 do
      begin
           if (labda.xhely<cucc[i].xhely+javitaskep.width) and (labda.xhely+labdakep.width>cucc[i].xhely) and (labda.yhely<cucc[i].yhely+javitaskep.height) and (labdakep.height+labda.yhely>cucc[i].yhely) then
           begin
                hanglejatszas('hangok\extrahang.wav');
                if cucc[i].kepe=javitaskep then eps:=maxeps
                else
                begin
                     if perc+1<=255 then
                        perc:=perc+1
                     else perc:=255;
                end;
                Delete(cucc,i,1); dec(cuccdb,1);
           end
           else
           begin
             dec(cucc[i].eltuntetoidozito,1);
             if cucc[i].eltuntetoidozito<1 then
             begin
               Delete(cucc,i,1); dec(cuccdb,1);
             end;
           end;
      end;
    end;
    labdautkozik:=false;
    for i:=0 to izzodb-1 do
    begin
         if (labda.xhely<izzo[i].xhely+izzokikep.width) and (labda.xhely+labdakep.width>izzo[i].xhely) and (labda.yhely<izzo[i].yhely+izzokikep.height) and (labdakep.height+labda.yhely>izzo[i].yhely) then
         begin
              if izzo[i].kepe=izzokikep then hanglejatszas('hangok\izzobehang.wav');
              izzo[i].kepe:=izzobekep;
              labdautkozik:=true;
              break;
         end;
    end;
    if labdautkozik=true then
    begin
         mindenizzovilagit:=true;
         for i:=0 to izzodb-1 do
         begin
              if izzo[i].kepe=izzokikep then
              begin
                   mindenizzovilagit:=false;
                   break;
              end;
         end;
         if mindenizzovilagit=true then
         begin
              oldalresz[mostvillanooldalresz].kepe:=oldalkikep;
              mostvillanooldalresz:=0;
              villanasidozito.enabled:=false;
              idozito.enabled:=false;
              cuccidozito.enabled:=false;
              felgomb:=false; legomb:=false; balgomb:=false; jobbgomb:=false;
              szunet:=true;
              if szint<8 then
              begin
                showmessage(sikerszoveg[nyelv]+inttostr(perc));
                maxeps:=100; eps:=maxeps;
                if 5+perc<=255 then
                   perc:=5+perc
                else perc:=255;
                masodperc:=0;
                szint:=szint+1;
                labda.xhely:=Form1.width div 2; labda.yhely:=Form1.height div 2;
                fluto[0].xhely:=(Form1.Width div 2)-(utofentlentkep.width div 2);
                fluto[1].xhely:=(Form1.Width div 2)-(utofentlentkep.width div 2);
                bjuto[0].yhely:=(Form1.Height div 2)-(utobaljobbkep.height div 2);
                bjuto[1].yhely:=(Form1.Height div 2)-(utobaljobbkep.height div 2);
                izzokirakas();
                szunet:=false;
                idozito.enabled:=true;
                cuccidozito.enabled:=true;
              end
              else
              begin
                showmessage(jatekkeszszoveg[nyelv]);
                kilepes:=true;
              end;
         end;
    end;
  end;
  with canvas do invalidate;
end;

procedure TForm1.villanas(Sender: TObject);
begin
  if mostvillanooldalresz<oldalreszdb-1 then
  begin
       oldalresz[mostvillanooldalresz].kepe:=oldalkikep;
       mostvillanooldalresz:=mostvillanooldalresz+1;
       oldalresz[mostvillanooldalresz].kepe:=oldalbekep;
  end
  else
  begin
       oldalresz[mostvillanooldalresz].kepe:=oldalkikep;
       mostvillanooldalresz:=0;
       villanasidozito.enabled:=false;
  end;
end;

procedure TForm1.idobeallitas(Sender: TObject);
begin
  if masodperc-1>=0 then
     masodperc:=masodperc-1
  else
  begin
    if perc-1>=0 then
    begin
      perc:=perc-1;
      masodperc:=60;
    end
    else
    begin
      szunet:=true;
      idozito.enabled:=false;
      showmessage(kudarcidoszoveg[nyelv]);
      ujrakezdes:=true;
    end;
  end;
end;

procedure TForm1.cucccsinalo(Sender: TObject);
var cuccx,cuccy: word;
begin
  if round(random(5))=1 then
  begin
    repeat
          cuccx:=round(random(Form1.width));
          cuccy:=round(random(Form1.height));
    until (cuccx>sarokreszkep.width) and (cuccx<Form1.width-sarokreszkep.width*2) and (cuccy>sarokreszkep.height*2) and (cuccy<Form1.height-sarokreszkep.height*2);
    cucccsinalas(cuccx,cuccy);
  end;
end;

end.

