Autor Beitrag
IMM0rtalis
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 27.05.09 16:44 
ausblenden Delphi-Quelltext
1:
2:
3:
          { ### Maße jedes Feldes (Quadrat) ### }
          Spielaufbau.Feldbreite := 50;
          Spielaufbau.Feldluecke := 3;

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:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
procedure TSpielaufbau.LoadSpielfeld;
 var
 i : Integer;
 feld4, feld3_1, feld3_2 : Integer;  { ### Variablen für die Spielfeldform ### }
 ausrichtung : Byte;
 Felderanzahl_Seite1, Felderanzahl_Seite2, Felderanzahl_Seite3 : Integer;
 FelderanzahlGes : Integer;
 Seite : Char;
  Begin

    { #################### }
    { ### Definitionen ### }
    { #################### }


    { ### Felderfestlegung ### }
    Felderanzahl_Seite1 := 3;
    Felderanzahl_Seite2 := 3;
    Felderanzahl_Seite3 := 5;

    FelderanzahlGes := 4*(Felderanzahl_Seite1+Felderanzahl_Seite2+Felderanzahl_Seite3);

    { ### Zähler resetten ### }
    feld4 := 0;
    feld3_1 := 0;
    feld3_2 := 0;

    { ### Startseite ### }
    Seite := 'A';
                    {A -> Felderanzahl_Seite1}
                    {B -> Felderanzahl_Seite2}
                    {C -> Felderanzahl_Seite3}

    { ### Startrichtung ### }
    ausrichtung := 0;
                    {1 -> horizontal nach rechts}
                    {2 -> vertikal nach oben}
                    {3 -> horizontal nach rechts}
                    {4 -> vertikal nach unten}
                    {5 -> horizontal nach rechts}
                    {6 -> vertikal nach unten}
                    {7 -> horizontal nach links}
                    {8 -> vertikal nach unten}
                    {9 -> horizontal nach links}
                    {10 -> vertikal nach oben}
                    {11 -> horizontal nach links}
                    {12 -> vertikal nach oben}

    for i:=0 to (FelderanzahlGes-1) do
      Begin
        RuntimeForm.Show;
        { ######################## }
        { ### Felder erstellen ### }
        { ######################## }

        Spielfeld[i].Feld := TShape.Create(MainForm);
        Spielfeld[i].Feld.Parent := MainForm;
        Spielfeld[i].Feld.Shape := stRoundRect;
        Spielfeld[i].Feld.Brush.Color := clWhite;
        Spielfeld[i].Feld.Width := Feldbreite;
        Spielfeld[i].Feld.Height := Feldbreite;


        { ######################## }
        { ### Posititionierung ### }
        { ######################## }

        { ############################# }
        { ### 1. Position festlegen ### }
        { ############################# }
        //ShowMessage('feld3_1:'+IntToStr(feld3_1));
        if (Seite = 'A') then
          Begin
            if(feld3_1 >= Felderanzahl_Seite1) then feld3_1 := 0;
            inc(feld3_1);
            { ### Abbiegen ### }
            if ((ausrichtung <= 12) AND (feld3_1 = 1)) then inc(ausrichtung);
            if(feld3_1 = Felderanzahl_Seite1) then Seite := 'B';
            //ShowMessage(IntToStr(i)+'->'+IntToStr(ausrichtung));
          End

        else if (Seite = 'B') then
          Begin
            if(feld3_2 >= Felderanzahl_Seite2) then feld3_2 := 0;
            inc(feld3_2);
            { ### Abbiegen ### }
            if ((ausrichtung <= 12) AND (feld3_2 = 1)) then inc(ausrichtung);
            if(feld3_2 = Felderanzahl_Seite2) then Seite := 'C';
            //ShowMessage(IntToStr(i)+'->'+IntToStr(ausrichtung));
          End


        else if (Seite = 'C') then
          Begin
            if(feld4 >= Felderanzahl_Seite3) then feld4 := 0;
            inc(feld4);
            { ### Abbiegen ### }
            if ((ausrichtung <= 12) AND (feld4 = 1)) then inc(ausrichtung);
            if(feld4 = Felderanzahl_Seite3) then Seite := 'A';
            //ShowMessage(IntToStr(i)+'->'+IntToStr(ausrichtung));
          End
        else ShowMessage('Fehler bei der Positionierung der Felder(Schleife).');



        if (ausrichtung > 12) then ausrichtung := 1; { ### sicherheitshalber 'ausrichtung' zurücksetzen ### }

        { ########################### }
        { ### 2. genau ausrichten ### }
        { ########################### }


        { ### Ausrichten ### }
        case ausrichtung of
          1:      { ### -> horizontal nach rechts ### }
            Begin
              Spielfeld[i].Feld.Top := AbstandOben+(Felderanzahl_Seite2*(Feldluecke+Feldbreite));
              Spielfeld[i].Feld.Left := AbstandLinks+((feld3_1-1)*(Feldluecke+Feldbreite));
            End;
          2:      { ### -> vertikal nach oben ### }
            Begin
              Spielfeld[i].Feld.Top := AbstandOben+(Felderanzahl_Seite2*(Feldluecke+Feldbreite))-
((feld3_2-1)*(Feldluecke+Feldbreite));
              Spielfeld[i].Feld.Left := AbstandLinks+(Felderanzahl_Seite1*(Feldluecke+Feldbreite));
            End;
          3:      { ### -> horizontal nach rechts ### }
            Begin
              Spielfeld[i].Feld.Top := AbstandOben;
              Spielfeld[i].Feld.Left := AbstandLinks+(Felderanzahl_Seite1*(Feldluecke+Feldbreite))+
((feld4-1)*(Feldluecke+Feldbreite));
            End;
          4:      { ### -> vertikal nach unten ### }
            Begin
               Spielfeld[i].Feld.Top := AbstandOben+((feld3_1-1)*(Feldluecke+Feldbreite));
               Spielfeld[i].Feld.Left := AbstandLinks+((Felderanzahl_Seite1+Felderanzahl_Seite3)*(Feldluecke+Feldbreite));
            End;
          5:      { ### -> horizontal nach rechts ### }
            Begin
              Spielfeld[i].Feld.Top := AbstandOben+(Felderanzahl_Seite1*(Feldluecke+Feldbreite));
              Spielfeld[i].Feld.Left := AbstandLinks+((Felderanzahl_Seite1+Felderanzahl_Seite3)*(Feldluecke+Feldbreite))+
((feld3_2-1)*(Feldluecke+Feldbreite));
            End;
          6:      { ### -> vertikal nach unten ### }
            Begin
              Spielfeld[i].Feld.Top := AbstandOben+(Felderanzahl_Seite1*(Feldluecke+Feldbreite))+((feld4-1)*(Feldluecke+Feldbreite));
              Spielfeld[i].Feld.Left := AbstandLinks+((Felderanzahl_Seite1+Felderanzahl_Seite2+Felderanzahl_Seite3)*(Feldluecke+Feldbreite));
            End;
          7:      { ### -> horizontal nach links ### }
            Begin
              Spielfeld[i].Feld.Top := AbstandOben+((Felderanzahl_Seite1+Felderanzahl_Seite3)*(Feldluecke+Feldbreite));
              Spielfeld[i].Feld.Left := AbstandLinks+((Felderanzahl_Seite1+Felderanzahl_Seite2+
Felderanzahl_Seite3)*(Feldluecke+Feldbreite))-
((feld3_1-1)*(Feldluecke+Feldbreite));
            End;
          8:      { ### -> vertikal nach unten ### }
            Begin
              Spielfeld[i].Feld.Top := AbstandOben+((Felderanzahl_Seite1+Felderanzahl_Seite3)*(Feldluecke+Feldbreite))+
((feld3_2-1)*(Feldluecke+Feldbreite));
              Spielfeld[i].Feld.Left := AbstandLinks+((Felderanzahl_Seite2+Felderanzahl_Seite3)*(Feldluecke+Feldbreite));
            End;
          9:      { ### -> horizontal nach links ### }
            Begin
              Spielfeld[i].Feld.Top := AbstandOben+((Felderanzahl_Seite1+Felderanzahl_Seite2+
Felderanzahl_Seite3)*(Feldluecke+Feldbreite));
              Spielfeld[i].Feld.Left := AbstandLinks+((Felderanzahl_Seite2+Felderanzahl_Seite3)*(Feldluecke+Feldbreite))-
((feld4-1)*(Feldluecke+Feldbreite));
            End;
          10:     { ### -> vertikal nach oben ### }
            Begin
              Spielfeld[i].Feld.Top := AbstandOben+((Felderanzahl_Seite1+Felderanzahl_Seite2+Felderanzahl_Seite3)*(Feldluecke+Feldbreite))-
((feld3_1-1)*(Feldluecke+Feldbreite));
              Spielfeld[i].Feld.Left := AbstandLinks+Felderanzahl_Seite2*(Feldluecke+Feldbreite);
            End;
          11:     { ### -> horizontal nach links ### }
            Begin
              Spielfeld[i].Feld.Top := AbstandOben+((Felderanzahl_Seite2+Felderanzahl_Seite3)*(Feldluecke+Feldbreite));
              Spielfeld[i].Feld.Left := AbstandLinks+Felderanzahl_Seite2*(Feldluecke+Feldbreite)-((feld3_2-1)*(Feldluecke+Feldbreite));
            End;
          12:     { ### -> vertikal nach oben ### }
            Begin
   ------->  ShowMessage(IntToStr(Feldbreite));  <--------
              Spielfeld[i].Feld.Top := AbstandOben+((Felderanzahl_Seite2+Felderanzahl_Seite3)*(Feldluecke+Feldbreite))-
((feld4-1)*(Feldluecke+Feldbreite));
              Spielfeld[i].Feld.Left := AbstandLinks;
            End
          else
            ShowMessage('Fehler beim Ausrichten der Spielfelder.');
        end;

        RuntimeForm.Tabelle.Cells[0,i+1] := IntToStr(i);
        RuntimeForm.Tabelle.Cells[1,i+1] := IntToStr(ausrichtung);
        RuntimeForm.Tabelle.Cells[2,i+1] := IntToStr(feld3_1);
        RuntimeForm.Tabelle.Cells[3,i+1] := IntToStr(feld3_2);
        RuntimeForm.Tabelle.Cells[4,i+1] := IntToStr(feld4);
        RuntimeForm.Tabelle.Cells[5,i+1] := Seite;
        RuntimeForm.Tabelle.Cells[6,i+1] := IntToStr(Spielfeld[i].Feld.Top);
        RuntimeForm.Tabelle.Cells[7,i+1] := IntToStr(Spielfeld[i].Feld.Left);

        Spielfeld[i].Feld.Enabled := false;
        Spielfeld[i].Feld.Show;


      End;

  End;


Kann mir vielleicht irgendwer verraten, wieso in der CASE-Anweisung, wenn ausrichtung 12 ist, sich die Feldbreite auf einmal verändert?????

ShowMessage(IntToStr(Feldbreite));
bringt folgende Ausgaben:
50
50
9891712
9891712
9891712


wie kommt das Programm darauf?!? Ich sehe da keinen Fehler... seht ihr einen?

irgendwie ist das total strange^^

mfg
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mi 27.05.09 16:59 
Hallo,

wo hast du denn die anderen ShowMessages eingefügt? Bis wohin bleiben die 50 denn erhalten, und wo ändert es sich? Zeig mal die Deklaration von Feldbreite bzw. Spielaufbau. Und tritt der Fehler nur bei ausrichtung = 12 auf?

Anhand deines Quellcodes kann ich auch keinen Fehler feststellen, schließlich weist du Feldbreite nirgends einen Wert zu. Oder wird eine Prozedur oder Funktion aufgerufen, die den Wert verändert?
IMM0rtalis Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 27.05.09 17:42 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
  TSpielaufbau = class(TObject)
  test : TShape;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    Spielfeld : Array[0..39] of TFelderRecord;
    Figur : Array[0..11] of TSpielFigur;
    AbstandOben, AbstandLinks : Integer;
    Feldbreite : Integer;
    Feldluecke : Integer;
    FelderanzahlGes : Integer;
    procedure CreateFelder;
  end;

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:
procedure TMainForm.FormCreate(Sender: TObject);
  Begin
    { ################################## }
    { ### DARF NICHT ENTFERNT WERDEN ### }
    { ################################## }
    { ###} Spielaufbau := TSpielaufbau.Create;
    { ################################## }
    { ################################## }

    { ##################### }
    { ### Einstellungen ### }
    { ##################### }

          { ################### }
          { ### Spielaufbau ### }
          { ################### }

          { ### Positionierung des Spielfeldes ### }
          Spielaufbau.AbstandOben     := 15;
          Spielaufbau.AbstandLinks    := 145;
          { ### Maße jedes Feldes (Quadrat) ### }
          Spielaufbau.Feldbreite := 50;
          Spielaufbau.Feldluecke := 3;

    { ### Spielaufbau ### }
    Spielaufbau.CreateFelder;

    { ### Starteigenschaften ### }
    MainForm.Color := $d9f0ed;


  End;


Der Fehler tritt nur auf, wenn ich Felderanzahl_Seite3 auf 5 statt 4 setze... und erst zum schluss, wenn die ausrichtung 12 wird.. wenn ich die .exe aufrufe, stehen statt den komischern zahlen mit ner 9 vorne Zahlen mit ner 1 vorne^^ aber auch so komisch^^
Die bleiben alle ausrichtungen lang erhalten... sogar noch im ersten Teil von der 12. .... dann auf einmal diese komische Zahl^^

und woanders wird Feldbreite definitiv kein anderer Wert zugewiesen^^

das ist ja das komische^^


mfg
SvenAbeln
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 334
Erhaltene Danke: 3



BeitragVerfasst: Mi 27.05.09 19:23 
Du schreibst ausserhalb von deinem Array.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
Spielfeld : Array[0..39] of TFelderRecord;

FelderanzahlGes := 4*(Felderanzahl_Seite1+Felderanzahl_Seite2+Felderanzahl_Seite3);
                       4 * (3 + 3 + 5 )  = 44

[...]
    for i:=0 to (FelderanzahlGes-1) do        //  0 - 43
      Begin
        Spielfeld[i].Feld := TShape.Create(MainForm);    // nur für 0-39 gültig
IMM0rtalis Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 27.05.09 20:03 
Vielen vielen Dank^^

Damit habe ich überhaupt nicht gerechnet^^

danköö^^

habs jetzt in ein dynamisches Array umgewandelt^^

mfg
delphi10
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 447
Erhaltene Danke: 2

W2K, XP, Vista64, Win7 64
RAD-Studio 2010
BeitragVerfasst: Do 28.05.09 22:08 
[klugscheisser]
Deswegen sollte man mindestens einmal einen Lauf mit "Compiler/Laufzeitfehler/Bereichsüberprüfung" durchführen.
[/Klugscheisser]
cu delphi10

duckundwech

_________________
Salus populi suprema lex esto