![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Benutzer
Registriert seit: 05.07.2004
Beiträge: 95
|
Also folgendes Problem, wir sollen in der Schule das ABC-Game nachpogrammieren aber halt in Java.
Für diejenigen unter euch die das nicht kennen. Das Spiel ist eine Art Tabelle in der in jedem Feld ein Element steckt. Insg. gibt es nur 5 verschiedene Typen dieser Elemente und sobald zwei gleiche oder mehrere gleiche aneinanderhängen kann man diese mit einem Doppelklick wegklicken und die darüberliegenden Steine fallen nach unten. Sollte eine ganze Spalte weg sein, so rücken die anderen von rechts in Richtung links nach. Je mehr gleiche Elemente aneinanderhängen desto mehr Punkte bekommt man. So nun meine Frage: Den Aufbau habe ich mit Swing erledigt bisher. es werden 20*40 Elemente erzeugt und ordentlich angeordnet. Die Elemente sind extends JButton. Sie kennen bisher ihren Typ und ihren Farbstatus (Wenn sie angeklickt sind sollen sie die Farbe zur Makierung ändern), das klappt auch alles schon. Die Frage die ich mir nun stelle ist, wie ich herausfinde ob ein benachbartes Element den gleichen Typ hat. Angefragt werden muss ja das darüberliegenden/drunterliegende/rechte/linke und wenn dieses Element dann dazugehört, dann muss es ja auch wieder so weiterfragen, nur halt nicht das Element das die Anfrage weitergeleitet hat sonst landet man in einer ewigen Schleife. Wie ihr seht ist der Pseudocode soweit fertig es mangelt nur an der Umsetzung. Ich weiß nicht wie ich es so verwaltet bekomme, dass ich direkt die umliegende Elemente ansprechen kann. Mir fallen ein HashTable / Vector aber beides scheint mir nicht so besonders gut dazu geeignet. Hoffe auf eure Ansatzideen ... Liebe Grüße `B
__________________
|
|
|
|
|
|
Nach oben #2 |
|
Chefkoch-Mod
Registriert seit: 30.05.2004
Beiträge: 433
|
Leg Dir doch ein zweidimensionales Array an (oder eine Dimension mit entsprechender Indizierung).
Damit sollte das ziemlich einfach werden. edit: alternativ könntest Du einen Grasfire-Algorithmus aus der Bildverarbeitung implementieren. Damit "brennt" man somit das Gebiet raus. Dieser Algorithmus ist zwar eigentlich für etwas anderes, aber Dein Problem findet sich darin wieder.
__________________
Denk mal darüber nach... Lars ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen. www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de |
|
|
|
|
|
Nach oben #4 |
|
Benutzer
Registriert seit: 05.07.2004
Beiträge: 95
|
ich glaube zwar nicht das das viel hilft aber hier ist der Source der die Elemente erzeugt. Abgelagert werden Sie derzeit in einem verschachtelten Vektor.
PHP-Code:
__________________
|
|
|
|
|
|
Nach oben #6 | |
|
Benutzer
Registriert seit: 05.07.2004
Beiträge: 95
|
Ich verwende Vectoren da mir bisher keine andere gute alternative eingefragen ist deswegen steht ja auch mein erstes Posting oben.
Zitat:
__________________
|
|
|
|
|
|
|
Nach oben #10 | |
|
Benutzer
Registriert seit: 05.07.2004
Beiträge: 95
|
Zitat:
__________________
|
|
|
|
|
|
|
Nach oben #11 |
|
Gast
Beiträge: n/a
|
Achso..hab ich glatt überlesen
Vielleicht könntest du in deiner Klasse (die du ja von JButton ableitest oder?) eine Variable einführen, die angibt ob an dieser Position nichts angezeigt werden soll, da vorher Kugeln "runter gefallen" sind. Beim "Zeichnen" überprüfst du dann u.a. diese Variable um zu sehen ob du nun überhaupt was zeichnen musst. Ist die Frage ob man nicht ArrayList und Array kombinieren könnte.... |
|
|
|
Nach oben #12 |
|
Chefkoch-Mod
Registriert seit: 30.05.2004
Beiträge: 433
|
Das mit dem Array wäre wohl die beste Variante.
Und wegen dem Löschen kannst Du ja einfach das obige Element einen runter kopieren usw usf. Ich sehe das Problem nicht. Wenn Du das elegant lösen möchtest, schreibst Du Dir dafür einen Listener, der das Array überwacht.
__________________
Denk mal darüber nach... Lars ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen. www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de |
|
|
|
|
|
Nach oben #16 |
|
Chefkoch-Mod
Registriert seit: 30.05.2004
Beiträge: 433
|
Vektoren sollen meiner Meinung nach lieber von Arraylists ersetzt werden. Ich meine sowas gelesen zu haben.
__________________
Denk mal darüber nach... Lars ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen. www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de |
|
|
|
|
|
Nach oben #18 |
|
Gast
Beiträge: n/a
|
Hmm? Versteh nicht genau was du meinst...Wenn du ne ArrayList hast und löschst mittendrin ein paar Elemente, weil diese "Kugeln" durch Klick wegfallen, dann rücken die andern von oben doch nach...
Außerdem stimm ich Sym zu: ArrayList ist auf jeden Fall Vector vorzuziehen. |
|
|
|
Nach oben #20 | |
|
Gast
Beiträge: n/a
|
Hab mir deinen Code nochmal angeschaut:
Zitat:
Wenn einer der Vektoren aus hatKnopfVektor leer ist, heisst das das die Spalte leer ist , du löschst den entsprechenden Vektor und die andern rücken nach. Wenn in einer Spalte ein Knopf gedrückt wird, löschst du entsprechend in dieser Spalte und evtl. in benachbarten Spalten einzelne Elemente des Vektors, so dass Knöpfe von oben nach unten "durchfallen" nach Wegklicken der andern. So richtig verstanden oder etwas anders? Nicht das da schon ein Missverständnis vorliegt. |
|
|