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.