Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Break-Game, Kugel auf Rechtecklanden lassen ... (https://www.delphipraxis.net/116308-break-game-kugel-auf-rechtecklanden-lassen.html)

KleinAmann 26. Jun 2008 16:43


Break-Game, Kugel auf Rechtecklanden lassen ...
 
Hey Leutz,

Ich habe früher viel C++ Programmiert bin aber vor einiger Zeit auf Delphi umgestiegen.

Nun bin ich dabei ein naja einfaches Game zu schreiben, mein Problem liegtnach
if (bar.Top = Kugel.Top)
then if

vermute ich Code.

Und zwar soll, wenn der Ball auf das Rechteck fliegt wieder zurück kehren.
Dummerweiße erkennt mein Programm nicht dass der Ball die gleiche .left wie mein
Balken(Rechteck) hat. Dass rechteck hat eine Width von 25 darum auch immer +1/-1
da er ja , egal auf welcher Fläche er landet es Merken soll.

Ich hoffe ihr habts kapiert ...

Hier der Code :

Hey Leutz,

Ich habe früher viel C++ Programmiert bin aber vor einiger Zeit auf Delphi umgestiegen.

Nun bin ich dabei ein naja einfaches Game zu schreiben, mein Problem liegtnach
if (bar.Top = Kugel.Top)
then if

vermute ich Code.

Und zwar soll, wenn der Ball auf das Rechteck fliegt wieder zurück kehren.
Dummerweiße erkennt mein Programm nicht dass der Ball die gleiche .left wie mein
Balken(Rechteck) hat. Dass rechteck hat eine Width von 25 darum auch immer +1/-1
da er ja , egal auf welcher Fläche er landet es Merken soll.

Ich hoffe ihr habts kapiert ...

Hier der Code :

Delphi-Quellcode:
var
  Form1: TForm1;
  counter : integer;
  xK : integer;
  yK: integer;
  i : integer;

implementation

{$R *.dfm}


procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
yy : string;
xx : string;
begin
yy := IntToStr(Y);
xx := IntToStr(X);
aY.Caption := yy;
aX.Caption := xx;

if Y > 350 then if Y < 426 then bar.Top := Y;
if X < 501 then bar.Left := X;                // Bar der Maus nachlaufen lassen!
end;



procedure TForm1.FormActivate(Sender: TObject);
begin
counter := 1;
xK := 300;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Kugel.Left := xK;
if (i = 1) then begin counter := counter +1;
                      yK := counter; end else
if (i = 2) then begin counter := counter -1;
                      yK := counter; end;

if (bar.Top = Kugel.Top)
  then if
   (bar.Left =
   (Kugel.Left) or (Kugel.Left +1) or (Kugel.Left -1) or
   (Kugel.Left +2) or (Kugel.Left -2) or (Kugel.Left +3) or (Kugel.Left -3) or
   (Kugel.Left +4) or (Kugel.Left -4) or (Kugel.Left +5) or (Kugel.Left -5) or
   (Kugel.Left +6) or (Kugel.Left -6) or (Kugel.Left +7) or (Kugel.Left -7) or
   (Kugel.Left +8) or (Kugel.Left -8) or (Kugel.Left +9) or (Kugel.Left -9) or
   (Kugel.Left +10) or (Kugel.Left -10) or (Kugel.Left +11) or (Kugel.Left -11) or
   (Kugel.Left +12) or (Kugel.Left -12) or (Kugel.Left +13) or (Kugel.Left -13) or
   (Kugel.Left +14) or (Kugel.Left -14) or (Kugel.Left +15) or (Kugel.Left -15) or
   (Kugel.Left +16) or (Kugel.Left -16) or (Kugel.Left +17) or (Kugel.Left -17) or
   (Kugel.Left +18) or (Kugel.Left -18) or (Kugel.Left +19) or (Kugel.Left -19) or
   (Kugel.Left +20) or (Kugel.Left -20) or (Kugel.Left +21) or (Kugel.Left -21) or
   (Kugel.Left +22) or (Kugel.Left -22) or (Kugel.Left +23) or (Kugel.Left -23) or
   (Kugel.Left +24) or (Kugel.Left -24) or (Kugel.Left +25) or (Kugel.Left -25))
    then begin
    i := 2; end;
if Kugel.Top < 410 then
begin
  Kugel.Top := Kugel.Top + yK;
end else begin
  yK := 160; xK := 372; Panel1.Visible := true;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
i := 1
end;

end.
Mfg KleinAmann

Die Muhkuh 26. Jun 2008 16:45

Re: Break
 
Hi,

mach mal bitte die [delphi][/delphi]-Tags um Deinen Code :)

KleinAmann 26. Jun 2008 16:51

Re: Break
 
hey sry ;(

DP-Maintenance 26. Jun 2008 16:52

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Multimedia" verschoben.
Delphi-Frage ;)

DeddyH 26. Jun 2008 16:53

Re: Break
 
Das geht so nicht:
Zitat:

Delphi-Quellcode:
(bar.Left =
   (Kugel.Left) or (Kugel.Left +1) or (Kugel.Left -1)...

Was Du auf diese Art und Weise machst, ist ein Binärvergleich.

Die Muhkuh 26. Jun 2008 16:55

Re: Break
 
Hi,

macht nichts. Kann jedem mal passieren, so schauts aber deutlich besser aus.

Zum Einen:

Delphi-Quellcode:
if (bar.Top = Kugel.Top)
wäre vielleicht ein

Delphi-Quellcode:
if (Kugel.Top >= Bar.Top)
besser, da es sonst wirklich genau gleich sein muss.

Zum anderen das lange If-Gewurschtel. Das kannst Du sicher mit

Delphi-Quellcode:
if ((Kugel.Left - 25 >= Bar.left) or (Kugel.Left + 25 <= Bar.Left))
o.Ä. ersetzen.

KleinAmann 26. Jun 2008 17:02

Re: Break
 
hey,

erstmal STAUN danke für die schnellen Antworten bin ich nicht gewohnt in anderen Fourms ;) DANKE

so ich hab mal

then if
((Kugel.Left - 25 >= Bar.left) or (Kugel.Left + 25 <= Bar.Left))

ausprobiert, leider macht er es immer noch nicht =(


* noch ne Frage bei mir Debugt der Compiler also Borland Delphi 2005 nicht mehr,
bin mal ausversehna auf : run -> run with out debugging gekommen wie mach
ich dies Rückgängig?
*

Naja vielen Dank für die Antworten bis jetzt ;)

Mfg KleinAmann

Die Muhkuh 26. Jun 2008 17:09

Re: Break
 
Einfach auf Run -> Run klicken oder alternativ auf F9 drücken.

Es wäre besser, wenn Du den Code zuerst einmal debuggst, Dir die Werte anschaust und guckst, warum er nicht in die Abfrage springt. Sonst raten wir hier nur rum.

Und mein Beispielcode muss nicht zwingend genau das sein, was es zum Laufen bringt. Es sollte nur als ein Beispiel dienen.

KleinAmann 26. Jun 2008 17:29

Re: Break
 
Hey,

Leider stimmt was komplett nicht, unzwar macht er es nciht einmla wenn die Top also die Höhe übereinstimmt.
Das hat eigentlich immer funktioniert..
Delphi-Quellcode:
if (bar.Top = Kugel.Top)
  then //if
  //((Kugel.Left - 25 >= Bar.left) or (Kugel.Left + 25 <= Bar.Left))
   // then
    begin
    i := 2; Panel1.Visible := true; Panel1.Caption := 'test'; end;


Delphi-Quellcode:
unit game;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    bar: TShape;
    aX: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    aY: TLabel;
    Kugel: TShape;
    Timer1: TTimer;
    Panel1: TPanel;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  counter : integer;
  xK : integer;
  yK: integer;
  i : integer;

implementation

{$R *.dfm}


procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
yy : string;
xx : string;
begin
yy := IntToStr(Y);
xx := IntToStr(X);
aY.Caption := yy;
aX.Caption := xx;

if Y > 350 then if Y < 426 then bar.Top := Y;
if X < 501 then bar.Left := X;                // Bar der Maus nachlaufen lassen!
end;



procedure TForm1.FormActivate(Sender: TObject);
begin
counter := 1;
xK := 300;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Kugel.Left := xK;
if (i = 1) then begin counter := counter +1;
                      yK := counter; end else
if (i = 2) then begin counter := counter -1;
                      yK := counter; end;

if (bar.Top = Kugel.Top)
  then if
  ((Kugel.Left - 25 >= Bar.left) or (Kugel.Left + 25 <= Bar.Left))
    then begin
    i := 2; Panel1.Visible := true; Panel1.Caption := 'test'; end;
if Kugel.Top < 410 then
begin
  Kugel.Top := Kugel.Top + yK;
end else begin
  yK := 160; xK := 372; Panel1.Visible := true;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
i := 1;
end;

end.

Die Muhkuh 26. Jun 2008 17:31

Re: Break
 
Was passiert, wenn Du auf größer gleich und nicht auf Gleichheit überprüft? (Oder auch auf <=, je nach, ob sich das Shape oben oder unten befindet)


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:37 Uhr.
Seite 1 von 4  1 23     Letzte »    

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