Sto provando a creare il famoso Snake in java. Ho cominciato ad impostare qualcosa,
ma come qualcuno saprà non sono molto bravo nel design delle classi.
Per la griglia ho creato un JPanel con GridLayout:
codice:
import java.awt.GridLayout;
import javax.swing.JPanel;
public class Grid extends JPanel {
private static final long serialVersionUID = 1L;
public Grid() {
setLayout(new GridLayout(25,25));
for(int i=0; i<25; i++) {
for(int j=0; j<25; j++) {
Cell cell = new Cell(i,j);
add(cell);
}
}
}
}
Poi ho creato una classe Snake contenente un ArrayList<Cell> che rappresenta
il serpente, alla quale si possono aggiungere e rimuovere celle.
Anche se credo che sia meglio una coda fifo.
Poi ho creato questa classe che rappresenta una cella:
Cell
codice:
public class Cell extends JLabel {
private static final long serialVersionUID = 1L;
private int coordX;
private int coordY;
private Color color;
private boolean isOccuped; //if is occuped by a part of the body of the snake
private boolean isSpecial; //if contains special food
private boolean isFood; //if contains normal food
public Cell(int x, int y) {
setPreferredSize(new Dimension(20,20));
setBorder(BorderFactory.createLineBorder(Color.BLACK));
setOccuped(false);
setOpaque(true);
setBackground(Color.white);
setSpecial(false);
setFood(false);
setCoordX(x);
setCoordY(y);
}
public int getCoordX() {
return coordX;
}
public int getCoordY() {
return coordY;
}
public void setCoordX(int x) {
coordX = x;
}
public void setCoordY(int y) {
coordY = y;
}
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
}
public boolean isOccuped() {
return isOccuped;
}
public void setOccuped(boolean isOccuped) {
this.isOccuped = isOccuped;
}
public boolean isSpecial() {
return isSpecial;
}
public void setSpecial(boolean isSpecial) {
this.isSpecial = isSpecial;
}
public boolean isFood() {
return isFood;
}
public void setFood(boolean isFood) {
this.isFood = isFood;
}
}
L'idea era creare un'altra classe Runnable, dove nel metodo run ogni tot secondi
(sleep(millisec)) viene fatto avanzare il serpente di una cella, e dove viene creato
il cibo in una posizione random. Siccome per ora penso che utilizzerò il pattern observer,
la domanda è come posso aggiornare la griglia? Non posso accedere alle celle
del GridLayout che io sappia.
Oppure potrei creare la classe Grid stessa come runnable?