Hallo alle zusammen. Ich habe so'n Tischtennisspiel programmiert, wisst schon, mit 2 Schlägern links und rechts und 'nem Ball...
Damit dann auch mal jemand gewinnt, lasse ich überprüfen, ob der Ball weiter rechts bzw. links als die Schläger sind. Falls ja, läuft ein Countdown runter, der Ball wird zentriert, die
Spielvorbeivariable (bGameOver: boolean) wird auf False gesetzt.
Wenn der Ball dann aber ein 2. Mal hinter einen der Schläger kommt, dann funktioniert das Ganze plötzlich nicht mehr. Der Ball wandert dann im Sekundentakt ungefähr vorwärts während das Label mit dem Countdown angezeigt wird, der Timer dafür aber nicht mehr läuft.
Hier die beiden Überprüfungen, ob der Ball hinter dem Schläger ist:
Delphi-Quellcode:
if shBall.Left < shRacketL.Left then //Rückschlag von l. Wand
begin
shBall.Brush.Color:=clred;
timBall.Enabled:=false;
bGameOver:=true;
end;
//---------------------------------------
if shBall.Left > shRacketR.Left then //Rückschlag von r. Wand
begin
shBall.Brush.Color:=clred;
timBall.Enabled:=false;
bGameOver:=true;
end;
Die Prozedur, die auf Spielende überpüfen soll:
Delphi-Quellcode:
procedure TForm2.GameOver;
begin
if bGameOver = true then
begin
lblCountdown.Visible:=True;
timCountdown.Enabled:=True;
end;
end;
Dann noch der Timer der den Ball steuert:
Delphi-Quellcode:
procedure TForm2.timBallTimer(Sender: TObject);
begin
Wand; //Wandkontakt/-reaktion ermitteln
Racket; //Schlägerkontakt/-reaktion ermitteln
GameOver;//läuft das Spiel übherhaupt noch?
end;
... und der Countdown-Timer:
Delphi-Quellcode:
procedure TForm2.timCountdownTimer(Sender: TObject);
begin
scrbCountdown.Position:=scrbCountdown.Position + 1;
case scrbCountdown.Position of
0: lblCountdown.Caption:='5 ...';
1: lblCountdown.Caption:='4 ...';
2: lblCountdown.Caption:='3 ...';
3: lblCountdown.Caption:='2 ...';
4: lblCountdown.Caption:='1 ...';
5: begin
lblCountdown.Caption:='GO !';
shBall.Left:=panPlayGround.Width div 2;
shBall.Top:=panPlayGround.Width div 2;
end;
6: begin
lblCountdown.Visible:=False;
lblCountdown.Caption:='5 ...';
timBall.Enabled:=True;
timCountdown.Enabled:=False;
bGameOver:=false;
end;
end;
end;
Ich hoffe, ich konnte das halbwegs verständlich darlegen (bin noch neu
. Falls Fragen aufkommen, bitte stellen, ich versuch sie zu beantworten.
Danke schonmal im Vorraus, hans ditter.