Null pointer exeption?
in
Programming Questions
•
1 years ago
Hello!
Im making a game for a work on my college, but i got an error.
The game is working good till lvl 3 and kill the boss,and then when u win, and press any key to restart the game, the game restarts ok.... but when you kill the last lvl 1 enemy, it says (null pointer exeption here : enemigo4[i].dibujar();
What is happening? i cant find the error...
Source code: http://www.mediafire.com/?ct3372ahefmxglc
Code CopyPasted:
i think the problem is logical,,, about lvls (niveles) or something...
my english is not good, im sorry im argentinian.
Im making a game for a work on my college, but i got an error.
The game is working good till lvl 3 and kill the boss,and then when u win, and press any key to restart the game, the game restarts ok.... but when you kill the last lvl 1 enemy, it says (null pointer exeption here : enemigo4[i].dibujar();
What is happening? i cant find the error...
Source code: http://www.mediafire.com/?ct3372ahefmxglc
Code CopyPasted:
- // OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
// OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
// OOOOOOOOO0000000000000TANKLAND00000000OOOOOOOOOOOO
// OOOOOOOOOOOOOOOTANKLANDOOOOOOOOOOOOOOOOOOOOOOOOO00
// OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
// OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
// OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
Enemigos enemigo1[], enemigo2[], enemigo3[],enemigo4[], enemigo6[], enemigo5[];
Arma arma1;
Bala bala;
Jefe jefe;
int puntos;
int cantidad = 8;
int cantidad2 = 8;
int contador = 1;
int tamArma = 50;
float posx=400;
float posy=525;
float posbx;
float posjx,posjy;
boolean disparada = false;
float posby;
float choque;
int enemigosrestantes,enemigosrestantes2;
void setup (){
smooth ();
size (800,600);
// se define la cantidad de enemigos
bala = new Bala (posbx,posby);
arma1 = new Arma (posx, tamArma);
enemigo1 = new Enemigos[ cantidad ];
enemigo2 = new Enemigos[ cantidad ];
enemigo3 = new Enemigos[ cantidad ];
enemigo4 = new Enemigos[ cantidad2 ];
enemigo5 = new Enemigos[ cantidad2 ];
enemigo6 = new Enemigos[ cantidad2 ];
jefe = new Jefe(50,60);
for ( int i=0 ; i<cantidad ; i++ ) {
if (nivel == 1){
enemigo1[i] = new Enemigos ( i*90+90, -125);
enemigo2[i] = new Enemigos ( i*90+90, -425);
enemigo3[i] = new Enemigos ( i*90+90, -700);
}
if (nivel == 2){
enemigo4[i] = new Enemigos ( i*90+90, -100);
enemigo5[i] = new Enemigos ( i*90+90, -300);
enemigo6[i] = new Enemigos ( i*90+90, -600);
}
}
enemigosrestantes = cantidad*3;
enemigosrestantes2 = cantidad2*3;
}
void draw (){
escenario ();
// SE EJECUTAN LOS DISPAROS
// si llega arriba , la bala vuelve al cañon
if (posby <= 0){
disparada = false;
}
if (disparada == false){
bala.balaquieta();
}else {
bala.dispararbala();
}
// -----------SE TERMINA LA EJECUCION DE DISPAROS
// SE DIBUJAN LAS BALAS Y ARMAS
bala.dibujarbala();
arma1.dibujararma();
arma1.moverarma();
if (nivel == 3){
jefe.dibujarjefe();
jefe.mover();
lastimarjefe();
contadoresjefe();
}
// SE CREAN LOS ENEMIGOS y se pregunta si esta vivo o no para matarlo
for ( int i=0 ; i<cantidad ; i++ ) {
if (nivel == 1){
enemigo1[i].dibujar();
enemigo1[i].mover();
enemigo2[i].dibujar();
enemigo2[i].mover();
enemigo3[i].dibujar();
enemigo3[i].mover();
}
if (nivel == 2){
enemigo4[i].dibujar();
enemigo4[i].mover();
enemigo5[i].dibujar();
enemigo5[i].mover();
enemigo6[i].dibujar();
enemigo6[i].mover();
}
// CIERRE DE CREACION DE ENEMIGOS
// SE DEFINE CUNADO MUERE UN ENEMIGO (Distancia de bala del enemigo)
if (nivel == 1){
if ((dist (enemigo1[i].x,enemigo1[i].y,posbx,posby)<35) && (enemigo1[i].vivo == true)){
enemigo1[i].matar();
disparada = false;
puntos++;
enemigosrestantes--;
}
if ((dist (enemigo2[i].x,enemigo2[i].y,posbx,posby)<35) && (enemigo2[i].vivo == true)){
enemigo2[i].matar();
disparada = false;
puntos++;
enemigosrestantes--;
}
if ((dist (enemigo3[i].x,enemigo3[i].y,posbx,posby)<35) && (enemigo3[i].vivo == true)){
enemigo3[i].matar();
disparada = false;
puntos++;
enemigosrestantes--;
}
}
//// SE DEFINE CUANDO MUERE UN ENEMIGO NIVEL 2
if (nivel == 2){
if ((dist (enemigo4[i].x,enemigo4[i].y,posbx,posby)<35) && (enemigo4[i].vivo == true) ){
enemigo4[i].matar();
disparada = false;
puntos++;
enemigosrestantes2--;
}
if ((dist (enemigo5[i].x,enemigo5[i].y,posbx,posby)<35) && (enemigo5[i].vivo == true) ){
enemigo5[i].matar();
disparada = false;
puntos++;
enemigosrestantes2--;
}
if ((dist (enemigo6[i].x,enemigo6[i].y,posbx,posby)<35) && (enemigo6[i].vivo == true)){
enemigo6[i].matar();
disparada = false;
puntos++;
enemigosrestantes2--;
}
}
// SI UN ENEMIGO SE PASA = SE PIERDE
if (nivel == 1){
if ((enemigo1[i].y >= 450) && (enemigo1[i].vivo == true)){
nivel = 20;
}
if ((enemigo2[i].y >= 450) && (enemigo2[i].vivo == true)){
nivel = 20;
}
if ((enemigo3[i].y >= 450) && (enemigo3[i].vivo == true)) {
nivel = 20;
}
}
// SI UN ENEMIGO NIVEL 2 SE PASA = SE PIERDE
if (nivel == 2){
if ((enemigo4[i].y >= 450) && (enemigo4[i].vivo == true)){
nivel = 20;
}
if ((enemigo5[i].y >= 450) && (enemigo5[i].vivo == true)){
nivel = 20;
}
if ((enemigo6[i].y >= 450) && (enemigo6[i].vivo == true)) {
nivel = 20;
}
}
// CIERRE DE MOTOR FOR DE ENEMIGOS
}
// Cierre de DRAW
}
// SUMA PUNTAJE SI ES DERRIBADO
void puntaje (){
fill(190,105,235);
textSize(20);
text("Puntos: " + puntos, width-150, height-20);
fill (255);
}
void restantes(){
fill(255,0,0);
text ("Nivel: " + nivel,35,height-40);
textSize (20);
text ("Enemigos Restantes: " + enemigosrestantes,35,height-20);
fill (255);
}
void restantes2(){
fill(200,0,100);
text ("Nivel: " + nivel,35,height-40);
textSize (20);
text ("Enemigos Restantes: " + enemigosrestantes2,35,height-20);
}
void contadoresjefe(){
fill(200,0,100);
text ("Nivel: " + nivel,35,height-40);
textSize (20);
text ("Vida del Jefe: " + vidajefe,35,height-20);
}
void lastimarjefe (){
if ((dist (jx,jy,posbx,posby)<55) && (jefevivo == true)){
jefe.daniarjefe();
disparada = false;
puntos++;
}
}
//QUE PASA SI HACEMOS LICK ?
void mousePressed (){
disparada = true;
}
void reset (){
nivel = 1;
cantidad = 8;
cantidad2 = 8;
puntos=0;
enemigosrestantes = cantidad*3;
enemigosrestantes2 = cantidad2*3;
vidajefe = 10;
for ( int i=0 ; i<cantidad ; i++ ) {
enemigo1[i].y = 0;
enemigo2[i].y = 0;
enemigo3[i].y = 0;
enemigo4[i].y = 0;
enemigo5[i].y = 0;
enemigo6[i].y = 0;
enemigo1[i].vivo = true;
enemigo2[i].vivo = true;
enemigo3[i].vivo = true;
enemigo4[i].vivo = true;
enemigo5[i].vivo = true;
enemigo6[i].vivo = true;
}
} - float posx2,posy2;
class Arma {
float tam;
Arma (float posx_,float tam_){
posx = posx_;
tam = tam_;
}
void dibujararma(){
if (nivel == 1){
fill(255);
ellipse (posx,posy,tam,tam);
strokeWeight(3);
line (posx,posy,posx,475);
}
if (nivel == 2){
fill (50,200,100);
rect (posx,posy,tam*1.4,tam*1.4);
strokeWeight (3);
line (posx,posy,posx,475);
}
if (nivel == 3){
fill (0,0,100);
rect (posx,posy,tam*1.5,tam*1.5);
strokeWeight (3);
line (posx,posy,posx,475);
}
}
void moverarma(){
if (posx <35){
posx=35;
}
if (posx >765){
posx=765;
}
if (mouseX < posx) {
posx = posx - 5;
}
if (mouseX > posx) {
posx = posx + 5;
}
}
} - class Enemigos {
float x,y;
float tam;
float velocidad;
boolean vivo = true;
float velocidad1,velocidad2;
int colorenemigo;
//constructor
Enemigos (float x_, float y_){
x = x_;
y = y_;
tam= 50;
velocidad1 = 0.4;
velocidad2 = 0.8;
velocidad = random (velocidad1,velocidad2);
}
void mover (){
y += velocidad;
}
//se dibujan los enemigos
void dibujar (){
// SE DIBUJAN LOS ENEMIGOS PARA EL NIVEL 1
if (nivel == 1){
if (vivo){
rectMode( CENTER );
fill (random (255),random (255),random (255));
rect (x,y,tam,tam);
}
}
// SE DIBUJAN LOS ENEMIGOS PARA EL NIVEL 2
if (nivel == 2){
if (vivo){
rectMode( CENTER );
fill (0,random (255),0);
rect (x,y,tam,tam);
}
}
}
void matar (){
vivo = false;
}
} - int nivel = 1;
void escenario (){
// ESCENARIO NIVEL 1
if (nivel == 1){
background (0,100,0);
camino();
puntaje();
restantes();
}
// ESCENARIO NIVEL 2
if (nivel == 2){
background (100,100,0);
puntaje();
restantes2();
}
if (nivel == 3){
background (0,0,0);
puntaje();
}
if (nivel == 10){
background (0,0,0);
textSize (50);
text ("GANASTE",width/2,height/2);
text ("Tu Puntaje: " + puntos,width/2,height/2+50);
}
// PERDISTE
if (nivel == 20){
background (0,0,0);
textSize (50);
text ("PERDISTE",width/2,height/2);
}
// CUANDO CAMBIA DE ESCENARIO ???
if (enemigosrestantes == 24){
nivel = 1;
}
if (enemigosrestantes <= 0){
nivel = 2;
}
if (enemigosrestantes2 <= 0){
nivel = 3;
}
if (vidajefe == 0){
nivel = 10;
}
if (nivel == 10){
if (keyPressed){
reset();
}
}
}
void camino(){
//CAMINO DEL MEDIO
fill (200);
rect (400,0,170,2000);
//CAMINO DEL MEDIO
} - float jx,jy,velocidadjefe;
float direccion;
int vidajefe = 10;
boolean jefevivo = true;
class Jefe {
float tamj ;
Jefe (float jx_,float jy_){
jx = jx_;
jy = jy_;
tamj = 80;
velocidadjefe = 1;
direccion = 10;
}
void dibujarjefe (){
rectMode (CENTER);
rect (jx,jy,tamj,tamj);
println (vidajefe);
}
void mover (){
jx= jx + direccion;
if (jx == width-40) {
jy += 15;
direccion = -10;
}
if (jx == 40) {
jy += 15;
direccion = 10;
}
}
void daniarjefe (){
vidajefe--;
}
} - float tambala = 10;
class Bala {
Bala (float bx_, float by_){
posbx = bx_;
posby = by_;
posby = 525;
posbx = posx;
}
void dibujarbala (){
if (nivel == 1){
ellipse (posbx,posby,tambala/2,tambala);
}
if (nivel == 2){
ellipse (posbx,posby,tambala,tambala);
}
if (nivel == 3){
ellipse (posbx,posby,tambala*2,tambala*2);
}
}
void dispararbala (){
posby = posby-16;
}
void balaquieta (){
posby = posy-50;
posbx = posx;
}
}
i think the problem is logical,,, about lvls (niveles) or something...
my english is not good, im sorry im argentinian.
1