Classe Menu
[code]public class Jogo extends JFrame implements ActionListener
{
String nomeJogador;
int largura;
int altura;
Ranking ranking;
JButton novoJogo;
JButton abrirJogo;
JButton configuracoes;
public Jogo()
{
super("Jogo da Snake");
setTitle("Snake em Java");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocation(200, 200);
setSize(200, 200);
setLayout(new FlowLayout());
ranking = new Ranking("default", 0);
novoJogo = new JButton("Novo Jogo");
abrirJogo = new JButton("Abrir Jogo");
configuracoes = new JButton("Configurações");
novoJogo.addActionListener(this);
abrirJogo.addActionListener(this);
configuracoes.addActionListener(this);
add("Center", novoJogo);
add("Center", abrirJogo);
add("Center", configuracoes);
mostrar(false);
//new Snake(10, 10, "Pedro", this);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == novoJogo)
{
//criaNovoJogo();
mostrar(true);
}
if(e.getSource() == abrirJogo)
{
}
if(e.getSource() == configuracoes)
{
janelaC();
}
}
public void janelaC()
{
new JanelaConfiguracoes(this);
}
public void criaNovoJogo()
{
setVisible(false);
new Snake(largura, altura, nomeJogador, this);
}
public void mostrar(boolean mostraTerreno)
{
if(mostraTerreno)
{
this.setVisible(false);
new Snake(10, 10, "Pedro", this);
}
else
{
this.setVisible(true);
}
}
public void setNomeJogador(String nome)
{
nomeJogador = nome;
}
public void setLargura(int larg)
{
largura = larg;
}
public void setAltura(int alt)
{
altura = alt;
}
public void adicionaPontuacao(String nomeJogador, int pontos)
{
ranking.inserirPontuacao(nomeJogador, pontos);
}
}
[/code]
Classe Interface
[code]public class Interface extends JFrame implements KeyListener, java.io.Serializable
{
private static final Color EMPTY_COLOR = Color.white;
private static final Color COR_COBRA = Color.blue;
private static final Color COR_MANGUSTO = Color.red;
private static final Color COR_ESCARAVELHO = Color.gray;
private static final Color COR_OVO = Color.green;
private final int GRID_VIEW_SCALING_FACTOR = 20;
private FieldView fieldView;
private Snake associatedSnake;
private int height;
private int width;
private boolean paused = false;
/**
* Create a view of the given width and height.
*/
public Interface(Snake associatedGame)
{
setTitle(“Snake em Java”);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocation(100, 50);
fieldView = new FieldView(associatedGame.getTerreno().getAltura(), associatedGame.getTerreno().getLargura());
this.associatedSnake = associatedGame;
this.height = associatedGame.getTerreno().getAltura();
this.width = associatedGame.getTerreno().getLargura();
addKeyListener(this);
Container contents = getContentPane();
contents.add(fieldView, BorderLayout.CENTER);
pack();
}
public void desenhaTerreno()
{
Terreno terreno = associatedSnake.getTerreno();
Posicao[][] posicoes = terreno.getPosicoes();
limpa();
fieldView.preparePaint();
for(int row = 0; row < height; row++) {
for(int col = 0; col < width; col++) {
if(posicoes[row][col].getEnte() != null)
{
if(posicoes[row][col].getEnte().getTipoEnte().equals("COBRA"))
{
fieldView.drawMark(col, row, COR_COBRA);
}
else
{
if(posicoes[row][col].getEnte().getTipoEnte().equals("MANGUSTO"))
{
fieldView.drawMark(col, row, COR_MANGUSTO);
}
else
{
if(posicoes[row][col].getEnte().getTipoEnte().equals("ESCARAVELHO"))
{
fieldView.drawMark(col, row, COR_ESCARAVELHO);
}
else
{
if(posicoes[row][col].getEnte().getTipoEnte().substring(0, 3).equals("OVO"))
{
fieldView.drawMark(col, row, COR_OVO);
}
else
{
}
}
}
}
}
}
}
fieldView.drawString("Pontos: " + associatedSnake.getPontos(), GRID_VIEW_SCALING_FACTOR, GRID_VIEW_SCALING_FACTOR);
if(paused)
{
fieldView.drawString("GAME PAUSED", GRID_VIEW_SCALING_FACTOR, GRID_VIEW_SCALING_FACTOR * 2);
}
fieldView.repaint();
}
public void limpa()
{
fieldView.preparePaint();
for(int row = 0; row < height; row++) {
for(int col = 0; col < width; col++) {
fieldView.drawMark(col, row, EMPTY_COLOR);
}
}
fieldView.repaint();
}
public void ver()
{
setVisible(true);
}
private class FieldView extends JPanel implements ImageObserver
{
//private final int GRID_VIEW_SCALING_FACTOR = 20;
private int gridWidth, gridHeight;
private int xScale, yScale;
Dimension size;
private Graphics g;
private Image fieldImage;
/**
* Create a new FieldView component.
*/
public FieldView(int height, int width)
{
gridHeight = height;
gridWidth = width;
size = new Dimension(0, 0);
}
/**
* Tell the GUI manager how big we would like to be.
*/
public Dimension getPreferredSize()
{
return new Dimension(gridWidth * GRID_VIEW_SCALING_FACTOR,
gridHeight * GRID_VIEW_SCALING_FACTOR);
}
/**
* Prepare for a new round of painting. Since the component
* may be resized, compute the scaling factor again.
*/
public void preparePaint()
{
if(! size.equals(getSize())) { // if the size has changed...
size = getSize();
fieldImage = fieldView.createImage(size.width, size.height);
g = fieldImage.getGraphics();
xScale = size.width / gridWidth;
if(xScale < 1) {
xScale = GRID_VIEW_SCALING_FACTOR;
}
yScale = size.height / gridHeight;
if(yScale < 1) {
yScale = GRID_VIEW_SCALING_FACTOR;
}
}
}
/**
* Paint on grid location on this field in a given color.
*/
public void drawMark(int x, int y, Color color)
{
g.setColor(color);
g.fillRect(x * xScale, y * yScale, xScale-1, yScale-1);
}
public void drawImage(Image image, int x, int y)
{
g.setColor(Color.black);
g.drawImage(image, x * xScale, y * yScale, null);
}
public void drawString(String string, int x, int y)
{
g.setColor(Color.black);
g.drawString(string, x, y);
}
/**
* The field view component needs to be redisplayed. Copy the
* internal image to screen.
*/
public void paintComponent(Graphics g)
{
if(fieldImage != null) {
g.drawImage(fieldImage, 0, 0, null);
}
}
}
public void keyPressed(KeyEvent e)
{
if(e.getKeyText(e.getKeyCode()).equals("Up"))
{
associatedSnake.defineDireccao("up");
}
if(e.getKeyText(e.getKeyCode()).equals("Down"))
{
associatedSnake.defineDireccao("down");
}
if(e.getKeyText(e.getKeyCode()).equals("Left"))
{
associatedSnake.defineDireccao("left");
}
if(e.getKeyText(e.getKeyCode()).equals("Right"))
{
associatedSnake.defineDireccao("right");
}
if(e.getKeyText(e.getKeyCode()).equals("P"))
{
if(associatedSnake.getOK())
{
associatedSnake.setNotOK();
paused = true;
}
else
{
associatedSnake.setOK();
paused = false;
}
}
if(e.getKeyText(e.getKeyCode()).equals("S"))
{
if(associatedSnake.getOK())
{
associatedSnake.setNotOK();
paused = true;
}
associatedSnake.guardaPontuacao();
associatedSnake.saveTobinary();
}
if(e.getKeyText(e.getKeyCode()).equals("O"))
{
if(associatedSnake.getOK())
{
associatedSnake.setNotOK();
paused = true;
}
associatedSnake.loadFromBinary();
}
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
}
[/code]