Puzzle

Status
Nicht offen für weitere Antworten.
J

javalover

Gast
hi
ich möchte mal wissen ob jemand hier mit java puzzle Erfahrung gemacht hat
ich hätte gerne codeschnipsel oder idee
thx
 
J

javalover

Gast
danke genau ist es
findet man irgendwas mit Quelltext ? :wink:
ich habe bissl gegoogelt aber leider net fündig geworden. :roll:
 

L-ectron-X

Gesperrter Benutzer
Von einer ersten Testversion kann ich dir den Code geben:
Java:
/**
* Ein Schiebespiel als Java 1.1.8 komplatibles Applet<br>
* Author: L-ectron-X, 2003
*/

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class JPuzzleApplet extends Applet implements ActionListener {
   private Panel numbersPanel, functionPanel;
   private Label l_moves, l_empty;
   private Font buttonFont;
   private Button[][] buttons;
   private Button b_toMix, b_toReset;
   private int numberOfButtons;
   private int size = 4;
   private int movesCounter;

   public void init() {
      numberOfButtons = size * size;

      this.setLayout(new BorderLayout());

      buttonFont = new Font("Arial", 0, 30);

      numbersPanel = new Panel();
      numbersPanel.setLayout(new GridLayout(size, size));
      numbersPanel.setBackground(Color.lightGray);

      l_moves = new Label();
      l_moves.setAlignment(Label.CENTER);
      l_moves.setForeground(Color.white);
      l_empty = new Label();

      initNumberButtons();

      b_toMix = new Button("Mischen");
      b_toMix.addActionListener(this);
      b_toReset = new Button("Sortieren");
      b_toReset.addActionListener(this);
      functionPanel = new Panel();
      functionPanel.setLayout(new GridLayout(1, 4));
      functionPanel.setBackground(Color.gray);
      functionPanel.add(l_moves);
      functionPanel.add(b_toMix);
      functionPanel.add(b_toReset);
      functionPanel.add(l_empty);

      this.add(numbersPanel, BorderLayout.CENTER);
      this.add(functionPanel, BorderLayout.SOUTH);
   }

   public void actionPerformed(ActionEvent e) {
      Object obj = e.getSource();

      if(obj == b_toMix)
         mixNumberButtons();

      else if(obj == b_toReset)
         initNumberButtons();

      else
         moveNumberButton(e);
   }

   private void mixNumberButtons() {
      Button b1, b2;
      int[] r = new int[4]; //Zufallszahlen (Koordinaten für 2 Buttons)

      for(int i = 0; i < numberOfButtons; i++) { //Durchläufe

         for(int j = 0; j < r.length; j++) { //Zufallszahlen
            //Zufallszahlen ermitteln
            r[j] = (int) (Math.random() * size);
         }

         //Zufalls-Buttons ermitteln
         b1 = buttons[r[0]][r[1]];
         b2 = buttons[r[2]][r[3]];

         //Plätze der Buttons vertauschen
         buttons[r[2]][r[3]] = b1;
         buttons[r[0]][r[1]] = b2;
      }

      drawButtons();

      movesCounter = 0;
      setMovesCounter();
   }

   private void initNumberButtons() {
      Button[][] b = new Button[size][size];
      int z = 1;

      for(int i = 0; i < size; i++) {

         for(int j = 0; j < size; j++) {
            b[i][j] = new Button(String.valueOf(z));
            b[i][j].addActionListener(this);
            b[i][j].setFont(buttonFont);
            z += 1;
         }
      }

      buttons = b;

      //letzten Button unsichtbar machen
      buttons[size-1][size-1].setVisible(false);
      drawButtons();

      movesCounter = 0;
      setMovesCounter();
   }

   private void moveNumberButton(ActionEvent e) {
      Button b = (Button)e.getSource();
      String label = b.getLabel();
      //Koordinaten von Buttons im zweidimensionalen Array
      int xb1 = 0, yb1 = 0, xb2 = 0, yb2 = 0; //b1 = geklickter Button, b2 = unsichtbarer Button

      //Postition des geklickten Buttons im zweidimensionalen Array ermitteln
      for(int i = 0; i < size; i++) {
         for(int j = 0; j < size; j++) {

            //Koordinaten des geklickten Buttons speichern
            if(buttons[i][j].getLabel().equals(label)) {
               xb1 = i;
               yb1 = j;
            }

            //Koordinaten des unsichtbaren Buttons
            if(buttons[i][j].getLabel().equals(String.valueOf(numberOfButtons))) {
               xb2 = i;
               yb2 = j;
            }
         }
      }

      //  links neben dem Button          rechts neben dem Button
      if((xb2 == xb1-1 && yb2 == yb1) || (xb2 == xb1+1 && yb2 == yb1) ||
      //  über dem Button                 unter dem Button
         (yb2 == yb1-1 && xb2 == xb1) || (yb2 == yb1+1 && xb2 == xb1)) {

         Button bt1 = buttons[xb1][yb1];
         Button bt2 = buttons[xb2][yb2];
         buttons[xb2][yb2] = bt1;
         buttons[xb1][yb1] = bt2;
         drawButtons();
      }
   }

   private void drawButtons() {
      numbersPanel.removeAll();

      for(int i = 0; i < size; i++) {
         for(int j = 0; j < size; j++) {
            numbersPanel.add(buttons[i][j]);
         }
      }

      validate();
      setMovesCounter();
   }

   private void setMovesCounter() {
      l_moves.setText("Züge: "+Integer.toString(movesCounter++));
   }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben