Tetris Klassendeklaration

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut

Tetris Klassendeklaration

Beitragvon jan1999 » 8. Mär 2018, 19:53 Tetris Klassendeklaration

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?
jan1999
 
Beiträge: 2
Registriert: 16. Jan 2018, 21:31

Beitragvon Mathias » 8. Mär 2018, 20:21 Re: Tetris Klassendeklaration

Meinst du sowas ?
Code: Alles auswählen
type
  TStein = array[0..3, 0..3] of Byte;
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4274
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon m.fuchs » 8. Mär 2018, 23:45 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.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
m.fuchs
 
Beiträge: 1963
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (L 1.8.4, FPC 3.0.4) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon Mathias » 9. Mär 2018, 18:23 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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4274
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

• Themenende •

Zurück zu Freepascal



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste

porpoises-institution
accuracy-worried