Hi
I'm making a Pacgame, with automatic ghost movements. I tried this (see code), but there are some problems... sometimes my ghost won't go on, he stops at a wall, how can I prevent this ?
Kind regards
Nike ;)
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
/**
* Write a description of class Ghost here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Ghost extends Actor
{
boolean free = false;
int orientatie;
public Ghost(String naam)
{
setImage(naam+".png");
do{
orientatie = Greenfoot.getRandomNumber(4);
}
while(orientatie == 1);
}
public void setOrientatie(int graden) // geef een orientatie mee aan de pacman
{
orientatie = graden;
switch(orientatie)
{
case 0: // right
setRotation(0);
break;
case 1: // down
setRotation(0);
break;
case 2: // left
setRotation(0);
break;
case 3: // up
setRotation(0);
break;
}
}
public void act()
{
sides();
setOrientatie(orientatie);
if (canMove(orientatie)== true)
{
move();
}
}
private boolean canMove(int orientatie) // kijk of er geen wall in de weg staat
{
switch(orientatie)
{
case 0: // right
Actor wall = getOneObjectAtOffset(1,0, Wall.class);
if (wall == null)
{
return true;
}
else
{
return false;
}
case 1: // down
wall = getOneObjectAtOffset(0,1, Wall.class);
if (wall == null)
{
return true;
}
else
{
return false;
}
case 2: // left
wall = getOneObjectAtOffset(-1,0, Wall.class);
if (wall == null)
{
return true;
}
else
{
return false;
}
case 3: // up
wall = getOneObjectAtOffset(0,-1, Wall.class);
if (wall == null)
{
return true;
}
}
return false;
}
private boolean canTurn(int i)
{
switch (i)
{
case 0: // right
Actor wall = getOneObjectAtOffset(1, 0, Wall.class); // kijk of er een blokje rechts staat
if (wall == null)
{
return true;
}
else
{
return false;
}
case 1: // down
wall = getOneObjectAtOffset(0, 1, Wall.class); // kijk of er een blokje onderaan staat
if (wall == null)
{
return true;
}
else
{
return false;
}
case 2: // left
wall = getOneObjectAtOffset(-1, 0, Wall.class); // kijk of er een pacman links staat
if (wall == null)
{
return true;
}
else
{
return false;
}
case 3: // up
wall = getOneObjectAtOffset(0, -1, Wall.class); // kijk of er een pacman bovenaan staat
if (wall == null)
{
return true;
}
else
{
return false;
}
}
return false;
}
public void move()
{
if (Greenfoot.getRandomNumber(4) == 0 && canTurn(0)) // right
{
setOrientatie(0);
setLocation(getX()+1, getY());
}
if (Greenfoot.getRandomNumber(4) == 1 && canTurn(1)) // down
{
setOrientatie(1);
setLocation(getX(), getY()+1);
}
if (Greenfoot.getRandomNumber(4) == 2 && canTurn(2)) // left
{
setOrientatie(2);
setLocation(getX()-1, getY());
}
if (Greenfoot.getRandomNumber(4) == 3 && canTurn(3)) // up
{
setOrientatie(3);
setLocation(getX(), getY()-1);
}
}
public void sides() // nog kijken of dit OK is...
{
if (getX()==0 && getY()==9)
{
setLocation(24,9);
}
if (getX()==24 && getY()==9)
{
setLocation(0,9);
}
}
}

