![]() |
Labyrinth
Guten Abend.
Ich habe hier ein Delphi Programm das leider nicht genau das macht was es eigl. soll. Ziel ist es dass die Maus durch ein Labyrith zum Käse läuft.
Delphi-Quellcode:
Bin für jede Hilfe dankbar.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TSpielfeld = class(TForm) Timer1: TTimer; Bild: TImage; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); end; type tBall=class x,y,vx,vy,r: Single; farbe : tColor; procedure Init(fNeu: tColor; xNeu,yNeu,vxNeu,vyNeu,rNeu: Single); procedure ZeigeDich; procedure BewegeDich; end; var Spielfeld: TSpielfeld; ball1 : tBall; ball2 : tBall; bild : tImage; implementation {$R *.dfm} procedure tBall.Init(fNeu: tColor; xNeu,yNeu,vxNeu,vyNeu,rNeu: Single); begin farbe:= fNeu; r := rNeu; x := xNeu; y := yNeu; vx := vxNeu; vy := vyNeu; end; procedure tBall.ZeigeDich; begin with Spielfeld.Bild.Canvas do begin Brush.color := Farbe; ellipse(Round(x-r),Round(y-r),Round(x+r),Round(y+r)) end; end; procedure tBall.BewegeDich; begin x := x + vx; y := y + vy; with Spielfeld.Bild do begin if (x >Width-r-50) then begin x := Width-r-50; vx := 0 end; if x < r + 50 then begin x := r + 50; vx := 0 end; if (y >Height-r - 50) then begin y := Height-r - 50; vy := 0 end; if y < r + 120 then begin y := r + 120; vy := 0 end; end end; procedure TSpielfeld.FormCreate(Sender: TObject); var x,y,vx,vy: single; begin with Bild.Canvas do begin pen.width := 2; Brush.Color := clwhite; Rectangle(0,0,Bild.Width,Bild.Height); pen.width := 2; brush.Style := bsSolid; pen.Mode := pmNOTXOR; end; Ball1.init(clred,210, 30, 5,0,4); Ball1.ZeigeDich; repeat x:= Random(Spielfeld.Bild.width-50)+25; y:=Random(Spielfeld.Bild.Height-50)+25; until sqrt(sqr(x-Ball1.x)+sqr(y-Ball1.y))>=8; Ball2.Init(clyellow,260,270,0,0,4); Ball2.ZeigeDich; end; procedure nachlinks; begin if ball1.vx=0 then begin if Bild.Canvas.Pixels[Round(ball1.x),Round(ball1.y+ball1.r+1)]=clblack then begin if (ball1.vx=0)and (ball1.vy>0) then begin ball1.vx:=5; ball1.vy:=0; end else if (ball1.vx=0)and (ball1.vy<0) then begin ball1.vx:=-5; ball1.vy:=0; end else if (ball1.vx<0)and (ball1.vy=0) then begin ball1.vx:=0; ball1.vy:=5; end else if (ball1.vx>0)and (ball1.vy=0) then begin ball1.vx:=0; ball1.vy:=-5; end end end; if ball1.vy=0 then begin if Bild.Canvas.Pixels[Round(ball1.x+ball1.r+1),Round(ball1.y)]=clblack then begin if (ball1.vx=0)and (ball1.vy>0) then begin ball1.vx:=5; ball1.vy:=0; end else if (ball1.vx=0)and (ball1.vy<0) then begin ball1.vx:=-5; ball1.vy:=0; end else if (ball1.vx<0)and (ball1.vy=0) then begin ball1.vx:=0; ball1.vy:=5; end else if (ball1.vx>0)and (ball1.vy=0) then begin ball1.vx:=0; ball1.vy:=-5; end end end; end; procedure TSpielfeld.Timer1Timer(Sender: TObject); begin Ball1.ZeigeDich; Ball2.ZeigeDich; nachlinks; Ball1.BewegeDich; Ball2.BewegeDich; Ball1.ZeigeDich; Ball2.ZeigeDich; end; Initialization Randomize; Ball1 := tBall.Create; Ball2 := tBall.Create; Finalization Ball1.Destroy; Ball2.Destroy; end. Gruß Alida |
Re: Labyrinth
Hey, herzlich Willkommen in der DP :dp:
Was genau läuft denn falsch? Mfg |
Re: Labyrinth
Da ist sowas wie eine Entlosschleife drine.
Sobald man dann die EXE öffnet kommen unendlich Fehlermeldungen. |
Re: Labyrinth
.. und wie lautet die Fehlermeldung welche da hochpoppen?
[edit] tBall ist bei Dir eine Klasse, was ich dann vermisse ist irgendwo ein
Delphi-Quellcode:
[/edit]
Ball1:=TBall.create;
Grüße Klaus |
Re: Labyrinth
Meldung:
Zitat:
|
Re: Labyrinth
@Klaus:
Das steht im "Initialization" @Sandro: Was erwartest du bitte von uns? Dass hier irgendwer den Code fehlerfrei zurückpostest? Lass dir das doch grad mal auf der Zunge zergehen: Du schreibst hier deinen ersten Beitrag und stellst dazu deinen kompletten Code rein - nicht nur relevante Stellen und dazu noch mit dieser "Formatierung", ohne genau zu sagen, was genau das Problem ist, was du probiert hast um es zu lösen und wo es hängt. Bissl viel verlangt für den Anfang, oder? *kopfschüttel* Ausserdem sieht das Ganze auch so aus, als wüßtest du nicht wirklich, was der Code da macht, den du da produziert hast? :gruebel: |
Re: Labyrinth
Leider hast du recht Nuclear-Ping.
Ich habe wirklich keine Ahnung von Delphi. :cry: Der Code wurde von meinem Freud geschrieben und ich sollte hier nachfragen woran es liegen könnte. (Also das mit dem Fehler.) Er kann im Moment nicht ins Internet. Und ich verstehe ja noch wenigen. :wall: Bei dem Code handelt es sich um ein Labyrith. Dort soll eine "Maus" von einem Ende zum "Käse" am anderen Ende "laufen. Dabei sollte sie möglichst nicht den weißen Weg verlassen. Evenuell ist ja einer trotzdem so nett und hilft mir/uns. Geuß Alida |
Re: Labyrinth
Hallo,
die Procedure nachLinks gehört nicht zur TSpielfeld. Darum kracht es wenn Du in diese Procedure auf Bild.Canvas.Pixels zugreifst. Die Procedure kennt Bild nicht. Entweder Du packst die Procedure als Methode zu TSpielfeld oder Du schreibst anstelle von Bild.Canvas.Picxels -> Spielfeld.Bild.Canvas.Pixels. Grüße Klaus P.S. Einigerma0en richtig formatiert schaut die Procedure so aus:
Delphi-Quellcode:
procedure nachlinks;
begin if ball1.vx=0 then begin if Spielfeld.Bild.Canvas.Pixels[Round(ball1.x),Round(ball1.y+ball1.r+1)]=clblack then begin if (ball1.vx=0)and (ball1.vy>0) then begin ball1.vx:=5; ball1.vy:=0; end else if (ball1.vx=0)and (ball1.vy<0) then begin ball1.vx:=-5; ball1.vy:=0; end else if (ball1.vx<0)and (ball1.vy=0) then begin ball1.vx:=0; ball1.vy:=5; end else if (ball1.vx>0)and (ball1.vy=0) then begin ball1.vx:=0; ball1.vy:=-5; end end end; if ball1.vy=0 then begin if spielfeld.Bild.Canvas.Pixels[(ball1.x+ball1.r+1),(ball1.y)] = clblack then begin if (ball1.vx=0)and (ball1.vy>0) then begin ball1.vx:=5; ball1.vy:=0; end else if (ball1.vx=0)and (ball1.vy<0) then begin ball1.vx:=-5; ball1.vy:=0; end else if (ball1.vx<0)and (ball1.vy=0) then begin ball1.vx:=0; ball1.vy:=5; end else if (ball1.vx>0)and (ball1.vy=0) then begin ball1.vx:=0; ball1.vy:=-5; end end end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:38 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