Portal > Foren > Java > Allgemeine Java-Programmierung > Elementverwaltung zur gezielten Ansprechung - ABC Game
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 09.03.2005, 22:03 Nach oben    #1
`B
Benutzer
 
Benutzerbild von `B
 
Registriert seit: 05.07.2004
Beiträge: 95
Standard Elementverwaltung zur gezielten Ansprechung - ABC Game

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
__________________
`B ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.03.2005, 22:30 Nach oben    #2
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 433
Standard

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
Sym ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.03.2005, 00:58 Nach oben    #3
mic_checker
Gast
 
Beiträge: n/a
Standard

Vielleicht könntest du mal deinen bisherigen Code posten (falls das möglich ist) - dann kann man besser helfen. V.a. weiss man dann genau welche Struktur dahinter steckt.
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.03.2005, 11:01 Nach oben    #4
`B
Benutzer
 
Benutzerbild von `B
 
Registriert seit: 05.07.2004
Beiträge: 95
Standard

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:
 private void erzeugeInhalt() {
  
Vector hatZeilenKnoepfe;
  
// Als nächstes Knopf darum erweitern, dass er weiß wo er im Vektor ist und den bearbeiteKnopfEreignis
  
getContentPane().add(BorderLayout.CENTERknopfPanel);
  
getContentPane().add(BorderLayout.SOUTHhatStatusLeiste);
  
hatStatusLeiste.setEditable(false);
  for(
int i 0i<10i++) {
   
hatZeilenKnoepfe = new Vector();
   for(
int j 0j<10j++) {
    
int zufall 0;
    while(
zufall == 0) {
    
zufall hatRandom.nextInt(6);
    }
    
hatKnopf = new Knopf();
    
hatKnopf.setzeTyp(zufall);
    
hatKnopf.addActionListener(new ActionListener() {
                 public final 
void actionPerformed(final ActionEvent e) {
                     
Anzeige.this.bearbeiteKnopfEreignis((Knopf)e.getSource()); 
                 } });
    
knopfPanel.add(hatKnopf);
    
hatZeilenKnoepfe.add(hatKnopf);
   }
   
hatKnopfVektor.add(hatZeilenKnoepfe);
  }
 } 
__________________
`B ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.03.2005, 11:28 Nach oben    #5
mic_checker
Gast
 
Beiträge: n/a
Standard

Sollen mehrere Threads "gleichzeitig" darauf zugreifen können oder warum verwendest du Vector?
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.03.2005, 13:03 Nach oben    #6
`B
Benutzer
 
Benutzerbild von `B
 
Registriert seit: 05.07.2004
Beiträge: 95
Standard

Ich verwende Vectoren da mir bisher keine andere gute alternative eingefragen ist deswegen steht ja auch mein erstes Posting oben.

Zitat:
Zitat von `B
Mir fallen ein HashTable / Vector aber beides scheint mir nicht so besonders gut dazu geeignet.
__________________
`B ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.03.2005, 13:06 Nach oben    #7
mic_checker
Gast
 
Beiträge: n/a
Standard

Wie oben schon gepostet, warum nimmst du kein zweidimensionales Array? Der Zugriff auf die einzelnen Elemente ist ja wesentlich schneller.

Btw. wenn man auf synchronized keinen Wert legt, sollte man sowieso eher ArrayList holen.
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.03.2005, 13:14 Nach oben    #8
`B
Benutzer
 
Benutzerbild von `B
 
Registriert seit: 05.07.2004
Beiträge: 95
Standard

okay schönes Stichwort aber wie funzt das?

ich kenne nur String[] / int[] in x-Facher Tiefe aber wie macht man das mit JButtons?
__________________
`B ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.03.2005, 13:44 Nach oben    #9
mic_checker
Gast
 
Beiträge: n/a
Standard

Code:
JButton[][] jf_feld = new JButton[DeineHoehe][DeineBreite];
Oder was meinst du?
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.03.2005, 13:51 Nach oben    #10
`B
Benutzer
 
Benutzerbild von `B
 
Registriert seit: 05.07.2004
Beiträge: 95
Standard

Zitat:
Zitat von mic_checker
Code:
JButton[][] jf_feld = new JButton[DeineHoehe][DeineBreite];
Oder was meinst du?
okay nun ist das so da drin meinetwegen. Wie schon oben beschrieben verschwinden die Knöpfe nach einem Doppelklick und müsste der einfachheithalber auch aus dem Array dann entfernt werden. Damit die von oben nach unten nachrücken. Wie bewerkstellige ich das mit einem Array? in einem Vector schreibe ich einfach remove(elementID); aber wie macht man das bei einem Array?
__________________
`B ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.03.2005, 14:02 Nach oben    #11
mic_checker
Gast
 
Beiträge: n/a
Standard

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....
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.03.2005, 15:19 Nach oben    #12
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 433
Standard

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
Sym ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.03.2005, 16:07 Nach oben    #13
mic_checker
Gast
 
Beiträge: n/a
Standard

Ja, außerdem musst du gegebenfalls alle nach "links" kopieren/verschieben, wenn eine Spalte komplett leer ist (so war es doch , also das die dann nach links nachrücken oder ?)
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.03.2005, 18:47 Nach oben    #14
`B
Benutzer
 
Benutzerbild von `B
 
Registriert seit: 05.07.2004
Beiträge: 95
Standard

Vektoren bieten dies alles standartmässig an. Hab ich wohl die richtige Wahl getroffen.
__________________
`B ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.03.2005, 21:00 Nach oben    #15
mic_checker
Gast
 
Beiträge: n/a
Standard

Dann hol zumindest ArrayList.
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.03.2005, 02:39 Nach oben    #16
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 433
Standard

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
Sym ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.03.2005, 11:57 Nach oben    #17
`B
Benutzer
 
Benutzerbild von `B
 
Registriert seit: 05.07.2004
Beiträge: 95
Standard

hmz mit arraylist ist das allerdings total umstndlich, da die auch nullwerte speichert und so nicht alles nachrücken kann ...
__________________
`B ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.03.2005, 13:02 Nach oben    #18
mic_checker
Gast
 
Beiträge: n/a
Standard

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.
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.03.2005, 14:44 Nach oben    #19
`B
Benutzer
 
Benutzerbild von `B
 
Registriert seit: 05.07.2004
Beiträge: 95
Standard

schön das ihr euch da einig seit, leider sehe ich keine ordentliche Möglichkeit das umzusetzen. Bin für konstruktive Anregungen allerdings offen ...
__________________
`B ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.03.2005, 15:18 Nach oben    #20
mic_checker
Gast
 
Beiträge: n/a
Standard

Hab mir deinen Code nochmal angeschaut:
Zitat:
Zitat von `B
PHP-Code:
 private void erzeugeInhalt() {
  
Vector hatZeilenKnoepfe;
.....
  for(
int i 0i<10i++) {
   
hatZeilenKnoepfe = new Vector();
   for(
int j 0j<10j++) {
.....
    
hatZeilenKnoepfe.add(hatKnopf);
   }
   
hatKnopfVektor.add(hatZeilenKnoepfe);
  }
 } 
In hatKnopfVektor (Vektor) speicherst du die einzelnen Vectoren, in denen wiederrum der Inhalt der Spalte (Knöpfe) enthalten ist. Korrekt?

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.
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

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


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:53 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44