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
}
 
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)
 
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 😀

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 😀

danke schon mal
 
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.
 

Neue Themen


Zurück
Oben