# Puzzle



## Hans-Franz-Hefe (3. Jan 2013)

Hallo Leute,

wir müssen für die Schule ein Java-Programm (egal was) erstellen, dabei haben wir uns auf ein "Puzzle" wie nachfolgend beschrieben, geeinigt.

The Puzzle game

Allerdings fehlt bei uns die Verknüpfung zur Oberfläche. Quellcode der Java Klasse haben wir bereits erfolgreich erstellt. Dieser ähnelt dem in dem Link. 

Meine Frage wär jetzt, was müssen wir in die Oberfläche reinschreiben, damit das Puzzle überhaupt angezeigt wird? Da wir den Zusammenhang nicht checken, ob der Quellcode komplett Fachklasse "puzzle" ist oder auch ein Teil der Oberfläche sich darin befindet. 

MfG

Hans
Franz
und Hefekranz



*hier ist unser Quellcode:*

```
package klassen;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class Puzzle extends JFrame implements ActionListener {

    private JPanel centerPanel;
    private JButton button;
    private JLabel label;
    private Image source;
    private Image image;
    int[][] position;
    int breite;
    int hoehe;

    public Puzzle() {

        position = new int[][] {
                            {0, 1, 2}, 
                            {3, 4, 5}, 
                            {6, 7, 8}, 
                            {9, 10, 11}
                        };


        centerPanel = new JPanel();
        centerPanel.setLayout(new GridLayout(4, 4, 0, 0));

        ImageIcon sid = new ImageIcon(Puzzle.class.getResource("Gandalf.jpg"));
        source = sid.getImage();

        breite = sid.getIconWidth();
        hoehe = sid.getIconHeight();


        add(Box.createRigidArea(new Dimension(0, 5)), BorderLayout.NORTH);    
        add(centerPanel, BorderLayout.CENTER);


        for ( int i = 0; i < 4; i++) {
            for ( int j = 0; j < 3; j++) {
                if ( j == 2 && i == 3) {
                    label = new JLabel("");
                    centerPanel.add(label);
                } else {
                    button = new JButton();
                    button.addActionListener(this);
                    centerPanel.add(button);
                   	image = createImage(new FilteredImageSource(source.getSource(),
                        new CropImageFilter(j*breite/3, i*hoehe/4, 
                            (breite/3)+1, hoehe/4)));
                    button.setIcon(new ImageIcon(image));
                }
            }
        }

        setSize(325, 275);
        setTitle("Puzzle");
        setResizable(false);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setVisible(true);
    }


    public static void main(String[] args) {

        new Puzzle();

    }

    public void actionPerformed(ActionEvent e) {
        JButton button = (JButton) e.getSource();
        Dimension size = button.getSize();

        int labelX = label.getX();
        int labelY = label.getY();
        int buttonX = button.getX(); 
        int buttonY = button.getY();
        int buttonPosX = buttonX / size.width;
        int buttonPosY = buttonY / size.height;
        int buttonIndex = position[buttonPosY][buttonPosX];



        if (labelX == buttonX && (labelY - buttonY) == size.height ) {

             int labelIndex = buttonIndex + 3;

             centerPanel.remove(buttonIndex);
             centerPanel.add(label, buttonIndex);
             centerPanel.add(button,labelIndex);
             centerPanel.validate();
        }

        if (labelX == buttonX && (labelY - buttonY) == -size.height ) {

             int labelIndex = buttonIndex - 3;
             centerPanel.remove(labelIndex);
             centerPanel.add(button,labelIndex);
             centerPanel.add(label, buttonIndex);
             centerPanel.validate();
        }

        if (labelY == buttonY && (labelX - buttonX) == size.width ) {

             int labelIndex = buttonIndex + 1;

             centerPanel.remove(buttonIndex);
             centerPanel.add(label, buttonIndex);
             centerPanel.add(button,labelIndex);
             centerPanel.validate();
        }

        if (labelY == buttonY && (labelX - buttonX) == -size.width ) {

             int labelIndex = buttonIndex - 1;

             centerPanel.remove(buttonIndex);
             centerPanel.add(label, labelIndex);
             centerPanel.add(button,labelIndex);
             centerPanel.validate();
        }
    }
}
```


----------



## hüteüberhüte (3. Jan 2013)

Hans-Franz-Hefe hat gesagt.:


> Meine Frage wär jetzt, was müssen wir in die Oberfläche reinschreiben, damit das Puzzle überhaupt angezeigt wird? Da wir den Zusammenhang nicht checken, ob der Quellcode komplett Fachklasse "puzzle" ist oder auch ein Teil der Oberfläche sich darin befindet.



Kurz 'ne Verständnisfrage, ihr habt ein Bild / Grafik, die z.B. in 12 Teile aufgeteilt wird. Auf der Oberfläche (GUI) werden die Teile in zufälliger Reihenfolge angezeigt, und man soll sie (durch klicken?) in die richtige Reihenfolge bringen?


----------



## Landei (3. Jan 2013)

Muss das große rote "Java™ Quelltext ist bitte in [JAVA]-Tags zu schreiben" über dem Antwortfeld noch blinken?


----------



## hütte (3. Jan 2013)

Landei hat gesagt.:


> Muss das große rote "Java™ Quelltext ist bitte in [JAVA]-Tags zu schreiben" über dem Antwortfeld noch blinken?



Ist wie mit Silvesterraketen, welche man auch noch in der Hand hält, während die Zündschnur langsam abbrennt...  Aber ich finde die Frage ungenau gestellt!


----------



## Hans-Franz-Hefe (3. Jan 2013)

hüteüberhüte hat gesagt.:


> Kurz 'ne Verständnisfrage, ihr habt ein Bild / Grafik, die z.B. in 12 Teile aufgeteilt wird. Auf der Oberfläche (GUI) werden die Teile in zufälliger Reihenfolge angezeigt, und man soll sie (durch klicken?) in die richtige Reihenfolge bringen?



Vollkommen richtig, und dazu die Frage: Welcher Teil in unserem Quellcode muss in die "Oberfläche" und welcher Teil in die Fachklasse "Puzzle"?, denn in der Oberfläche wird rein garnichts angezeigt.


----------



## Hans-Franz-Hefe (4. Jan 2013)

Landei hat gesagt.:


> Muss das große rote "Java™ Quelltext ist bitte in [JAVA]-Tags zu schreiben" über dem Antwortfeld noch blinken?



Ich versteh leider deine Frage nicht so Recht 

Ich fände es wichtiger wie ich das alles auf der Oberfläche anzeigen lassen kann...


MfG


----------



## maki (4. Jan 2013)

Hans-Franz-Hefe hat gesagt.:


> Ich fände es wichtiger wie ich das alles auf der Oberfläche anzeigen lassen kann...


Ich finde es wichtig dass (vor allem neue) Mitglieder sich an die Regeln halten 
Oder war der Hinweis zu subtil?


----------

