"Exception in thread "main" java.lang.NullPointerException
at juegosnake.Fruta.nuevaFruta(Fruta.java:24)
at juegosnake.JuegoSnake.inicializarObjetos(JuegoSnak e.java:49)
at juegosnake.JuegoSnake.<init>(JuegoSnake.java:34)
at juegosnake.JuegoSnake.main(JuegoSnake.java:22)"
La clase Snake
Cita:
La clase frutapackage juegosnake;
// Graficos
import java.awt.*;
// Array
import java.util.ArrayList;
public class Snake {
// Declaramos el Array de puntos y las variables X e Y de direccion de la serpiente
private ArrayList<Point> cuerpo = new ArrayList<Point>();
private int snakeY = 0;
private int snakeX = 0;
// La posicion incial, constructor
public Snake() {
cuerpo.add(new Point(20,15));
}
// Acceder a el cuerpo desde fuera de la clase
public ArrayList<Point> getCuerpo() {
return cuerpo;
}
// Ir dibukando la serpiente
public void dibujandoSnake(Graphics g) {
for (int i = 0; i < cuerpo.size(); i++) {
g.setColor(Color.black);
Point p = cuerpo.get(i);
g.fillRect(p.x*20, p.y*20, 20, 20);
}
}
// Para moverla
public void moviendoSnake() {
for(int i = cuerpo.size()-1; i <0; i--) {
cuerpo.get(i).setLocation(cuerpo.get(i-1));
// Empieza desde atrás y va copiando el punto en la siguiente posicion
}
cuerpo.get(0).x += snakeX;
cuerpo.get(0).y += snakeY;
}
//Crecimiento: Añadir un nuevo punto al array
public void crecerSnake() {
cuerpo.add(new Point());
}
// Valores de X e Y segund la direccion
public void direccion(String d) {
switch(d) {
case "arriba":
snakeX = 0;
snakeY = -1;
break;
case "abajo":
snakeX = 0;
snakeY = -1;
break;
case "izquierda":
snakeX = -1;
snakeY = 0;
break;
case "derecha":
snakeX = -1;
snakeY = 0;
break;
}
}
}
// Graficos
import java.awt.*;
// Array
import java.util.ArrayList;
public class Snake {
// Declaramos el Array de puntos y las variables X e Y de direccion de la serpiente
private ArrayList<Point> cuerpo = new ArrayList<Point>();
private int snakeY = 0;
private int snakeX = 0;
// La posicion incial, constructor
public Snake() {
cuerpo.add(new Point(20,15));
}
// Acceder a el cuerpo desde fuera de la clase
public ArrayList<Point> getCuerpo() {
return cuerpo;
}
// Ir dibukando la serpiente
public void dibujandoSnake(Graphics g) {
for (int i = 0; i < cuerpo.size(); i++) {
g.setColor(Color.black);
Point p = cuerpo.get(i);
g.fillRect(p.x*20, p.y*20, 20, 20);
}
}
// Para moverla
public void moviendoSnake() {
for(int i = cuerpo.size()-1; i <0; i--) {
cuerpo.get(i).setLocation(cuerpo.get(i-1));
// Empieza desde atrás y va copiando el punto en la siguiente posicion
}
cuerpo.get(0).x += snakeX;
cuerpo.get(0).y += snakeY;
}
//Crecimiento: Añadir un nuevo punto al array
public void crecerSnake() {
cuerpo.add(new Point());
}
// Valores de X e Y segund la direccion
public void direccion(String d) {
switch(d) {
case "arriba":
snakeX = 0;
snakeY = -1;
break;
case "abajo":
snakeX = 0;
snakeY = -1;
break;
case "izquierda":
snakeX = -1;
snakeY = 0;
break;
case "derecha":
snakeX = -1;
snakeY = 0;
break;
}
}
}
Cita:
La clase mainpackage juegosnake;
import java.awt.*;
import java.util.Random;
public class Fruta {
// Variables: Un numero aleatorio y el punto que será la furta
private Random random;
private Point fruta;
// Constructor
public void Fruta() {
random = new Random();
fruta = new Point();
}
// Crear una fruta
public void nuevaFruta() {
fruta.x = random.nextInt(39);
fruta.y = random.nextInt(28) + 1;
}
// Dibujar la fruta
public void dibujarFruta(Graphics g) {
g.setColor(Color.red);
g.fillOval(fruta.x*20, fruta.y*20, 20, 20);
}
// Acceder a fruta desde fuera
public Point getFrua() {
return fruta;
}
}
import java.awt.*;
import java.util.Random;
public class Fruta {
// Variables: Un numero aleatorio y el punto que será la furta
private Random random;
private Point fruta;
// Constructor
public void Fruta() {
random = new Random();
fruta = new Point();
}
// Crear una fruta
public void nuevaFruta() {
fruta.x = random.nextInt(39);
fruta.y = random.nextInt(28) + 1;
}
// Dibujar la fruta
public void dibujarFruta(Graphics g) {
g.setColor(Color.red);
g.fillOval(fruta.x*20, fruta.y*20, 20, 20);
}
// Acceder a fruta desde fuera
public Point getFrua() {
return fruta;
}
}
Cita:
package juegosnake;
import java.awt.*;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.awt.image.BufferStrategy;
import javax.swing.JFrame;
public final class JuegoSnake extends JFrame implements KeyListener {
private final int ventanaWidth = 800;
private final int ventanaHeight = 600;
private Snake snake;
private Fruta fruta;
private int puntuacion;
private long goal;
private final int tiempo = 40;
// Iniciamos el juego
public static void main(String[] args) {
new JuegoSnake();
}
public JuegoSnake() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
this.setSize(ventanaWidth, ventanaHeight);
this.setResizable(false);
this.setLocation(100, 100);
this.setVisible(true);
this.createBufferStrategy(2);
this.addKeyListener(this);
inicializarObjetos();
while(true) {
juego();
stop();
}
}
// Creo la fruta y la serpiente y inicializo los puntos a 0
public void inicializarObjetos() {
snake = new Snake();
snake.crecerSnake();
fruta = new Fruta();
fruta.nuevaFruta();
puntuacion = 0;
}
// Iniciamos el juego
public void juego() {
snake.moviendoSnake();
comprobarColision();
dibujarPantalla();
}
// Creamos la pantalla
public void dibujarPantalla() {
BufferStrategy buffer = this.getBufferStrategy();
Graphics g = null;
try {
g = buffer.getDrawGraphics();
g.setColor(Color.black);
g.fillRect(0, 0, ventanaWidth, ventanaHeight);
fruta.dibujarFruta(g);
snake.dibujandoSnake(g);
mostrarPuntos(g);
} finally {
g.dispose();
}
buffer.show();
Toolkit.getDefaultToolkit().sync();
}
// Creamos la funcion que comprueba si chocamos con una fruta o paredes
private void comprobarColision() {
// Si choca con la fruta
if (snake.getCuerpo().get(0).equals(fruta.getFrua())) {
fruta.nuevaFruta();
snake.crecerSnake();
puntuacion += 10;
}
// Si choca las paredes
if (snake.getCuerpo().get(0).x < 0 || snake.getCuerpo().get(0).x > 39
|| snake.getCuerpo().get(0).y < 1 || snake.getCuerpo().get(0).y > 29) {
inicializarObjetos();
System.out.println("Has perdidos");
}
// Si choca consigo misma
if (snake.getCuerpo().get(0).equals(snake.getCuerpo() .get(0)) && snake.getCuerpo().size() > 2){
inicializarObjetos();
System.out.println("Has perdido");
}
}
// Mostrar los puntos que llevamos
public void mostrarPuntos(Graphics g) {
g.setColor(Color.WHITE);
g.setFont(new Font("Arial", Font.BOLD, 18));
g.drawString("Puntuación", 20, 50);
}
public void stop() {
goal = (System.currentTimeMillis() + tiempo);
while(System.currentTimeMillis() < goal) {
}
}
@Override
public void keyPressed(KeyEvent e) {
int tecla = e.getKeyCode();
switch (tecla) {
case KeyEvent.VK_UP:
snake.direccion("arriba");
break;
case KeyEvent.VK_DOWN:
snake.direccion("abajo");
break;
case KeyEvent.VK_LEFT:
snake.direccion("izquierda");
break;
case KeyEvent.VK_RIGHT:
snake.direccion("derecha");
break;
case KeyEvent.VK_E:
System.exit(0);
}
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyTyped(KeyEvent e) {
}
}
import java.awt.*;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.awt.image.BufferStrategy;
import javax.swing.JFrame;
public final class JuegoSnake extends JFrame implements KeyListener {
private final int ventanaWidth = 800;
private final int ventanaHeight = 600;
private Snake snake;
private Fruta fruta;
private int puntuacion;
private long goal;
private final int tiempo = 40;
// Iniciamos el juego
public static void main(String[] args) {
new JuegoSnake();
}
public JuegoSnake() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
this.setSize(ventanaWidth, ventanaHeight);
this.setResizable(false);
this.setLocation(100, 100);
this.setVisible(true);
this.createBufferStrategy(2);
this.addKeyListener(this);
inicializarObjetos();
while(true) {
juego();
stop();
}
}
// Creo la fruta y la serpiente y inicializo los puntos a 0
public void inicializarObjetos() {
snake = new Snake();
snake.crecerSnake();
fruta = new Fruta();
fruta.nuevaFruta();
puntuacion = 0;
}
// Iniciamos el juego
public void juego() {
snake.moviendoSnake();
comprobarColision();
dibujarPantalla();
}
// Creamos la pantalla
public void dibujarPantalla() {
BufferStrategy buffer = this.getBufferStrategy();
Graphics g = null;
try {
g = buffer.getDrawGraphics();
g.setColor(Color.black);
g.fillRect(0, 0, ventanaWidth, ventanaHeight);
fruta.dibujarFruta(g);
snake.dibujandoSnake(g);
mostrarPuntos(g);
} finally {
g.dispose();
}
buffer.show();
Toolkit.getDefaultToolkit().sync();
}
// Creamos la funcion que comprueba si chocamos con una fruta o paredes
private void comprobarColision() {
// Si choca con la fruta
if (snake.getCuerpo().get(0).equals(fruta.getFrua())) {
fruta.nuevaFruta();
snake.crecerSnake();
puntuacion += 10;
}
// Si choca las paredes
if (snake.getCuerpo().get(0).x < 0 || snake.getCuerpo().get(0).x > 39
|| snake.getCuerpo().get(0).y < 1 || snake.getCuerpo().get(0).y > 29) {
inicializarObjetos();
System.out.println("Has perdidos");
}
// Si choca consigo misma
if (snake.getCuerpo().get(0).equals(snake.getCuerpo() .get(0)) && snake.getCuerpo().size() > 2){
inicializarObjetos();
System.out.println("Has perdido");
}
}
// Mostrar los puntos que llevamos
public void mostrarPuntos(Graphics g) {
g.setColor(Color.WHITE);
g.setFont(new Font("Arial", Font.BOLD, 18));
g.drawString("Puntuación", 20, 50);
}
public void stop() {
goal = (System.currentTimeMillis() + tiempo);
while(System.currentTimeMillis() < goal) {
}
}
@Override
public void keyPressed(KeyEvent e) {
int tecla = e.getKeyCode();
switch (tecla) {
case KeyEvent.VK_UP:
snake.direccion("arriba");
break;
case KeyEvent.VK_DOWN:
snake.direccion("abajo");
break;
case KeyEvent.VK_LEFT:
snake.direccion("izquierda");
break;
case KeyEvent.VK_RIGHT:
snake.direccion("derecha");
break;
case KeyEvent.VK_E:
System.exit(0);
}
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyTyped(KeyEvent e) {
}
}