ich versuche gerade ein stinknormales PingPong-Spiel zu programmieren. Dabei scheitere ich schon beim Grundlegendsten: den Schlägern.
Denn die Spieler müssen diese ja logischerweise gleichzeitig bewegen können. Und da liegt schon das Problem:
Es bewegt sich immer nur ein Schläger.
Zuerst habe ich es so probiert:
Code: Alles auswählen
procedure Form1.FormKeyDown(***der ganze normale Kram***);
begin
case Key of
$25: ShapeLeft.Top:=ShapeLeft.Top-10;
$27: ShapeLeft.Top:=ShapeLeft.Top+10;
$26: ShapeRight.Top:=ShapeRight.Top-10;
$28: ShapeRight.Top:=ShapeRight.Top+10;
end;
end;
Dann hab ichs mit repeat until Schleifen probiert:
Code: Alles auswählen
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState
);
begin
if pause=false then
begin
case Key of
$25: if (ShapeLeft.Top>ShapeGround.Top) and (LeftStopvar=true) then LeftUp(self);
$27: if (ShapeLeft.Top<(ShapeGround.Top+ShapeGround.Height-ShapeLeft.Height)) and (LeftStopvar=true) then LeftDown(self);
$26: if (ShapeRight.Top>ShapeGround.Top) and (RightStopvar=true) then RightUp(self);
$28: if (ShapeRight.Top<(ShapeGround.Top+ShapeGround.Height-ShapeRight.Height)) and (RightStopvar=true) then RightDown(self);
end;
end;
end;
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
case Key of
$25, $27: LeftStopvar:=true;
$26, $28: RightStopvar:=true;
end;
end;
procedure TForm1.LeftUp(Sender: TObject);
var n:byte;
begin
n:=1;
repeat
if n=1 then
begin
ShapeLeft.Top:=ShapeLeft.Top-10;
Application.ProcessMessages;
Sleep(75);
end
else
begin
Sleep(30);
ShapeLeft.Top:=ShapeLeft.Top-10;
end;
LeftStopvar:=false;
Application.ProcessMessages;
n:=n+1;
until (LeftStopvar=true) or (ShapeLeft.Top=ShapeGround.Top);
end;
procedure TForm1.LeftDown(Sender: TObject);
var n:byte;
begin
n:=1;
repeat
if n=1 then
begin
ShapeLeft.Top:=ShapeLeft.Top+10;
Application.ProcessMessages;
Sleep(75);
end
else
begin
Sleep(30);
ShapeLeft.Top:=ShapeLeft.Top+10;
end;
LeftStopvar:=false;
Application.ProcessMessages;
n:=n+1;
until (LeftStopvar=true) or (ShapeLeft.Top=(ShapeGround.Top+ShapeGround.Height-ShapeLeft.Height));
end;
procedure TForm1.RightUp(Sender: TObject);
var n:byte;
begin
n:=1;
repeat
if n=1 then
begin
ShapeRight.Top:=ShapeRight.Top-10;
Application.ProcessMessages;
Sleep(75);
end
else
begin
Sleep(30);
ShapeRight.Top:=ShapeRight.Top-10;
end;
RightStopvar:=false;
Application.ProcessMessages;
n:=n+1;
until (RightStopvar=true) or (ShapeRight.Top=ShapeGround.Top);
end;
procedure TForm1.RightDown(Sender: TObject);
var n:byte;
begin
n:=1;
repeat
if n=1 then
begin
ShapeRight.Top:=ShapeRight.Top+10;
Application.ProcessMessages;
Sleep(75);
end
else
begin
Sleep(30);
ShapeRight.Top:=ShapeRight.Top+10;
end;
RightStopvar:=false;
Application.ProcessMessages;
n:=n+1;
until (RightStopvar=true) or (ShapeRight.Top=(ShapeGround.Top+ShapeGround.Height-ShapeRight.Height));
end;
Kann mir da jemand weiter helfen, so dass sich beide Schläger unabhängig voneinander bewegen können?
Dankschöööööön,
ConcAPPtLab