Einzelnen Beitrag anzeigen

EinTor

Registriert seit: 18. Apr 2023
2 Beiträge
 
#1

Obwohl alles funktionieren sollte, nimmt der Code meine Variablen nicht auf

  Alt 18. Apr 2023, 22:41
Guten Abend,

dieses Mals ist auch eine Beschreibung dabei. Zur Zeit Arbeit ich an einem Projekt, bei welchem ich ein Dreieck, welches ich Karol nenne, durch ein Gitternetz mit Hilfe von Knöpfen bewegen möchte. Die Welt aufzubauen war bis jetzt kein Problem. Doch nun möchte ich, dass Karol beim Starten des Programms sofort erscheint. Bei meinem Code könnte ich mansouth(1,1) verwenden. Allerdings wollte ich auch mal testen, dass mit den xpos und ypos Variablen zu machen, welche für Karol bestimmt sind. Sowas würde meiner Meinung nach weitere Schritte um einiges erleichtern. Doch dieser wird hier nicht gezeichnet.

Ich habe mehrfach mit einem Panel getestet ob, die xpos und ypos Zahlen im Code irgendwo "stecken" bleiben. Doch dabei war kein Problem, das bedeutet, dass die Koordinaten wo Karol steht funktionieren. Beim "zeichnen" von Karol ist ebenfalls kein Problem, weil ich ja mansouth(1,2) ohne weitere Probleme benutzen kann. Nun weiß ich nicht wie ich weiter testen kann, wo das Problem ist, bzw. wie ich dieses beheben kann.

Vielen dank schonmal im Voraus



unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
trichtung = (south, north, west, east);
type
tRobotor = record
xpos: integer;
ypos: integer;
richtung: tRichtung;
end;

type
TForm1 = class(TForm)
Bintitialisieren: TButton;
Izeichnen: TImage;
p1: TPanel;
Panel1: TPanel;

procedure FormCreate(Sender: TObject);

procedure mansouth(x, y: integer);
procedure mannorth(x, y: integer);
procedure maneast(x, y: integer);
procedure manwest(x, y: integer);
procedure hintergrund;
procedure robotorrichtung;

procedure BintitialisierenClick(Sender: TObject);
procedure brechtsdrehClick(Sender: TObject);




private
robotor: tRobotor;
{ Private-Deklarationen }
public

{ Public-Deklarationen }

end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin //Gitternetz und Robot beim start zeichnen
robotor.xpos := 1;
robotor.ypos := 1;
robotor.richtung := south;
hintergrund;
robotorrichtung; //Hiermit sollte der Karol gezeichnet werden, aber es passiert nicht? Ich verstehe aber nicht wieso, denn das Gitternetz wird hier gezeichnet. Zusätzlich habe ich getestet,
//ob die xpos und ypos Variabeln überall hin mitgenommen werden. Somit müsste alles funktionieren. Doch beim Testen, wird hier kein Dreickeck gezeichnet (Die man befehle
//funktionieren auch, wenn ich zb mansouth(1,2) teste. Sieht jemand meinen Logik-Fehler?
end;

procedure TForm1.mansouth(x, y: integer); //Karol guckt nach unten
begin
with Izeichnen.Canvas do
begin
Pen.Color := clBlack;
Brush.Color := clBlack;
Brush.Style := bsSolid;
MoveTo((x-1)*40, (y-1)*40);
LineTo(x*40, (y-1)*40);
LineTo(x*40 - 20, y*40);
LineTo((x-1)*40, (y-1)*40);
FloodFill(x*40 - 20, y*40 - 20, clBlack, fsBorder);
end;
end;

procedure TForm1.mannorth(x, y: integer); //Karol guckt nach oben
begin
with Izeichnen.Canvas do
begin
Pen.Color := clBlack;
Brush.Color := clBlack;
Brush.Style := bsSolid;
MoveTo(x*40 - 20, (y-1)*40);
LineTo(x*40, y*40);
LineTo((x-1)*40, y*40);
LineTo(x*40 - 20, (y-1)*40);
FloodFill(x*40 - 20, y*40 - 20, clBlack, fsBorder);
end;
end;

procedure TForm1.maneast(x, y: integer); //Karol guckt nach rechts
begin
with Izeichnen.Canvas do
begin
Pen.Color := clBlack;
Brush.Color := clBlack;
Brush.Style := bsSolid;
MoveTo((x-1)*40, (y-1)*40);
LineTo(x*40, y*40 - 20);
LineTo((x-1)*40, y*40);
LineTo((x-1)*40, (y-1)*40);
FloodFill(x*40 - 20, y*40 - 20, clBlack, fsBorder);
end;
end;

procedure TForm1.manwest(x, y: integer); //Karol guckt nach links
begin
with Izeichnen.Canvas do
begin
Pen.Color := clBlack;
Brush.Color := clBlack;
Brush.Style := bsSolid;
MoveTo((x-1)*40, y*40 - 20);
LineTo(x*40, (y-1)*40);
LineTo(x*40, y*40);
LineTo((x-1)*40, y*40 - 20);
FloodFill(x*40 - 20, y*40 - 20, clBlack, fsBorder);
end;
end;

procedure TForm1.hintergrund; //Gitternetz wird gezeichnet
var
i,j: integer;
begin
with Izeichnen.Canvas do
begin
for i := 0 to 9 do begin
for j := 0 to 9 do begin
Pen.Color := clBlue;
Brush.Color := clwhite;
Rectangle(i*40, j*40, (i+1)*40, (j+1)*40);
end;
end;
end;
end;

procedure TForm1.robotorrichtung; //KArol wird gezeichnet, funktioniert nicht????
begin
with robotor do
case richtung of
east: maneast(xpos*40, ypos*40);
south: mansouth(xpos*40, ypos*40);
west: manwest(xpos*40, ypos*40);
north: mannorth(xpos*40, ypos*40);
end;
end;

procedure TForm1.BintitialisierenClick(Sender: TObject); //basically same wie im FormCreat, was ist das Porblem???
begin
hintergrund;
robotor.xpos := 1;
robotor.ypos := 1;
robotor.richtung := south;
robotorrichtung;
end;
end.

Geändert von EinTor (18. Apr 2023 um 22:56 Uhr) Grund: Ich habe nicht verstanden wie man Beiträge absendet und habe auf jegliche Höfflichkeits Formen verzichtet - jertzt verbessert
  Mit Zitat antworten Zitat