![]() |
pong-ähnliches Ball-Spiel: Geschwindigkeit des Balles erhöhe
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo liebe Delphi-Praxis Community,
ich habe seit einem Semester Informatik und mir gefällt dieses Fach auch sehr, doch nun ist es geschehen: Ich kann 2 Probleme nicht lösen ! Die SuFu konnte mir meine Fragen auch leider nicht beantworten. Zum Programm: Ein Ball(shape) bewegt sich refklektierend in einem Fenster, unten befindet sich ein Torwart(panel), der den Ball auch reflektieren soll, falls der Ball an ihm vorbei geht, ist das Spiel beendet. Nebenbei wird gezählt, wie of der Ball vom Torwart reflektiert wird. Zu den Problemen: 1.)Die Geschwindigkeit soll sich zum Anstieg der Anzahl der Reflektion erhöhen. 2.)Der Torwart soll nicht die Seiten des Fensters überschreiten. Ich habe es schon häufiger versucht, doch nicht hingekriegt. Darum bitte ich um eure Hilfe Wink. Vielen Dank im Voraus. Hier der Delphi-Code (Version 3):
Delphi-Quellcode:
unit ball1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; Shape1: TShape; Panel1: TPanel; Button1: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Shape1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; vx,vy,anzahl:integer; //Deklarierung der Variablen implementation {$R *.DFM} procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin //panel1=Torwart panel1.left:=x-(panel1.width div 2); //Position des Mauszeiger im Formblatt->Mitte des Torwarts end; procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin panel1.left:=shape1.left+x-(panel1.width div 2); //Position des Mauszeiger im Ball->Mitte des Torwarts end; procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin panel1.left:=panel1.left+x-(panel1.width div 2); //Position des Mauszeiger im Torwart->Mitte des Torwarts end; procedure TForm1.FormCreate(Sender: TObject); begin vx:=5; // Geschwindigkeit des Balles vy:=5; timer1.enabled:=true; anzahl:=0; end; procedure TForm1.Timer1Timer(Sender: TObject); begin shape1.left:=shape1.left+vx; // Bewegung des Balles (shape1=ball) shape1.top:=shape1.top+vy; if (shape1.left<=0) or (shape1.left>=(form1.clientwidth-shape1.width)) then vx:=-vx; //Reflektierung des Balles an der X-Achse if (shape1.top<=0) or (shape1.top>=(form1.clientheight-shape1.height)) then vy:=-vy; //Reflektierung des Balles an der Y-Achse if (shape1.top + shape1.height >= panel1.top) //Ball auf der Höhe des Torwarts and(panel1.left <= shape1.left + shape1.width div 2) //linke Torwartseite <= Mitte des Balles and(panel1.left + panel1.width >= shape1.left + shape1.width div 2) then //rechte Torwartseite >= Mitte des Balles begin //Ball muss den Torwart berühren inc(anzahl); //Erhöhung der Anzahl der Reflektionen um 1 vy:=-vy; //Reflektion des Balles label3.caption:=inttostr(anzahl)+'x reflektiert';//Ausgabe der Anzahl an Reflektionen end; if shape1.top > panel1.top then //Falls der Ball unter dem Torwart ist begin button1.enabled:=true; //Neustart möglich button1.visible:=true; label2.visible:=true; //Game Over timer1.enabled:=false; //Ballbewegung stoppen end; end; procedure TForm1.Button1Click(Sender: TObject); begin timer1.enabled:=true; //Neustart shape1.top:=0; //Ball startet oben shape1.left:=form1.width div 2 - shape1.width div 2; //Ball startet in der Mitte panel1.left:=form1.width div 2 - panel1.width div 2; //Torwart in der Mitte button1.visible:=false; //Unsichbar machen label2.visible:=false; label3.caption:='Anzahl der Reflektionen'; anzahl:=0; //Zurücksetzung der Anzahl auf 0 vx:=5; // Anfangsgeschwindigkeit vy:=5; end; end. |
Re: pong-ähnliches Ball-Spiel: Geschwindigkeit des Balles er
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:21 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