Einzelnen Beitrag anzeigen

Stähff

Registriert seit: 2. Nov 2005
Ort: Chemnitz
6 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Access violation bei SetLength

  Alt 30. Nov 2005, 15:32
Das Ganze ist Teil eines Projekts zur Realisierung eines Tetris-Autopiloten und
deswegen etwas umfangreicher...

die Klasse:

Delphi-Quellcode:
type
  tAutoPilot = class(tComponent)
    // ...
  private
    FPossibs: array of tTarget; // Liste der möglichen Ziele
    // ...
    
    procedure AddPossib( const nNbr: ShortInt; const oTarget: tTarget ); // fügt der Liste ein Ziel hinzu
  end;

Deklarationen:

Delphi-Quellcode:
// Liste, die für jede Steinart speichert, ob etwas wahr/möglich oder falsch/nicht möglich ist
tShapes = array[0..6] of Boolean;

// Liste, die die vertikale Position des obersten Steins jeder Spalte speichert
tColumns = array[0..DISP_WIDTH - 1] of ShortInt;

// Datensatz, der alle relevanten Daten zum Relief einer Karte speichert
tRelief = record
  nY : tColumns; // oberster Stein der der jeweiligen Spalte
  fAverage, // durchschnittliche Spaltenhöhe*
  fDepth : Real; // Summe der Abweichungen von * aller Spalten
  nHeight, // Anzahl der (von oben gesehen) gefüllten Reihen mit gleicher freien Spalte
  nGap : ShortInt; // Position der "Tetris-Spalte"
  bShapes : tShapes; // welche Steinform findet auf Relief Platz (ohne Lücke zu erzeugen!)
  bTetris : Boolean; // Tetris möglich oder nicht (unabhängig vom aktuellen Stein)
end;

// Datensatz, der relevante Daten zur Positionierung eines Steins speichert
tBlockState = record
  nLeft, nTop, nRot: ShortInt; // Position und Rotationsgrad
end;

// Datensatz, der alle relevanten Daten eines möglichen Ziels speichert
tTarget = record
  nEmpty : ShortInt; // entstehende Lücken
  nEval : array[0..5] of ShortInt; // Bewertung
  oState : tBlockState; // einzunehmende Position und Rotation
  oRelief : tRelief; // zugehöriges Relief
end;

..."zur Not" könnte ich die Anzahl der Elemente auch seperat speichern,
was aber nicht unbedingt der (sowieso schon recht katastrophalen) Lesbarkeit
beträgt. Außerdem ist es natürlich immer besser derartige Fehler im eigenen
Programmier-Stil vermeiden zu können...
SteGra
"Probleme kann man niemals mit der gleichen Denkweise lösen durch die sie entstanden sind."Albert Einstein
  Mit Zitat antworten Zitat