
Originariamente inviata da
Chiara88d
Ciao a tutti, premesso che ho sufficienti conoscenze di Java, avrei bisogno di qualche informazione.
Vorrei creare un puzzle game in Java tipo questo che pero' è sviluppato in Jquery:
http://demo.web3designs.com/creating...th-jquery.html
Lato Java la mia difficolta è gestire lo spostamento delle caselle,quali classi e metodi devono essere utilizzati?
Grazie per l'aiuto

Ciao, questo è funzionante al 100%... Metti i 3 file nella stessa cartella, compilali e esegui Main.java.
Usalo per dare un occhiata alle classi e capire come funziona il tutto.
codice:
public class Case {
public static final int EMPTY = 1;
public static final int FULL = 2;
public static final int BORDER = 3;
private int id;
private int state;
public Case(int id) {
this.id = id;
}
public void setId(int i) {
this.id = i;
}
public void setState(int state) {
this.state = state;
}
public int getState() {
return this.state;
}
public int getId() {
return this.id;
}
}
codice:
public class Grid {
int lignes;
int colones;
Case[][] cases;
public Grid(int l, int c) {
lignes = l;
colones = c;
cases = new Case[l + 2][c + 2];
for (int i = 0, k = 1; i < lignes + 2; i++) {
for (int j = 0; j < colones + 2; j++) {
cases[i][j] = new Case(k);
cases[i][j].setState(Case.FULL);
if (i == 0 || j == 0 || i == lignes + 1 || j == colones + 1) {
cases[i][j].setState(Case.BORDER);
cases[i][j].setId(-1);
} else {
k++;
}
}
}
cases[lignes][colones].setState(Case.EMPTY);
start();
}
public void start() {
int n = 1;
while (n < 1000) {
randomize();
n++;
}
}
public Case getCase(int i, int j) {
return cases[i + 1][j + 1];
}
private void randomize() {
Case[] m = movables();
int c = 0;
for (int i = 0; i < 4; i++) {
if (m[i] != null) {
c++;
}
}
int r = (int) (Math.random() * c + 1);
int[] t = getCorFromId(m[r - 1].getId());
move(t[0], t[1], false);
}
public boolean userMove(int i, int j) {
return move(i, j, true);
}
private boolean move(int i, int j, boolean user) {
int id = isMovable(i - 1, j - 1);
if (id > 0) {
int[] t = getCorFromId(id);
Case tmp;
tmp = cases[i][j];
cases[i][j] = cases[t[0]][t[1]];
cases[t[0]][t[1]] = tmp;
}
if (user) {
return hasWin();
}
return false;
}
private boolean hasWin() {
for (int i = 0, k = 1; i < lignes + 2; i++) {
for (int j = 0; j < colones + 2; j++) {
if (i == 0 || j == 0 || i == lignes + 1 || j == colones + 1) {
cases[i][j].setState(Case.BORDER);
} else {
if (cases[i][j].getId() != k) {
return false;
}
k++;
}
}
}
return true;
}
private int[] getCorFromId(int id) {
for (int i = 0; i < lignes + 2; i++) {
for (int j = 0; j < colones + 2; j++) {
if (cases[i][j].getId() == id) {
int[] t = new int[2];
t[0] = i;
t[1] = j;
return t;
}
}
}
return null;
}
private Case[] movables() {
Case[] m = new Case[4];
for (int i = 0, c = 0; i < lignes; i++) {
for (int j = 0; j < colones; j++) {
if (isMovable(i, j) > 0) {
m[c] = cases[i + 1][j + 1];
c++;
}
}
}
return m;
}
private int isMovable(int i, int j) {
i++;
j++;
if (cases[i][j].getState() == Case.FULL) {
if (cases[i + 1][j].getState() == Case.EMPTY) {
return cases[i + 1][j].getId();
}
if (cases[i - 1][j].getState() == Case.EMPTY) {
return cases[i - 1][j].getId();
}
if (cases[i][j - 1].getState() == Case.EMPTY) {
return cases[i][j - 1].getId();
}
if (cases[i][j + 1].getState() == Case.EMPTY) {
return cases[i][j + 1].getId();
}
}
return 0;
}
public void show() {
for (int i = 0; i < lignes + 2; i++) {
for (int j = 0; j < colones + 2; j++) {
if (cases[i][j].getState() != Case.BORDER) {
System.out.printf("%3d : %3d | ", cases[i][j].getId(),
cases[i][j].getState());
}
}
System.out.println("");
}
}
}
codice:
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Main extends JFrame implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
private JButton[][] cases; //This is a comment
private JPanel panel = new JPanel();
private int l, c;
Grid g;
public Main() {
l = 3;
c = 3;
cases = new JButton[l][c];
g = new Grid(l, c);
g.start();
for (int i = 0; i < l; i++) {
for (int j = 0; j < c; j++) {
cases[i][j] = new JButton(String.valueOf(g.getCase(i, j)
.getId()));
if (g.getCase(i, j).getState() == Case.EMPTY) {
cases[i][j].setText("");
}
panel.add(cases[i][j]);
cases[i][j].addActionListener(this);
}
}
panel.setLayout(new GridLayout(l, c));
this.setContentPane(panel);
this.setVisible(true);
this.setSize(400, 400);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String args[]) {
Main m = new Main();
}
@Override
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < l; i++) {
for (int j = 0; j < c; j++) {
if (e.getSource() == cases[i][j]) {
if (g.userMove(i + 1, j + 1)) {
System.out.println("Won");
}
for (int m = 0; m < l; m++) {
for (int n = 0; n < c; n++) {
cases[m][n].setText(String.valueOf(g.getCase(m, n)
.getId()));
if (g.getCase(m, n).getState() == Case.EMPTY) {
cases[m][n].setText("");
}
}
}
}
}
}
}
}