![]() |
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] |
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.
|
Re: Delphi-Tetris in OOP
Im ersten der beiden Crossposts wurde dazu auch schon etwas mehr geschrieben:
![]() ![]() |
Re: Delphi-Tetris in OOP
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz