AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Break-Game, Kugel auf Rechtecklanden lassen ...
Thema durchsuchen
Ansicht
Themen-Optionen

Break-Game, Kugel auf Rechtecklanden lassen ...

Ein Thema von KleinAmann · begonnen am 26. Jun 2008 · letzter Beitrag vom 6. Jul 2008
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
KleinAmann

Registriert seit: 29. Apr 2008
Ort: Bad Waldsee
32 Beiträge
 
#1

Break-Game, Kugel auf Rechtecklanden lassen ...

  Alt 26. Jun 2008, 16:43
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
Dominik A.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Break

  Alt 26. Jun 2008, 16:45
Hi,

mach mal bitte die [delphi][/delphi]-Tags um Deinen Code
  Mit Zitat antworten Zitat
KleinAmann

Registriert seit: 29. Apr 2008
Ort: Bad Waldsee
32 Beiträge
 
#3

Re: Break

  Alt 26. Jun 2008, 16:51
hey sry ;(
Dominik A.
  Mit Zitat antworten Zitat
26. Jun 2008, 16:52
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Multimedia" verschoben.
Delphi-Frage
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Break

  Alt 26. Jun 2008, 16:53
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Break

  Alt 26. Jun 2008, 16:55
Hi,

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

Zum Einen:

if (bar.Top = Kugel.Top) wäre vielleicht ein

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

if ((Kugel.Left - 25 >= Bar.left) or (Kugel.Left + 25 <= Bar.Left)) o.Ä. ersetzen.
  Mit Zitat antworten Zitat
KleinAmann

Registriert seit: 29. Apr 2008
Ort: Bad Waldsee
32 Beiträge
 
#7

Re: Break

  Alt 26. Jun 2008, 17:02
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
Dominik A.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Break

  Alt 26. Jun 2008, 17:09
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.
  Mit Zitat antworten Zitat
KleinAmann

Registriert seit: 29. Apr 2008
Ort: Bad Waldsee
32 Beiträge
 
#9

Re: Break

  Alt 26. Jun 2008, 17:29
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.
Dominik A.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Break

  Alt 26. Jun 2008, 17:31
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)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 02:59 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