Zum Einen: Erst Blockaussehen definieren, dann benutzen.
Zum Zweiten: Warum px[0..3] und py[0..3]? Damit gehst du ja nur eine Zeile und eine Spalte durch. Ich würde die Blöcke als
Delphi-Quellcode:
ObjType: Array[1..7] of Record
VMatrix: Array[0..3, 0..3] of Boolean;
cRGB: TcRGB;
end;
Definieren. Also Eine Matrix von 4x4, die das Aussehen der Blöcke definiert. Auch reichen hier Variablen vom Typ Boolean, da man ja nur 1 und 0 hat (1=> An dieser Stelle der Matrix ist ein Stein, 0 => Kein Stein)
Zum Zweiten: Du gehst im Moment nur jeden Wert durch und setzt ihn auf 1, korrekt wäre:
Delphi-Quellcode:
// Block-Daten einstellen
// -- Type 1 -- //
ObjType[1].cRGB := GetRGB(0, 1, 0); // Farbe
ObjType[1].VMAtrix[0,0] := 1; // Aussehen
ObjType[1].VMAtrix[0,1] := 1;
ObjType[1].VMAtrix[0,2] := 1;
ObjType[1].VMAtrix[0,3] := 1; // Einfach ein Balken der Länge 4
// -- Type 2 -- //
ObjType[2].cRGB := GetRGB(1, 1, 0);
ObjType[1].VMAtrix[0,0] := 1; // Aussehen
ObjType[1].VMAtrix[0,1] := 1;
ObjType[1].VMAtrix[0,2] := 1;
ObjType[1].VMAtrix[1,2] := 1; // Das typische Tetris L
For i := 1 to 4 do // Block aussehen angeben
FormBlocks
[Round(FallingObject.pX/BlockSizeX)]
[Round(FallingObject.pY/BlockSizeY)]
:= ObjType[FallingObject.aType].;
Auch könntest du in FallingObject die Koordinaten direkt als Blockanzahl abspeichern, so dass du bei deinen Berechnungen nicht immer
Round(FallingObject.pX/BlockSizeX)
sondern nur noch
[FallingObject.px]
hast.
Mfg