Autor Beitrag
Pepp3r
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82



BeitragVerfasst: So 23.06.13 18:28 
Hallo Liebe Porno ehhhh Delphi-Freunde!
Gut aufgepasst! Extase-Production präsentiert, den neuen Knüller: „Der mit dem grünen Ball“!

Ja ihr habt richtig gelesen.
Mir wurde nämlich zugetragen, dass mein vorheriges Tutorial nicht den Erwartungen der meisten Delphianer zu Genüge tat, weshalb ich diese kleine Tutorialreihe starten will.
Hierbei werde ich jeden Schritt so detailliert wie ihr gerne haben würdet schildern und erkären.
Das Programm wird mit Sicherheit kein architektonisches Meisterwerk, aber seinen hehren Zweck wird es allemal erfüllen!
Zum Start erst mal eine kleine Geschichte wie es dazu kam:
Es war ein langer, zehrender Sonntag Abend. Meine Mitbewohner hatten das Haus schon lange verlassen, so dass ich einsam und alleine der gähnenden Ruhe ausgesetzt war.
Während ich so da saß und Löscher in die Luft zu starren versuchte, schoss mir ein Gedanke, scharf wie eine Rasierklinge, quer durch den Kopf: Wieso nicht mal einen kleinen Programmier-Speedrun hinlegen. Ein Pong-Spiel sollte es werden. Und mit der Geburt jener Idee begab ich mich umgehend an den heimischen Rechner um los zu legen.
Nach ca. einer Stunde stand das Grundgerüst, nach etwa 3 Stunden waren die gröbsten Verfeinerungsarbeiten abgeschlossen.
Die „fertige“ Version habe ich mal in den Anhang geschoben. Da könnt ihr sehen wo die Reise hin gehen soll.
Aber lasst uns nicht all zu lange um den heißen Brei herum reden, sondern einfach mal anfangen.

Erste Überlegung: Was brauchen wir eigentlich? Brainstorming ergibt:
Zitat:
einen Ball
einen Schläger
noch einen Schläger


Das sieht doch schon mal recht überschaubar aus.
Da wir nur ein sehr kleines Spielchen programmieren wollen, lohnt es sich nicht irgendeine OpenGL-Grafik-Nasa-Technologie oder sonst was zu verwenden. Wir können bei drei dar zu stellenden Objekten getrost auf die Delphi-VCL zurück greifen.
Übrigens: Ich verwende die Delphi-Version 7! Keine Ahnung wie das bei anderen Versionen alles so aussieht, ich habe bisher immer nur diese verwendet.

Wir wollen uns nun der Darstellung des Balles widmen:
Hierfür würde sich ein Tshape ganz gut eigenen.
Also Delphi öffnen, neues (leeres) Projekt anlegen.
Dem Ball spendieren wir eine neue Unit:
„File->New->Unit“
Abspeichern: „Uball“
Klasse erstellen: „TBall“
Weil der Ball ein Shape ist, könnten wir Tballjetzt von Tshapeableiten (erben). Hab ich aber aus irgendwelchen Gründen nicht gemacht.
Stattdessen hat Tball in unserem Beispiel ein Tshape:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
  TBall = class
    private
      fShape: TShape;
  end;


Somit ist Tshape eine Instanzvariable von Tball (wobei Tball selber die Instanz sein wird). Tshape ist privat: Nur Tball selbst kann auf das Tshape zugreifen. Möchten wir später „von außen“ auf fShape zugreifen, müssten wir eine PROPERTY schreiben. Werden wir später auch :P
Alle Instanzvariablen werden mit einem kleinen „f“ am Anfang gekennzeichnet. Dies dient der Übersicht, dem Compiler ist das vollkommen egal.
Was instanziiert werden will, sollte einen Konstruktor vorweisen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  TBall = class
    private
      fShape: TShape;
    public
      constructor Create(parent: TWinControl);
      destructor Destroy();
  end;


Folgende Implementierung:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
  constructor TBall.Create(parent: TWinControl);
  begin
    fShape := TShape.Create(parent);
    fShape.Parent := parent;
    fShape.Name := 'ball';
    fShape.Top := 0;
    fShape.Left := 0;
    fShape.Height := parent.ClientHeight div 20;
    fShape.Width :=  parent.ClientHeight div 20;
    fShape.Shape := stCircle;
    fShape.Brush.Color := clGreen;
    fShape.Show;
  end;


Erläuterung:

Wenn wir einen Ball erzeugen wollen, übergeben wir dem Konstruktor einen..öhh...eine...ein „Parent“. Der die das Parent repräsentiert später usere Spielfäche (das schwarze wo der Ball und die Schläger drauf sind).
Der Rest sollte einigermaßen selbst erklärend sein.
Instanziierung in der Form-Konstruktor könnte dann so aussehen:
ausblenden Delphi-Quelltext
1:
fBall := Tball.Create(self);					

Cool, jetzt können wir bereits einen Ball darstellen :)
Das solls dann auch erst mal gewesen sein.
Wollt ihr mehr? Dann lasst mir ein wenig Feedback da und ich bin ab jetzt euer Tut-Sklave!
Alles Liebe,
Jones :)
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von Pepp3r am Mo 24.06.13 18:31, insgesamt 3-mal bearbeitet
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mo 24.06.13 11:35 
Deine Bemühungen für die Tutorial-Sparte in allen Ehren, aber meinst du nicht, dass ein Tutorial aus etwas mehr bestehen sollte?

Ein paar Zeilen unkommentiert hingerotzter Quellcode und ein paar Screenshots von einem Open-Office-Dokument bestehend aus ein paar Screenshots von der Delphi-IDE erfüllen nicht unbedingt alle Qualitätskriterien für ein gutes Tutorial. :?

Und damit haben wir vom Inhalt noch gar nicht gesprochen.

_________________
We are, we were and will not be.
Pepp3r Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82



BeitragVerfasst: Mo 24.06.13 15:16 
Nö, finde ich nicht.
Muss man denn immer alles vorkauen? Was du da siehst ist eine kreative Art sich mit Problemen auseinander zu setzen und ein 0815 Fertigbaukasten.
Sollte als kleine Motivation dienen.
In einem Punkt muss ich dir Recht geben, ich hätte schon ein wenig mehr ausführen können. Mach ich später noch :)
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Mo 24.06.13 15:30 
user profile iconPepp3r hat folgendes geschrieben Zum zitierten Posting springen:
Was du da siehst ist eine kreative Art sich mit Problemen auseinander zu setzen

Das Gefühl hatte ich bei einer schnellen Durchsicht des Codes auch.
Pepp3r Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82



BeitragVerfasst: Mo 24.06.13 17:36 
Ich nehme an, das sollte kein Kompliment sein :D
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Mo 24.06.13 17:58 
Ich nehme an, da könntest Du recht haben :D Zumindest den Destruktor solltest Du jeweils überschreiben und das inherited nicht vergessen.
Blup
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 173
Erhaltene Danke: 43



BeitragVerfasst: Do 01.08.13 17:31 
Wenn keine Trennung der Spiellogik von der Darstellung vorgesehen ist, kann man die Spielelemente (Ball, Schläger) auch gleich von TShape oder TGraphicControl ableiten.
Dann braucht man sich auch nicht um die Freigabe zu kümmern.

Ein Tutorial sollte schon in sich geschlossen sein und auf einen bestimmten Lernerfolg zielen.
Auch wenn es später erweitert wird, die Veröffentlichung mit diesem Stand nützt niemandem.