huhu,
mein Problem ist, das bei meinem ping pong spiel die schläger über das obere und untere spielfeld raus gehen. Kann mir da einer Helfen, das das nicht passiert?
Hier ein paar code schnipsel, vielleicht helfen die euch ja...
Delphi-Quellcode:
procedure TTennisForm.BallTimerTimer(Sender: TObject);
begin
Spieler1 := StrToInt(StandForm.Spieler1cap.Caption);
Spieler2 := StrToInt(StandForm.Spieler2cap.Caption);
//Unten abprallen
If Ball.Top + Ball.Height >= unten.Top then
BallVectorV := BallVectorV * (-1);
//Linke Wand aus
If Ball.Left <= Links.Left + Links.Width then
begin
BallTimer.Enabled := false;
schneller.Enabled := false;
StandForm.Spieler1cap.Caption := IntToStr(Spieler1 +1);
standform.showmodal;
end;
//Paddlelinks abprallen
If (Ball.Left <= Paddlelinks.Left+Paddlelinks.Width) and
((Ball.Top+Ball.Height) >= Paddlelinks.Top) and
(Ball.Top <= (Paddlelinks.Top+Paddlelinks.Height)) then
BallVectorH := BallVectorH * (-1);
//Oben abprallen
If Ball.Top <= Oben.Top + Oben.Height then
BallVectorV := BallVectorV * (-1);
//Rechte Wand aus
If Ball.Left + Ball.Width >= Rechts.Left then
begin
BallTimer.Enabled := false;
schneller.Enabled := false;
StandForm.Spieler2cap.Caption := IntToStr(Spieler2 +1);
standform.showmodal;
end;
//Paddlerechts abprallen
If ((Ball.Left+Ball.Width) >= Paddlerechts.Left) and
((Ball.Top+Ball.Height) >= Paddlerechts.Top) and
(Ball.Top <= (Paddlerechts.Top+Paddlerechts.Height)) then
BallVectorH := BallVectorH * (-1);
//Ball Bewegung
case BallVectorV of
1: Ball.Top := Ball.Top + Positiv;
-1: Ball.Top := Ball.Top - Negativ;
end;
case BallVectorH of
1: Ball.Left := Ball.Left - Negativ;
-1: Ball.Left := Ball.Left + Positiv;
end
end;
procedure TTennisForm.schlaegerrechtsTimer(Sender: TObject);
begin
paddlerechts.Top := paddlerechts.Top + hochrunterrechts;
end;
procedure TTennisForm.schlaegerlinksTimer(Sender: TObject);
begin
paddlelinks.Top := paddlelinks.Top + hochrunterlinks;
end;
procedure TTennisForm.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
//rechter schläger
If key = vk_down then
begin
hochrunterrechts := +15;
schlaegerrechts.Enabled := true;
end;
If key = vk_up then
begin
hochrunterrechts := -15;
schlaegerrechts.Enabled := true;
end;
//linkerschläger
If key = 83 then
begin
hochrunterlinks := +15;
schlaegerlinks.Enabled := true;
end;
If key = 87 then
begin
hochrunterlinks := -15;
schlaegerlinks.Enabled := true;
end;
end;
procedure TTennisForm.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If (key = vk_down) or (key = vk_up) then
schlaegerrechts.Enabled := false;
If (key = 87) or (key = 83) then
schlaegerlinks.Enabled := false;
end;
ich habe es schon ausprobiert mit if paddlerechts.top >= 17 then usw das bringt aber wahrscheinlich nichts in der Keydown procedure... Bin über jede Hilfe Dankbar