Einzelnen Beitrag anzeigen

TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#2

AW: Turm von Hanoi

  Alt 7. Mär 2024, 22:52
Hallo,

ich zeige dir, wie du Klassen grundsätzlich hinbekommst.
Danach ist es an dir, falls du weitere Hilfe brauchst,
deinen erarbeiteten Code zu zeigen.

Noch ein Tipp: mit dem goldenen Helm Icon kannst du einen
Code Block ins Forum einfügen.

Nehmen wir mal an, du hast eine Form Unit und willst, weil man
das sinnvollerweise so macht die eigentliche Spiellogik (Geschäftslogik)
in einer separaten Unit mit 1-N Klassen drin umsetzen.

Dann klickst du in der Projektverwaltung dein Projekt mit der rechten
Maustaste an und wähst "Neue hinzufügen">"Unit". Das erzeugt eine
leere Unit. Diese unter einem sinnvollen Namen abspeichern.
Du solltest dann sowas wie das haben:

Delphi-Quellcode:
unit HanoiLogik;

interface

implementation

end.
Alles was du in den Interface Abschnitt schreibst kann von anderen Units,
welche diese Unit einbinden (also z.B. dein Hauptformular) aufgerufen werden.
Die eigentliche Umsetzung ist dann zwischen Implementation und end.

Nun musst du eine Klasse definieren.
Deine Unit dürfte dann ca. so aussehen:


Delphi-Quellcode:
unit HanoiLogik;

interface

type
  THanoi = class(TObject)
  private
  public
  end;

implementation

end.
So, in diese Klasse baust du alle Felder und Methoden ein die du brauchst um
die Spiellogik umzusetzen. Was jemand an der Klasse aufrufen können soll,
gehört nach public.

Hier mal ein bisschen Testcode drin um dir den Aufruf aus dem Hauptformular zu zeigen:

Delphi-Quellcode:
unit HanoiLogik;

interface

type
  THanoi = class(TObject)
  private
    FCounter : Integer;
  public
    function GetNextCounterValue:Integer;
  end;

implementation

function THanoi.GetNextCounterValue:Integer;
begin
  inc(FCounter);
  Result := Counter;
end;

end.
So, nun wollen wir in der MainForm diese Klasse benutzen:

1. Die Unit HanoiLogik im Hauptformular einbinden.

2. Ein Feld von dieser Klasse definieren.

3. Ein OnCreate Event in der Form erzeugen (Form Designer!)
und dort eine Objektinstanz erzeugen, die in diesem Feld gespeichert wird.

4. Ein OnClose Event in der Form erzeugen und dort die Objektinstanz freigeben.

5. Ein Label auf der Form platzieren.

6. Einen Button und für diesen einen OnClick Handler erstellen. In diesem
GetNextCounterValue aufrufen und das Ergebnis auf dem Label anzeigen.

Dein Hauptformular dürfte dann ungefähr so aussehen:

Delphi-Quellcode:
Unit Main;

uses
  [...was auch immer Delphi da hin gepackt hat], HanoiLogik;

interface

type
  TMainForm = class(TForm)
    Label1: TLabel; // möglichst besser benennen
    Button1: TButton; // dito.

    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject);
    procedure ButtonClick(Sender : TObject);
  private
    FHanoiLogic:THanoi;
  public

  end;

implementation

procedure TMainForm.FormCreate(Sender: TObject);
begin
  FHanoiLogic := THanoi.Create; // erzeugt die Objektinstanz
end;

procedure TMainForm.FormClose(Sender: TObject);
begin
  FHanoiLogic.Free; // Aufräumen bei Programmende
end;

procedure TMainForm.ButtonClick(Sender : TObject);
begin
  Label1.Caption := IntToStr(FHanoiLogic.GetNextCounterValue);
end;
So, das sollte einen Start ermöglichen.

Noch eine Frage: Welche Delphi Version benutzt du?

Grüße
TurboMagic
  Mit Zitat antworten Zitat