Einzelnen Beitrag anzeigen

fake115

Registriert seit: 21. Mai 2014
3 Beiträge
 
#1

Mein Pong Problem

  Alt 21. Mai 2014, 16:58
Hallo ich habe das wohl simpleste nicht wirklich seiende Pong in Arbeit.
Es soll ganz einfach erstmal so sein, dass die Kugel von Links nach rechts
donnert. Das habe ich mit 2 Timern gemacht, welche sich an bzw. ausschalten
sobald die Kugel einen der Balken trifft. Jetzt ist das Problem, dass die
Kugel an dem einen Abprallt also auch der 2. Timer aktiviert wurde, jedoch
bei Kollision fliegt meine Kugel nicht zurück. Die Timer sind auf 10gestellt.

Delphi-Quellcode:
unit uPong;

{$mode objfpc}{$H+}

interface

uses
  Windows, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
  ExtCtrls, StdCtrls; // Windows vonnöten damit Tastenabfrage funktioniert (KeyPreview True ist wichtig)

type

  { TfrmPong }

  TfrmPong = class(TForm)
    Ball: TShape;
    btStart: TButton;
    Spieler1: TShape;
    Spieler2: TShape;
    tBall1: TTimer;
    tBall2: TTimer;
    procedure btStartClick(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure tBall1Timer(Sender: TObject);
    procedure tBall2Timer(Sender: TObject);

  private
    { private declarations }
  public
    { public declarations }
  end;

var
  frmPong: TfrmPong;

implementation

{$R *.lfm}

{ TfrmPong }

procedure TfrmPong.FormKeyDown(Sender: TObject; var Key: Word; // TASTENABFRAGEN
  Shift: TShiftState);
begin
     if key = vk_up then
        begin
          Spieler1.top:=Spieler1.top-7;
        end
     else
      begin
        if key = vk_down then
           begin
            Spieler1.top:=Spieler1.top+7;
           end // SPIELER 1
      else
       begin
         if key = ord('W') then
           begin
            Spieler2.top:=Spieler2.top-7;
           end
      else
          begin
           if key = ord('S') then
             begin
              Spieler2.top:=Spieler2.top+7;
             end
          end
       end // SPIELER 2
      end;
end;


v TIMER

procedure TfrmPong.tBall1Timer(Sender: TObject);
begin
  if Ball.Left=Spieler2.Left then
   begin
    tBall2.Enabled:=True;
    tBall1.Enabled:=False;
   end
  else
   begin
    Ball.Left:=Ball.Left+3;
   end;
end;

procedure TfrmPong.tBall2Timer(Sender: TObject);
begin
  if Ball.Left=Spieler1.Left then
   begin
    tBall2.Enabled:=False;
    tBall1.Enabled:=True;
   end
  else
   begin
    Ball.Left:=Ball.Left-3;
   end;
end;

^ TIMER


procedure TfrmPong.btStartClick(Sender: TObject);
begin
  btStart.Visible:=false;
  tBall1.Enabled:=true;
  btStart.Enabled:=false;
end;

end.

Geändert von fake115 (21. Mai 2014 um 17:22 Uhr)
  Mit Zitat antworten Zitat