AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Tischtennis Problem beim 2. Mal
Thema durchsuchen
Ansicht
Themen-Optionen

Tischtennis Problem beim 2. Mal

Ein Thema von hans ditter · begonnen am 12. Jul 2010 · letzter Beitrag vom 14. Jul 2010
 
hans ditter

Registriert seit: 25. Jun 2010
Ort: Niedersachsen
263 Beiträge
 
Turbo Delphi für Win32
 
#1

Tischtennis Problem beim 2. Mal

  Alt 12. Jul 2010, 22:22
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.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz