Einzelnen Beitrag anzeigen

KeksRebellion

Registriert seit: 16. Mai 2014
4 Beiträge
 
#1

Ping Pong Programm - Punktescore, Game Over und Start/Stopp

  Alt 23. Mai 2014, 16:16
Hallo,

Ich muss für meinen Info Lehrer ein ping Pong programm schreiben und bin relativ weit gekommen, hänge jetzt aber an 3 Punkten:
  • Punktescore Anzeige funktioniert nicht
  • Game Over Anzeige erscheint nicht wenn das Programm verloren hat
  • Das Gameplay läuft im Hintergrund ab ohne zu stoppen
Das hier ist mein Code von der Unit 1, also dem eigtl. Spiel.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Panel: TPanel;
    Background: TImage;
    SPlayer: TImage;
    Infopanel: TPanel;
    PMenu: TPanel;
    LScore: TLabel;
    SBall: TShape;
    PStartStop: TPanel;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure PMenuClick(Sender: TObject);
    procedure PStartStopClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

  PosX, PosY, X, Y, Punktescore: Integer;

implementation

uses Unit2, Unit4;

{$R *.DFM}



procedure TForm1.FormCreate(Sender: TObject);
begin
Punktescore:=0;

randomize;
PosX:=200;
PosY:=208;
X:=2;
Y:=3;

end;

procedure TForm1.Timer1Timer(Sender: TObject);
Var
Overlay: Trect;
begin
//Bewegung
          PosX:=PosX+X;
          PosY:=PosY+Y;
   //Seitenwände
     If PosX>Panel.width - SBall.width then
        X:=-X;
     If PosX< 0 then
        X:=-X;
   //Obere und Untere Wand
     If PosY>Panel.height - SBall.height then
        Y:=-Y;
     If PosY< 0 then
        Y:=-Y;

   SBall.left:=round(PosX);
   SBall.Top:=round(posY);

//Ball trifft Schläger
       If intersectrect (Overlay, SPlayer.BoundsRect, SBall.BoundsRect) then
       begin
          X:=-X-random(2);
          Y:=-Y-random(2);
       end;

       If SBall.Top=SPlayer.Top-SBall.Top then
       begin
         LScore.caption:=IntToStr((Punktescore)+1);
       end;

end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
     if key = VK_ESCAPE then
         halt;

       if key = VK_Left then
         SPlayer.left:= SPlayer.Left-13;

       if key = VK_Right then
         SPlayer.left:= SPlayer.left+13;
  


end;


procedure TForm1.PMenuClick(Sender: TObject);
begin
form1.close; form2.show
end;



procedure TForm1.PStartStopClick(Sender: TObject);
begin
Timer1.Enabled := not Timer1.Enabled;
end;

end.
Anbei hänge ich noch n Bild von der Oberfläche an.
unbenannt.png
  Mit Zitat antworten Zitat