Autor Beitrag
TiRoCkx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Fr 15.03.19 15: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
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 15.03.19 15:53 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: TiRoCkx
TiRoCkx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Fr 15.03.19 15: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
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 15.03.19 16:07 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: TiRoCkx
TiRoCkx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Fr 15.03.19 16: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
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 15.03.19 16:42 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: TiRoCkx
TiRoCkx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Fr 15.03.19 16: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
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 15.03.19 17:22 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: TiRoCkx
TiRoCkx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Fr 15.03.19 17: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.