AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi-Tetris in OOP

Ein Thema von PChelper · begonnen am 9. Mai 2010 · letzter Beitrag vom 9. Mai 2010
Antwort Antwort
PChelper

Registriert seit: 15. Feb 2010
1 Beiträge
 
#1

Delphi-Tetris in OOP

  Alt 9. Mai 2010, 14:59
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]
Miniaturansicht angehängter Grafiken
umloriw_865.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Delphi-Tetris in OOP

  Alt 9. Mai 2010, 15:16
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.332 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Delphi-Tetris in OOP

  Alt 9. Mai 2010, 16:04
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
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Delphi-Tetris in OOP

  Alt 9. Mai 2010, 16:56
Zitat von jaenicke:
Im ersten der beiden Crossposts wurde dazu auch schon etwas mehr geschrieben
Mehr ja, aber auch nichts anderes als mein Vorschlag.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:03 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