Hello. I am almost finished this game, but there is a mistake relating to the "Null Pointer Exception Error". I want the food to disappear when the turtle touches it, but the program just stops running and this shows up:
java.lang.NullPointerException
at Turtle.moreScore(Turtle.java:188)
at Turtle.intersectingObjects(Turtle.java:156)
at Turtle.act(Turtle.java:46)
at greenfoot.core.Simulation.actActor(Simulation.java:594)
at greenfoot.core.Simulation.runOneLoop(Simulation.java:552)
at greenfoot.core.Simulation.runContent(Simulation.java:215)
at greenfoot.core.Simulation.run(Simulation.java:205)
Here is the code for the Turtle class:
Any help would be appreciated. Thank you.
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
public class Turtle extends Actor
{
protected final int NORTH = 270;
protected final int EAST = 0;
protected final int SOUTH = 90;
protected final int WEST = 180;
private int SPEED = 2;
private boolean firing=false;
private Scoreboard myScore;
private Scoreboard myLives;
protected final static int OFFSET = 23;
private int absY=736-2*OFFSET;
private int dy=0;
private int value = 1;
//make a dy and an absdy integer and when dy = absdy make canmove=false
public Turtle(Scoreboard score, Scoreboard lives)
{
super();
getImage().scale(46,46);
myScore = score;
myLives = lives;
setRotation(SOUTH);
}
public void explode()
{
Greenfoot.playSound("Explosion.wav");
}
public void act()
{
checkKeys();
nearEdge();
isFacingWall();
isFacingEdge();
intersectingObjects();
}
public boolean isMovingSouth()
{
if(Greenfoot.isKeyDown("down")==true)
{
return true;
} else {
return false;
}
}
public void nearEdge()
{
MyWorld lol = (MyWorld)getWorld();
if(getRotation()==SOUTH && getY()==getWorld().getHeight()-OFFSET && isMovingSouth()==true && isFacingWall()==false && dy<absY){
lol.moveBackground(0, value);
dy=dy+1;
}
}
public void checkKeys()
{
if(Greenfoot.isKeyDown("up")){
setRotation(NORTH);
if(canMove()==true){
move(SPEED);
dy=dy-SPEED;
}
}
if(Greenfoot.isKeyDown("down")){
setRotation(SOUTH);
if(canMove()==true){
move(SPEED);
dy=dy+SPEED;
}
}
if(Greenfoot.isKeyDown("left")){
setRotation(WEST);
if(canMove()==true){
move(SPEED);
}
}
if(Greenfoot.isKeyDown("right")){
setRotation(EAST);
if(canMove()==true){
move(SPEED);
}
}
if(getRotation()==SOUTH){
if(Greenfoot.isKeyDown("space")){
if( firing==false){
getWorld().addObject(new Bullet(), getX(), getY());
Greenfoot.playSound("EnergyGun.wav");
firing=true;
}
}
if(!Greenfoot.isKeyDown("space")){
firing=false;
}
}
}
public Scoreboard getScoreboard()
{
return myScore;
}
public Scoreboard getScoreboard2()
{
return myLives;
}
public void intersectingObjects()
{
Actor ra = getOneIntersectingObject(RedApple.class);
if(ra!=null){
moreScore();
getWorld().removeObject(ra);
}
Actor ga = getOneIntersectingObject(GreenApple.class);
if(ga!=null){
moreScore();
getWorld().removeObject(ga);
}
Actor ba = getOneIntersectingObject(Bananas.class);
if(ba!=null){
moreScore();
getWorld().removeObject(ba);
}
Actor br = getOneIntersectingObject(Bread.class);
if(br!=null){
moreScore();
getWorld().removeObject(br);
}
Actor sn = getOneIntersectingObject(Snake.class);
if(sn!=null){
lessLives();
getWorld().removeObject(sn);
}
Actor pe = getOneIntersectingObject(Pelican.class);
if(pe!=null){
lessLives();
getWorld().removeObject(pe);
}
}
public void lessLives()
{
myLives.changeScore(-1);
if(myLives.getScore()==0){
getWorld().addObject(new YouLose(), getWorld().getWidth()/2, getWorld().getHeight()/2);
Greenfoot.stop();
}
}
public void moreScore()
{
myScore.changeScore(50);
if(myScore.getScore()==200){
getWorld().addObject(new YouWin(), getWorld().getWidth()/2, getWorld().getHeight()/2);
Greenfoot.stop();
}
}
public boolean isFacingWall()
{
int xOffset=0, yOffset=0;
switch(getRotation()){
case EAST: xOffset=OFFSET; break;
case SOUTH: yOffset=OFFSET; break;
case WEST: xOffset=-OFFSET; break;
case NORTH: yOffset=-OFFSET; break;
}
return getOneObjectAtOffset(xOffset, yOffset, ScrollingActor.class)!=null;
}
public boolean isFacingEdge()
{
switch(getRotation()){
case EAST: return getX()>=getWorld().getWidth()-OFFSET;
case SOUTH: return getY()>=getWorld().getHeight()-OFFSET;
case WEST: return getX()<=OFFSET;
case NORTH: return getY()<=OFFSET;
}
return false;
}
public boolean canMove()
{
return !(isFacingWall() || isFacingEdge());
}
}


