Grundlagen kann man sich aneignen. Ein Entwurf mit Objekten ist einfacher als mit Records und Pointern zu arbeiten. Auf jeden Fall sollte man das ganze Spiel erst einmal funktionstüchtig entwerfen, bevor man sich mit der Darstellung beschäftigt. Sonst bekommt man ganz schnell Probleme.
Die Spielklasse sollte z.B. mit Datenobjekten jede Spielsituation darstellen können (nicht zu verwechseln mit Bildschirmanzeige).
Jede Änderung der Spielsituation sollte über geeignete Methoden erfolgen.
Mal so ein kleiner Entwurf:
Delphi-Quellcode:
TStein = class
constructor Create(AZahl1, AZahl2: Integer);
private
FZahl1: Integer;
FZahl2: Integer;
public
property Zahl1: Integer read FZahl1;
property Zahl2: Integer read FZahl2;
end;
TSpieler = class
constructor Create(AName: string);
private
FName: string;
FSteine: TList; {TStein - alle Steine die der Spieler in der Hand hält}
public
property Name: string read FName;
property Steine: TList read FSteine;
end;
TSteinPos = class
constructor Create(AStein: TStein; APos: TRect);
private
FStein: TStein;
FPos: TRect;
public
property Stein: TStein read FStein;
property Pos: TRect read FPos;
end;
TDomino = class
constructor Create();
private
FSteine: TObjectList; {enthält TStein - alle Steine die im Spiel vorkommen}
FStapel: TList; {enthält TStein - alle Steine gemischt, die auf dem Stapel zum Ziehen liegen}
FSpieler: TObjectList; {enthält TSpieler - alle am Spiel beteiligten Spieler}
FReihe: TObjectList; {enthält TSteinPos - alle gesetzten Steine mit Pos}
FAmZug: TSpieler; {Spieler der aktuell am Zug ist}
public
property Reihe: TObjectList read FReihe;
property Spieler: TObjectList read FSpieler;
property AmZug: TSpieler read FAmZug;
procedure Spielstarten;
function Zug(AStein: TStein; APos: TRect): Boolean;
end;