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?
Tetris Klassendeklaration
-
- Beiträge: 6194
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Tetris Klassendeklaration
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
Mit Java und C/C++ sehe ich rot
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2640
- 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
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.
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
-
- Beiträge: 6194
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Tetris Klassendeklaration
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
Mit Java und C/C++ sehe ich rot