Puzzle Klick tausch

theoneand

Aktives Mitglied
Hallo,
hab ein kleines Problem, und zwar ist unser Projekt ein Puzzle Spiel, wo wir ein 3 x 3 Gridlayout erstellt haben und auf diesem 9 buttons erzeugt haben, diesen einzelnen buttons haben wir noch die einzelnen bildteile zugewiesen. jetzt meine frage, wie kann man das erreichen, dass man diese teile nachdem sie
geshufflet wurden per Klick-Tausch wieder in die richtige Reihenfolge bringen kann??

Hier der bisherige Quellcode.

Java:
import java.lang.String;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.*;
import java.applet.Applet;
import javax.swing.JFrame;
import java.awt.Container;

public class MenuExample extends JFrame {

  // Anfang Attribute
  // Ende Attribute



  public MenuExample() {
    super("GAME");   // Fenstertitel an JFrame(String) übergeben
      setDefaultCloseOperation( EXIT_ON_CLOSE); // Fenster schließen = Ende

    
    
    Container contentPane = getContentPane();
    contentPane.setLayout( new GridLayout(3,3));  // Gridlayout 3x3 erzeugen
    setSize (300, 400);
    setResizable ( false ); // Fenster ist nicht veränderbar
    

    /*final JButton[] arrayMitButtons = new JButton[10];
              for (int i = 1; i < arrayMitButtons.length; i++) {
              String index = String.valueOf(i);
              ImageIcon image = new ImageIcon("E:\\berg" + index +  ".jpg");
              arrayMitButtons[i] = new JButton(image);
              add(arrayMitButtons[i]);
              arrayMitButtons[i].setVisible(false);
              }
     */
    JMenu menu, submenu;
    JMenuItem menuItem;
    JMenuBar menuBar = new JMenuBar();

    menu = new JMenu( "GAME");          // Erzeugen eines Hauptmenüpunktes
    menuBar.add( menu);                       // Hinzufügen des Hauptmenüpunktes
    submenu = new JMenu( "New Game");         // Erzeugen eines Sub-  bzw Untermenüs von Puzzle Pro
    menu.add( submenu);                       // Hinzufügen des Submenüpunktes
    menuItem = new JMenuItem( "Bild 1");      // Erzeugen eines Untermenüs von New Game
    submenu.add( menuItem);                   // Untermenü wird dem Submenü hinzugefügt
  /*  menuItem.addActionListener( new ActionListener() {
      public void actionPerformed( ActionEvent e) {
             for (int i = 1; i < arrayMitButtons.length; i++) {
               arrayMitButtons[i].setVisible(true);
             }
      }
    });    */
    menuItem = new JMenuItem( "Bild 2");      // Erzeugen eines Untermenüs von New Game
    submenu.add( menuItem);                   // Untermenü wird dem Submenü hinzugefügt
    menuItem = new JMenuItem( "Bild 3");      // Erzeugen eines Untermenüs von New Game
    submenu.add( menuItem);                   // Untermenü wird dem Submenü hinzugefügt
    menuItem = new JMenuItem( "Bestenliste"); // Erzeugen eines Untermenüs von Puzzle Pro
    menu.add(menuItem);                       // Untermenü wird dem Hauptmenü hinzugefügt
    menuItem = new JMenuItem( "Exit");        // Erzeugen eines Untermenüs von Puzzle Pro
    menu.add(menuItem);                       // Untermenü wird dem Hauptmenü hinzugefügt
    menuItem.addActionListener( new ActionListener() {
      public void actionPerformed( ActionEvent e) {
        System.exit(0);                       // Durch wählen des Menupunketes "Exit" wird das Fenster beendet
      }
    });

        
    //menu.add( new JSeparator());

    menu = new JMenu( "Optionen");           // Erzeugen eines Hauptmenüpunktes
    menuBar.add( menu);                      // Hinzufügen des Hauptmenüpunktes
    submenu = new JMenu( "Schwierigkeit");   // Erzeugen eines Sub-  bzw Untermenüs von Optionen
    menu.add( submenu);                      // Hinzufügen des Submenüpunktes
    menuItem = new JMenuItem( "Leicht");     // Erzeugen eines Untermenüs von Schwierigkeit
    submenu.add( menuItem);                  // Untermenü wird dem Submenü hinzugefügt
        final JButton[] arrayMitButtons = new JButton[10];
              for (int i = 1; i < arrayMitButtons.length; i++) {
              String index = String.valueOf(i);
              ImageIcon image = new ImageIcon("E:\\berg" + index +  ".jpg");
              arrayMitButtons[i] = new JButton(image);
              add(arrayMitButtons[i]);
              arrayMitButtons[i].setVisible(false);
              }
        menuItem.addActionListener( new ActionListener() {
      public void actionPerformed( ActionEvent e) {
             for (int i = 1; i < arrayMitButtons.length; i++) {
               arrayMitButtons[i].setVisible(true);
             }
      }
    });
    menuItem = new JMenuItem( "Mittel");     // Erzeugen eines Untermenüs von Schwierigkeit
    submenu.add( menuItem);                  // Untermenü wird dem Submenü hinzugefügt
    menuItem = new JMenuItem( "Schwer");     // Erzeugen eines Untermenüs von Schwierigkeit
    submenu.add( menuItem);                  // Untermenü wird dem Submenü hinzugefügt
    menuItem = new JMenuItem ("Reset");
    menu.add (menuItem);
      menuItem.addActionListener( new ActionListener() {
      public void actionPerformed( ActionEvent e) {
             for (int i = 1; i < arrayMitButtons.length; i++) {
             arrayMitButtons[i].setVisible(false);
             }
      }
    });
    menuItem = new JMenuItem( "Pause/Zeit stoppen"); // Erzeugen eines Untermenüs von Optionen
    menu.add(menuItem);                              // Untermenü wird dem Hauptmenü hinzugefügt
    
    setJMenuBar( menuBar);                  // Erzeugen der kompletten Menüleiste
    setSize( 800, 600);                     // Größe der Menüleiste festlegen

    // Anfang Komponenten
    // Ende Komponenten
  }

  // Anfang Methoden



  public static void main( String[] args) {
    new MenuExample().setVisible( true);    // main() endet, Programm läuft weiter
  }
  // Ende Methoden
}
 

Michael...

Top Contributor
jetzt meine frage, wie kann man das erreichen, dass man diese teile nachdem sie geshufflet wurden per Klick-Tausch wieder in die richtige Reihenfolge bringen kann??
Annahme: Zum Tauschen werden zwei Buttons nacheinander angeklickt. (kein Schiebespiel)

- Zunächst benötigen die Buttons einen ActionListener.
- Wird der erste Button angeklickt, wird dessen Index in einem Merker gespeichert.
- Wird der zweite Button angeklickt werden die Bilder der beiden Buttons getauscht und der Merker zurück gesetzt (z.B. -1)

Mit dieser Implementierung muss man allerdings große Anstrengungen unternehmen, um zu prüfen, ob die korrekte Reihenfolge wieder hergestellt wurde und man sollte zumindest Referenzen auf die Images in einem globalen Array speicherrn (auch das Button Array sollte m.M. als Instanzvariable deklariert werden)

Besser wäre es vermutlich ein Model zu nutzen, dass die aktuelle "Position" der Bilder in einem Array oder eine Liste verwaltet und die Buttons und Images nur zur Darstellung nutzt. (s. MVC Entwurfsmuster)
 

theoneand

Aktives Mitglied
danke erst mal für die schnelle antwort!!!
Leider muss ich gestehen, bin ich ziemlich neu in dieser Richtung on Programmieren, haben GUI erst angefangen :D

hab mich gerade im i-net nach dem MVC erkundigt, bin aber nich wirklich schlau draus geworden, wie ich das einsetzten soll.

kannnst du mir vlt nen ansatz von den möglichkeiten geben?? dann probier ich mich selber dran :D

danke schon mal
 

Michael...

Top Contributor
Man muss ja nicht gleich versuchen, das MVC umzusetzen (war nur als Hinweis gedacht). Am Anfang würde es ja reichen mit einem int[][] Array gefüllt mit den Zahlen 0 bis 8 zu arbeiten. Das hätte den Vorteil, dass es relativ einfach ist die Reihenfolge zu überprüfen.
Beim Klick auf die Buttons a/b und x/y brauch man nur die Inhalte des int - Arrays an entsprechender Position zu tauschen und auf den Buttons die "neuen" Zahlen anzeigen lassen. Anschließend noch über das int - Array iterieren und die Reihenfolge überprüfen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Bilder auf Buttons per Klick tauschen ( Puzzle ) AWT, Swing, JavaFX & SWT 8
H Puzzle - Listen erstellen, array & liste vergleichen AWT, Swing, JavaFX & SWT 28
H Puzzle - Erkennen wenn gelöst (array vergleichen) AWT, Swing, JavaFX & SWT 10
H Swing Buttons erst nach Klick sichtbar AWT, Swing, JavaFX & SWT 13
S JavaFx Zufallsfarbe beim Button-Klick AWT, Swing, JavaFX & SWT 22
H Swing Auf Klick auf Menü-Eintrag reagieren AWT, Swing, JavaFX & SWT 0
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
A Inhalt wechseln bei Klick auf Label AWT, Swing, JavaFX & SWT 8
S Ausgabe aktualisiert sich nur nach 2. Klick AWT, Swing, JavaFX & SWT 17
T Swing Änderung des ActionListener Events nach Klick auf JButton AWT, Swing, JavaFX & SWT 2
Neumi5694 Swing JList - Klick abfangen AWT, Swing, JavaFX & SWT 3
it_is_all JPanel verschwindet nach Button-Klick AWT, Swing, JavaFX & SWT 2
A Nach klick auf Button neuen Inhalt im gleichen Fenster AWT, Swing, JavaFX & SWT 3
A JavaFX Nur ein Klick Button AWT, Swing, JavaFX & SWT 3
J Fensterinhalt bei Klick auf Menüitem wechseln AWT, Swing, JavaFX & SWT 1
stylegangsta JLabel durch Klick auf JButton einblenden AWT, Swing, JavaFX & SWT 16
D Mit Klick auf Button ein neues Fenster erzeugen AWT, Swing, JavaFX & SWT 11
A Zufallsgenerator starten bei Klick auf Radiobutton AWT, Swing, JavaFX & SWT 3
R AWT AWT Textfeld durch Klick auf Button erstellen? AWT, Swing, JavaFX & SWT 3
1 JButton nach Klick ausblenden AWT, Swing, JavaFX & SWT 6
W Bei Button-klick neuen button in array hinzufügen AWT, Swing, JavaFX & SWT 7
P Swing Klick in Tabelle nicht möglich AWT, Swing, JavaFX & SWT 0
P Swing JTable keine Markierung nach Button klick AWT, Swing, JavaFX & SWT 0
C Bei Btn Klick zwei JPanels switchen AWT, Swing, JavaFX & SWT 14
A Swing bei Auswahl und klick eines JComboBox buttons die Klasse eines anderen Projekts aufrufen AWT, Swing, JavaFX & SWT 3
N Swing JTable mit Sorter: Keine Sortierung bei Klick in Header AWT, Swing, JavaFX & SWT 3
F Swing JTextfield Beispieltext soll nach Klick verschwinden AWT, Swing, JavaFX & SWT 3
T JXTreeTable mit Klick auf TreeNode erweitern AWT, Swing, JavaFX & SWT 12
J Zwei GUIs - Nach button-Klick soll ein Wert an die andere GUI übergeben werden AWT, Swing, JavaFX & SWT 15
J Button soll nach Klick Text ändern und Programm in 3 Sekunden beenden AWT, Swing, JavaFX & SWT 6
H Swing Button Klick soll "Untermenü-Buttons" erzeugen AWT, Swing, JavaFX & SWT 2
T Bei Klick Code ausführen AWT, Swing, JavaFX & SWT 17
S Gif beim Klick nicht unterbrechen AWT, Swing, JavaFX & SWT 3
S Ausschluss bei Klick auf GUI Element AWT, Swing, JavaFX & SWT 6
M JPopupMenu per Klick schließen und gleichzeitig ActionEvent auf JButton? AWT, Swing, JavaFX & SWT 15
Z Bei Klick auf JButton soll ein anderer JButton erscheinen AWT, Swing, JavaFX & SWT 4
D JTree node reagiert bei Klick nicht immer AWT, Swing, JavaFX & SWT 2
D Bei Klick zeichnen AWT, Swing, JavaFX & SWT 13
L Swing Flackern in Frame bei erstem Klick AWT, Swing, JavaFX & SWT 19
Madlip SWT Tree mit einen Klick alles ausklappen AWT, Swing, JavaFX & SWT 3
D JTree nach Klick auf einen Hyperlink aktualisieren AWT, Swing, JavaFX & SWT 3
A Swing Herausfinden ob bei JTree Klick auf "+"/"-" anahnd x,y AWT, Swing, JavaFX & SWT 2
C jComboBox in jTable ohne Klick öffnen AWT, Swing, JavaFX & SWT 4
S JMenuBar nach 1. Klick deselectieren AWT, Swing, JavaFX & SWT 6
T Demo klick gui erstellen und fenster verlinken AWT, Swing, JavaFX & SWT 5
S JDesktopPane bei Button-Klick anzeigen geht nicht AWT, Swing, JavaFX & SWT 5
multiholle Button bei Klick entfernen AWT, Swing, JavaFX & SWT 3
W Klick in JTextfield AWT, Swing, JavaFX & SWT 6
M animiertes Bild nach Klick auf Button AWT, Swing, JavaFX & SWT 3
H Swing Tabelle nach Klick auf Button mit Daten füllen? AWT, Swing, JavaFX & SWT 2
M JList von Beginn an sortiert nach Spalte ohne Klick? AWT, Swing, JavaFX & SWT 2
L Klick auf JTable -> EditorPane manipulieren, Fragen zu TableModel AWT, Swing, JavaFX & SWT 9
T Ordner öffnen nach Klick auf einen Button AWT, Swing, JavaFX & SWT 3
D 1 klick auf button1 und 1 klick auf button2 und passiert was AWT, Swing, JavaFX & SWT 7
X SWT Oberflächenwechsel bei Button-Klick AWT, Swing, JavaFX & SWT 2
S Zeichnen nach button-klick. AWT, Swing, JavaFX & SWT 4
E Zelle in JTable nach klick markieren AWT, Swing, JavaFX & SWT 2
N Herkunft des Fokus erkennbar (via Klick oder Tab-Steuerung)? AWT, Swing, JavaFX & SWT 4
C Aktion durchführen bei Klick auf ein Element im JTree (Untersch. Klick und Doppklick) AWT, Swing, JavaFX & SWT 5
S Swing Bei Klick auf OK Daten übergeben AWT, Swing, JavaFX & SWT 6
F JButton reagiert erst beim 2 klick AWT, Swing, JavaFX & SWT 8
A Swing JTextField - vorausgefüllt bei klick leer AWT, Swing, JavaFX & SWT 54
B Inhalt von JTextField durch Klick auf JButton in JLabel anzeigen lassen AWT, Swing, JavaFX & SWT 8
Daniel_L JTable - Links-rechts-Klick ist gleich Doppelklick? AWT, Swing, JavaFX & SWT 2
S JComboBox in JTable wird erst nach klick angezeigt AWT, Swing, JavaFX & SWT 2
L JFrame-Verhalten bei Klick auf Schließen-Kreuz ändern AWT, Swing, JavaFX & SWT 3
GilbertGrape JTable mit Combobox-Editierung schon nach einem Klick AWT, Swing, JavaFX & SWT 7
M Ausgabe nach Klick auf JButton funktioniert nicht. AWT, Swing, JavaFX & SWT 6
R Text löchen bei Klick auf editierbare Combobox AWT, Swing, JavaFX & SWT 4
S Jtree-Icon per Klick auf JBUTTON ändern AWT, Swing, JavaFX & SWT 3
G JList, Deselect per Klick AWT, Swing, JavaFX & SWT 5
A Bei Klick auf disabled JMenuItem JMenu nicht schließen AWT, Swing, JavaFX & SWT 2
A JTree wird erst nach Klick aktualisiert AWT, Swing, JavaFX & SWT 2
G Swing ->mainpanel wechseln bei Klick auf MenuItem (NetB.6 AWT, Swing, JavaFX & SWT 3
X JTable "geht" erst beim 2.Klick AWT, Swing, JavaFX & SWT 2
G Farbe ändern bei Klick auf einen Kreis AWT, Swing, JavaFX & SWT 5
F Ignoriere Mausklick falls erster Klick von Doppelklick . AWT, Swing, JavaFX & SWT 4
S 1 Klick für JButton und Layout ändert sich AWT, Swing, JavaFX & SWT 14
G Icon auf Button per Klick darauf ändern? AWT, Swing, JavaFX & SWT 9
S jTable beim Klick auf Button aktualisieren AWT, Swing, JavaFX & SWT 7
H JWindow schließen bei einem Klick außerhalb der Anwendung? AWT, Swing, JavaFX & SWT 19
S Neues Panel in JFrame anzeigen durch Button klick AWT, Swing, JavaFX & SWT 2
A Zellen in JTable auf Klick kurz markieren auf Klick AWT, Swing, JavaFX & SWT 2
N Bei Klick auf einen Menüeintrag, soll Tabelle ausgegeben wer AWT, Swing, JavaFX & SWT 4
B JPanel erst durch Button-Klick sichtbar machen AWT, Swing, JavaFX & SWT 8
Z JMenue und bei Klick neuer Inhalt, Problem AWT, Swing, JavaFX & SWT 3
B Anfänger: Panel bei Button Klick anzeigen? AWT, Swing, JavaFX & SWT 4
M Java mit Swing - Elemente erst nach klick sichtbar AWT, Swing, JavaFX & SWT 13
C Komponente mit Focus bevor JButton-Klick merken. AWT, Swing, JavaFX & SWT 6
M neues Frame per klick anzeigen AWT, Swing, JavaFX & SWT 9
I JSlider - klick ignorieren AWT, Swing, JavaFX & SWT 4
S Einfacher Klick aber mouseClicked() zweimal aufgerufen AWT, Swing, JavaFX & SWT 3
R Klick in einem Tree erkennen und auswerten AWT, Swing, JavaFX & SWT 6
G Ein klick auf JPanel abfangen und verarbeiten? AWT, Swing, JavaFX & SWT 3
S Schließen eines Fensters bei Klick auf Button? AWT, Swing, JavaFX & SWT 2
hamburger_jung Mit Button Klick neues Fenster öffnen. AWT, Swing, JavaFX & SWT 1
N Jtable und ein Klick darauf! AWT, Swing, JavaFX & SWT 4
V JTable: Bei Klick in Zelle -> Ganze Zeile markeiren AWT, Swing, JavaFX & SWT 7
H Neue Instanz einer Klasse bei JButton-Klick AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen


Oben