Autor Beitrag
TiRoCkx
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 15.03.19 14:39 
Hey liebe Programmierfreunde,

ich habe ein Problem. Ich programmiere Mensch ärgere dich nicht.

Ich habe am Anfang Shapes mittels eines Array erst durch den Quellcode erzeugt und ihnen dort Positionen durch eine Datenbank zugewiesen.
Das funktioniert reibungslos.

Das Problem kommt dann, wenn ich die Figuren setzen möchte. Ich übergebe den nächsten Left- und Topwert mittels einer Funktion. Danach habe ich schon die Position der Shape mit showmessage abgefragt, welche mir den korrekten Wert der nächsten Position wiedergibt...

ABER die Figur bewegt sich auf dem Feld nicht.

Kann mir jemand auf die Sprünge helfen?
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2229
Erhaltene Danke: 415

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Fr 15.03.19 14:53 
Guten Tag TiRoCkx,

du möchtest die eine Fehlerursache erfahren.
Du entwickelst das Projekt in Delphi, welches auch immer, verwendest eine Datenbank, welche auch immer und hast einen Code kompiliert, den wir nicht kennen.
Wieviele Fehlerursachen könnte es, deiner Meinung nach, demnach haben?

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)

Für diesen Beitrag haben gedankt: TiRoCkx
TiRoCkx Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 15.03.19 14:58 
So erzeuge ich die Figuren

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
type
  TForm2 = class(TForm)
    Panel1: TPanel;
    Field: TImage;
  private
    Shapes: array of TShape;
  public
    Madn: TMadn;
  end;

var
  Form2: TForm2;
  count: byte;

implementation

uses UFigure;

{$R *.dfm}

procedure TForm2.CreateShapes(n: word; wc: TWinControl);
begin
  SetLength(Shapes, n);
  Field.Parent := Form2;
  while n > 0 do
  begin
    Shapes[n] := TShape.Create(Self);
    Shapes[n].Parent := wc;
    case n of
      1,2,3,4: Shapes[n].Brush.Color := rgb(255,0,0);
      5,6,7,8: Shapes[n].Brush.Color := RGB(255,216,0);
      9,10,11,12: Shapes[n].Brush.Color := RGB(0,148,255);
      13,14,15,16: Shapes[n].Brush.Color := RGB(58,196,0);
    end;
    Shapes[n].Shape := stcircle;
    Shapes[n].Height := 30;
    Shapes[n].Width := 30;
    Shapes[n].Left := UMadn.Start[n].X;
    Shapes[n].Top := UMadn.Start[n].Y;
    Shapes[n].Pen.Width := 3;
    Shapes[n].Visible := true;
    Shapes[n].Enabled := false;
    n := n-1;
  end;
end;


So setze ich sie dann ein, aber die Figuren auf dem Feld bewegen sich eben nicht.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm2.BtgoClick(Sender: TObject);
var a,next,i: byte;
begin
  a := 1 + (Madn.get_actplayer - 1)*4;
  next := 0;
  for i := 0 to 3 do
    if (Figure[a+i].currentposition = 0and (next = 0then next := a+i;
  showmessage(inttostr(next));
  Figure[next].currentposition := 1;
  Shapes[next].Left := Madn.get_nx(next);
  showmessage(inttostr(Shapes[next+1].Left));
  Shapes[next].Top := Madn.get_ny(next);
  Btgo.Enabled := false;
end;
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2229
Erhaltene Danke: 415

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Fr 15.03.19 15:07 
Die Variable "next" hat ständig den Wert 0.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)

Für diesen Beitrag haben gedankt: TiRoCkx
TiRoCkx Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 15.03.19 15:28 
nein das hat sie nicht. Ich hab das alles überprüft.

Die currentposition ist dann 0, wenn die Figur nicht auf dem Feld ist. Da es hier ums einsetzen am Anfang des Spiels geht, ist next Position auf jeden Fall dann 1, da ja noch alle Figuren im Haus sind.

Das ist nicht der Fehler.
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2229
Erhaltene Danke: 415

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Fr 15.03.19 15:42 
Was macht die Methode Madn.get_nx() bzw. Madn.get_ny() genau?
Wenn, dann liegt es daran, wenn die Werte für die Eigenschaften .Left und .Top immer gleich bleiben, sprich es bewegt sich nichts.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)

Für diesen Beitrag haben gedankt: TiRoCkx
TiRoCkx Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 15.03.19 15:59 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function TMadn.get_nx(n: byte): integer;
begin
  result := UMadn.play[Figure[n].currentposition].X;
end;

function TMadn.get_ny(n: byte): integer;
begin
  result := UMadn.play[Figure[n].currentposition].Y;
end;


Die beiden Funktionen geben einfach nur die X- und Y-werte der nächsten Position wider.
Aber eben auch die stimmen, da ich mir das alles als showmessage ausgeben lasse und sehe ja dass es eine andere Position widergibt, als die Figur auf dem Spielfeld hat.
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2229
Erhaltene Danke: 415

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Fr 15.03.19 16:22 
Mit Figur meinst du das Objekt Figure?
Mit den gegebenen Informationen lässt sich nicht nachvollziehen, welche tatsächlichen Auswirkungen Figure.currentposition auf das Geschehen hat, ebenso wenig, wie das Objekt Madn und seine Methoden, wie play() oder sonst was.
Du wirst den Debugger in der BtgoClick() Methode bemühen müssen und vergleichen.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)

Für diesen Beitrag haben gedankt: TiRoCkx
TiRoCkx Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 15.03.19 16:49 
Es hat sich tatsächlich erledigt....

Es war mehr als einfach... Die Parent-Eigenschaft war das Problem...

Ich hab unter dem Field noch ein Panel liegen und Parent war aber die Form selbst. Jetzt habe ich Parent auf das Panel gesetzt und es geht.

Danke dir dennoch für deine eifrige Hilfe Frühlingsrolle! :D :wink:

MfG, TiRoCkx.