Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Delphi-Tetris in OOP (https://www.delphipraxis.net/151216-delphi-tetris-oop.html)

PChelper 9. Mai 2010 14:59


Delphi-Tetris in OOP
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Leute!
Für ein Schulprojekt im Informatikunterricht soll ich mit einem Teampartner Tetris mit Delphi objektorientiert programmieren. Bisher hat alles wunderbar geklappt, jetzt kommen wir allerdings bei der Kollision zwischen zwei oder mehreren Steinen nicht weiter. Die nächsten Wochen fällt unser Informatikunterricht aus, deshalb kann ich unsere Lehrer nicht fragen und bitte euch um Hilfe.

Erstmal eine kleiner Überblick:
Wir haben das Ganze nach den Grundsätzen der OOP aufgebaut. Es gibt 3 Oberklassen (TfAnwendung, TSpielfeld und TSteine). Die Klasse TSteine hat 7 Unterklassen (für die sieben unterschiedlichen Steintypen): TStein1, TStein2, TStein3, TStein4, TStein5, TStein6 und TStein7.

Die Klasse TfAnwendung hat/besitzt die alle anderen Klassen. Die Klasse TSteine kennt dabei die Klasse TSpielfeld (um auf Anfragen zuzugreifen können, die den Spielfeldrand zurückgeben). Um das Ganze zu verdeutlichen habe ich hier mal eine vereinfachte Version des Klassendiagramms in UML hochgeladen:

Grafik s. Anhang

Bisher klappt wie gesagt alles wunderbar. Die Steine "fallen" von unten nach oben, "wandern" nicht aus dem Spielfeld, die nächsten Steine werden per Zufallsgenerator ausgewählt - alles super.

Doch die Steine kennen sich nicht gegenseitig und fallen so ineinander. Dazu müsste jede Klasse (TStein1-TStein7) jede andere Klasse (TStein1-TStein7) kennen. Allerdings funktionieren soweit ich weiß in Delphi keine bidirektionale Assoziationen (überkreuzende kennt-Beziehungen). Jedenfalls gibt mir Delphi immer Fehlermeldungen aufgrund der Überkreuzung aus.

Oder habe ich etwas übersehen? Wie kriege ich das Programm und die Kollision zwischen den Steinen zum Laufen? Oder muss ich die Klassen anders anordnen, damit es funktioniert?

MfG, PChelper

[edit=Matze]Grafik angehängt, damit sie dauerhaft verfügbar ist. MfG, Matze[/edit]

DeddyH 9. Mai 2010 15:16

Re: Delphi-Tetris in OOP
 
Das könnte man IMO so lösen, dass man dem Spielfeld ein "Raster" (2-dimensionales Array) spendiert. Ist ein Stein unten angekommen, markiert er die von ihm belegten Felder auch in diesem Raster als belegt (bzw. lässt das das Spielfeld erledigen). Der nächste Stein fragt nun im Fallen beim Spielfeld nach, ob die unter ihm liegenden Felder noch frei sind. Wenn nicht, kann er nicht weiter fallen, ist somit unten angekommen, und der nächste Stein geht auf die Reise. Konkrete Codeschnippsel kann ich gerade nicht dazu liefern, aber der Grundgedanke sollte klar sein.

jaenicke 9. Mai 2010 16:04

Re: Delphi-Tetris in OOP
 
Im ersten der beiden Crossposts wurde dazu auch schon etwas mehr geschrieben:
http://www.delphi-forum.de/viewtopic.php?t=99413
http://forum.delphi-treff.de/showthread.php?t=28879

DeddyH 9. Mai 2010 16:56

Re: Delphi-Tetris in OOP
 
Zitat:

Zitat von jaenicke
Im ersten der beiden Crossposts wurde dazu auch schon etwas mehr geschrieben

Mehr ja, aber auch nichts anderes als mein Vorschlag.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz