AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein pong-ähnliches Ball-Spiel: Geschwindigkeit des Balles erhöhe
Thema durchsuchen
Ansicht
Themen-Optionen

pong-ähnliches Ball-Spiel: Geschwindigkeit des Balles erhöhe

Offene Frage von "Tanko14"
Ein Thema von Tanko14 · begonnen am 14. Mär 2009 · letzter Beitrag vom 14. Mär 2009
Thema geschlossen
Tanko14

Registriert seit: 14. Mär 2009
3 Beiträge
 
#1

pong-ähnliches Ball-Spiel: Geschwindigkeit des Balles erhöhe

  Alt 14. Mär 2009, 18:20
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.
Angehängte Dateien
Dateityp: rar ball2_153.rar (86,4 KB, 0x aufgerufen)
 
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: pong-ähnliches Ball-Spiel: Geschwindigkeit des Balles er

  Alt 14. Mär 2009, 18:30
Einmal reicht
http://www.delphipraxis.net/internal...t.php?t=154066
g e s c h l o s s e n
Markus Kinzler
 
Thema geschlossen


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz