AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Labyrinth

Ein Thema von Sandro · begonnen am 30. Mär 2008 · letzter Beitrag vom 30. Mär 2008
Antwort Antwort
Sandro
(Gast)

n/a Beiträge
 
#1

Labyrinth

  Alt 30. Mär 2008, 20:18
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:
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.
Bin für jede Hilfe dankbar.

Gruß
Alida
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Labyrinth

  Alt 30. Mär 2008, 20:20
Hey, herzlich Willkommen in der DP
Was genau läuft denn falsch?

Mfg
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
Sandro
(Gast)

n/a Beiträge
 
#3

Re: Labyrinth

  Alt 30. Mär 2008, 21:04
Da ist sowas wie eine Entlosschleife drine.
Sobald man dann die EXE öffnet kommen unendlich Fehlermeldungen.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Labyrinth

  Alt 30. Mär 2008, 21:05
.. und wie lautet die Fehlermeldung welche da hochpoppen?


[edit] tBall ist bei Dir eine Klasse, was ich dann vermisse
ist irgendwo ein Ball1:=TBall.create; [/edit]
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Sandro
(Gast)

n/a Beiträge
 
#5

Re: Labyrinth

  Alt 30. Mär 2008, 21:29
Meldung:
Zitat:
Zugriffsverletzung bei Adresse 004271D0 in Modul 'Project1.exe'. Lesen von Adresse 00000168.
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#6

Re: Labyrinth

  Alt 30. Mär 2008, 21:33
@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?
  Mit Zitat antworten Zitat
Sandro
(Gast)

n/a Beiträge
 
#7

Re: Labyrinth

  Alt 30. Mär 2008, 21:49
Leider hast du recht Nuclear-Ping.
Ich habe wirklich keine Ahnung von Delphi.
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.

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
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Labyrinth

  Alt 30. Mär 2008, 22:00
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;
Klaus
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:33 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