Puzzle

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:

Java:
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();
        }
    }
}
 
Zuletzt bearbeitet von einem Moderator:
H

hüteüberhüte

Gast
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

Top Contributor
Muss das große rote "Java™ Quelltext ist bitte in [JAVA]-Tags zu schreiben" über dem Antwortfeld noch blinken?
 
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.
 
Zuletzt bearbeitet:

Neue Themen


Oben