Einzelnen Beitrag anzeigen

Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#10

Re: Hilfe meine Dame-Spiel geht nicht :(

  Alt 15. Jun 2009, 18:40
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;
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat