So, endlich Feierabend....
Patrick war so ehrlich und hat es ausgesprochen und da möchte ich mich anschließen. Ich meine auch, dass der Quelltext in die Tonne gehört und du das geplanter angehen musst. Bei dem Stil verlierst du ganz schnell den Überblick, und wie ich das sehe fehlt da noch erheblich viel im Quelltext.
Wenn du nicht glaubst, dass das z.B. mit Hilfe von Klassen und Objekten einfacher geht, oder dass das komplizierter wäre, schau dir meinen Beispiel-Code hier mal an. Das bildet einiges bei dir ab und ist
wesentlich übersichtlicher. Das mit den Labels verstehst du in ein paar Monaten selbst nicht mehr und spätestens wenn ein Programm größer und komplexer wird (okay, das trifft auf dieses Spiel vielleicht nicht zu) ist diese Unstruktur das Todesurteil.
Schau dir mal folgenden Code an, das stellt eine Tabelle mit Spielfeldern dar. Da fehlt zwar noch einiges, aber das ist ein gutes Beispiel, um den OO-Ansatz (im Minimalumfang) zu zeigen.
Im FormCreate() werden die Array mit Instanzen von TFeld befüllt. Jedes dieser Felder kann man dann im weiteren Verlauf des Spiels ganz einfach verwenden, wie es auch im BitBtn1Click() gezeigt wird.
Ich hoffe das hilft dir etwas weiter und zeigt, dass dieser Ansatz vernünftiger ist..
Meine Empfehlung ist es, es direkt richtig zu machen. Damit erspart man sich viel Verzeiflung und Enttäuschung.. das ist meine Erfahrung.
Delphi-Quellcode:
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids;
type
TFeld = class;
TForm1 = class(TForm)
DrawGrid1: TDrawGrid;
procedure FormCreate(Sender: TObject);
procedure DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
private
Fields: array[0..2, 0..2] of TFeld;
public
end;
TFeld = class
public
Text: string;
X: Integer;
Y: Integer;
constructor Create(X, Y: Integer);
procedure Draw(Canvas: TCanvas; Rect: TRect);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Fields[1][1].Text := '1';
DrawGrid1.Repaint;
end;
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
Fields[ACol][ARow].Draw(TDrawGrid(Sender).Canvas, Rect);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
x, y: Integer;
begin
for x := 0 to High(Fields) do
for y := 0 to High(Fields[x]) do
begin
Fields[x][y] := TFeld.Create(x, y);
Fields[x][y].Text := 'X';
end;
end;
{ TFeld }
constructor TFeld.Create(X, Y: Integer);
begin
Self.Text := '';
Self.X := X;
Self.Y := Y;
end;
procedure TFeld.Draw(Canvas: TCanvas; Rect: TRect);
begin
Canvas.TextOut(Rect.Left + 5, Rect.Top + 5, Text);
end;