Tetris Klassendeklaration

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
jan1999
Beiträge: 2
Registriert: Di 16. Jan 2018, 21:31

Tetris Klassendeklaration

Beitrag von jan1999 »

Hallo an alle in diesem Forum,
Ich habe mit paar Klassenkameraden momentan ein Projekt in Informatik am laufen. Unser Ziel ist es das Spiel Tetris zu programmieren. Dabei hängt es bei uns gerade bei der Deklaration der Tetrissteine in einem Array für die zukünftige Löschprozedur usw. Wir haben uns gedacht, jeden Stein an sich in einem Array(4×4) in einem Spielfeldarray zu setzen. Dabei hängt es bei uns die Klassen richtig zu definieren und die Arrays richtig zu bestimmen.
Habt ihr einen Tipp oder einen Ansatzpunkt?

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Tetris Klassendeklaration

Beitrag von Mathias »

Meinst du sowas ?

Code: Alles auswählen

type
  TStein = array[0..3, 0..3] of Byte;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Tetris Klassendeklaration

Beitrag von m.fuchs »

Gutes Klassendesign ist gar nicht so einfach und wenn man drei Entwickler befragt, bekommt man vermutlich fünf verschiedene Antworten.
Mal ein paar Ansätze meinerseits:

Warum wollt ihr den einzelnen Steinen ein 4x4-Array geben? Das wäre ja eigentlich nur sinnvoll wenn es dynamisch viele, verschiedene Steinarten gäbe. Da sich aber die Anzahl auf sieben verschiedene Typen beschränkt, hätte ihr viele doppelte Datenhaltung. Befinden sich drei L-Steine aufrecht auf dem Spielfeld, dann läge dreimal die gleichen Arraydaten im Speicher. Ok, das ist nicht so viel und durch die Rotationsmöglichkeiten kommt man auch auf neunzehn verschiedene (Sub-)Typen, aber gefällt mir nicht so ganz. Stattdessen würde ich an dieser Stelle lieber Vererbung einsetzen. Eine Basisklasse die Position und Steinausrichtung enthält und abgeleitete Klassen, die eine Methode erhalten um sich selber auf das Spielfeld zu zeichnen und von dort wieder zu löschen. Und Steuerungsmethode wären auch noch sinnvoll.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Tetris Klassendeklaration

Beitrag von Mathias »

Warum wollt ihr den einzelnen Steinen ein 4x4-Array geben?

Weil man so einfach eine Kollision-Abfrage in einer for-to-Schleife machen kann.

Code: Alles auswählen

type
  TStein = array[0..3, 0..3] of byte;
var
  Stein: TStein = (
    (0, 0, 0, 0),
    (0, 0, 4, 0),
    (0, 0, 4, 0),
    (0, 4, 4, 0));


Ich hatte mal vor vielen Jahren ein Tetris mit Delphi entwickelt. Nicht erschrecken, an den Dateinamen in Gross-Buchstaben, dies ist eine Altlast von DOS/Win31.
http://mathias1000.bplaced.net/test/TETRIS-1.tar.gz
Der Code ist nicht gedacht zum kopieren, es geht mehr um die Deklaration der Steine. Die Steine werden erst zu Laufzeit gedreht. Somit eignet sich die 4x4-Matrix am besten.
Aber immerhin habe ich es unter Lazarus mit viel Mühe zum laufen gekriegt. Die meisten wissen, das Linux zwischen gross und Kleinschreibung unterscheidet.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten