Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ping-Pong (https://www.delphipraxis.net/22234-ping-pong.html)

whiteshark 14. Mai 2004 18:12


Ping-Pong
 
Hallo Leute,

ich habe ein Problem und zwar will ich ein PINK-PONK programmiern. Es funktioniert ja soweit mit an den Seiten abprallen und so, aber ich kann den balken nicht richtig bewegen bzw. garnicht. Beim Compilieren brinnt er aber keinen Fehler. Wer kann mir helfen?

CODE:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const radius=15;
      balkenbreite=70;
      balkenhoehe=15;
begin
loeschcolor:=form1.color;
loeschpen:=form1.color;
loeschbrush:=form1.color;
canvas.brush.color:=clblue;
canvas.pen.color:=clblue;
balkenmitte := form1.clientwidth div 2;
balkenbx:=4;
x:=width div 2;
y:=height div 2; // Position
bx:= 2;
by:=2;

canvas.pen.color:=clgreen;
canvas.Brush.color:=clyellow;
  rechteck.Left := 80;
  rechteck.Top := 70;
  rechteck.Right := 130;
  rechteck.Bottom := 120;
form1.Canvas.Rectangle(rechteck);   //Rechteck


repeat
stop:=false;

form1.canvas.Pen.Color:=clgreen;
form1.canvas.Brush.color:=clyellow;
canvas.Ellipse(x-radius,y-radius,x+radius,y+radius); //malen

sleep(5); //warten

form1.canvas.Pen.color:=loeschpen;
form1.canvas.Brush.color:=loeschbrush;
form1.Canvas.ellipse(x-radius,y-radius,x+radius,y+radius); //loeschen#



x:=x+bx;
y:=y+by; //rechnen

if (x<radius) or(x>form1.clientwidth-radius) then begin
                bx:=-bx;
                end;

if (y<radius) or(y>form1.ClientHeight-radius) then begin
                by:=-by;
                end;
application.ProcessMessages;
until stop=true;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if Key=vk_F1 then begin
                     rechteck.Left:=rechteck.left-5;
                     rechteck.bottom:=rechteck.bottom-5;
                     rechteck.Right:=rechteck.right-5;
                     rechteck.Top:=rechteck.top-5;
                     end;

 if Key=vk_F2 then begin
                      rechteck.Left:=rechteck.left+5;
                      rechteck.bottom:=rechteck.bottom+5;
                      rechteck.Right:=rechteck.right+5;
                      rechteck.Top:=rechteck.top+5;
                      end;

end;




end.
[edit=MrSpock]Doppelpost gelöscht. Code Tags gesetzt. Mfg, MrSpock[/edit]

Niko 14. Mai 2004 18:31

Re: Ping-Pong
 
So wird das nicht funktionieren. Du müsstes das Rechteck im Keydown schon neu zeichnen - und vorher das alte löschen - damit man die Änderung sieht.

fred.reichbier 14. Mai 2004 18:47

Re: Ping-Pong
 
ausserdem würde ich empfehlen, das mit einem TShape zu machen.
->Muss man nicht neu zeichnen, sondern nur Top verändern.
Und wegen F1 und F2:
Nimm einfach VK_UP (pfeil hoch) und VK_DOWN (pfeil runter).
Ansonsten, falls du Beispiel suchst, hab auch schon eins programmiert
und
kann dir evtl. Quellcode schicken.

Niko 14. Mai 2004 19:22

Re: Ping-Pong
 
Da ich um Code gebeten worden bin - so in etwa könnte dein KeyDown dann aussehen:
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  canvas.pen.color := form1.color
  canvas.Brush.color := form1.color;
  form1.Canvas.Rectangle(rechteck);   // Rechteck löschen
  if Key=vk_F1 then
  begin
    rechteck.Left:=rechteck.left-5;
    rechteck.bottom:=rechteck.bottom-5;
    rechteck.Right:=rechteck.right-5;
    rechteck.Top:=rechteck.top-5;
  end;

  if Key=vk_F2 then
  begin
    rechteck.Left:=rechteck.left+5;
    rechteck.bottom:=rechteck.bottom+5;
    rechteck.Right:=rechteck.right+5;
    rechteck.Top:=rechteck.top+5;
  end;

  canvas.pen.color:=clgreen;
  canvas.Brush.color:=clyellow;
  form1.Canvas.Rectangle(rechteck);   // Rechteck an neuer Position zeichnen

end;

StefanDP 14. Mai 2004 19:24

Re: Ping-Pong
 
Stichwort:

TForm.KeyPreview!

Nicodius 14. Mai 2004 21:41

Re: Ping-Pong
 
Naja ohne DelphiX kannst du sowieso nur eine Taste einlesen ;)

Jens Schumann 14. Mai 2004 23:02

Re: Ping-Pong
 
Zitat:

Zitat von Nicodius
Naja ohne DelphiX kannst du sowieso nur eine Taste einlesen ;)

Das ist nicht richtig !!! Ich verweise hier auf GeyKeyState und/oder GetAsyncKeyState

Nicodius 15. Mai 2004 05:47

Re: Ping-Pong
 
aso? ... naja aber das muss man dann ja die ganze Zeit abfragen ?! ist auch keine gute lösung

oder versteh ich das jetzt nicht ganz

Jens Schumann 15. Mai 2004 08:27

Re: Ping-Pong
 
Zitat:

Zitat von Nicodius
aso? ... naja aber das muss man dann ja die ganze Zeit abfragen ?! ist auch keine gute lösung

oder versteh ich das jetzt nicht ganz

DelphiX macht doch auch nichts anderes als in bestimmten Zeitabständen (Interval) alle Eingabemöglichkeiten (DXInput o. so heißt das - glaube ich) abzufragen.

whiteshark 15. Mai 2004 09:37

Re: Ping-Pong
 
Danke an alle, die mir helfen konnten


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz