Puzzle

  • Themenstarter Themenstarter javalover
  • Beginndatum Beginndatum
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
 
danke genau ist es
findet man irgendwas mit Quelltext ? :wink:
ich habe bissl gegoogelt aber leider net fündig geworden. :roll:
 
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.

Neue Themen


Zurück
Oben