Ok this is problem takes a little bit more effort the help solving then your standard JGO post…
But then again it might be more fun too:
So i though it would be fun to create a teaser game, called (Pac Man Bow Jr.) for the future release of my Manbow2 game. (yes, silly me…)
Thought I could do it within a couple of days, but now I finally figured things do take up a little bit more time then I can foresee.
Since I’m running into a problem with the Ghost’s AI Map Collision that I haven’t been able to solve yet I though I’d post my problem + code in the game mechanics section and hope someone can help me out.
To make it all a bit more visual i created a video:
FBAgoqn4aZQ
For some reason there are a couple of point on the map where the ghost gets stuck where it shouldnt.
I seems at those points the ghost last move before getting stuck was into a tile with the property “blocked” even though it shouldnt have.
In this example at 0:23 you can see in the console that top, right and bottom cell have been identified as blocked thus the ghost won’t move into those tiles.
The bottom tile should actually be identified as not blocked and this should be the direction for the ghost to move to but somehow in the previous step before getting stuck the ghost decided to move right into a “blocked tile” instead of towards the bottom.
Some info from the console output:
The latest direction it moved to was 2 (latest dir2). 1 being top ; 2 = right; 3= bottom ; 4 = left
And since the ghost is set to never move in the direction where it came from the opposite direction is set to blocked as standard.
Her is the code for the ghost’s class:
http://pastebin.java-gaming.org/748168e81001a
First one to figure out what went wrong should get a price or something ;p
Edit:
How i wanted the code to work:
- With every update the ghost first checks which checkWhichNeighbourTilesAreBlocked() and if a tile has the property “blocked” it sets its corresponding value (topTileBLocked, bottomTileBlocked, etc.) to true
- Tiles are 16x16
- In calculateDesiredDirection() the opposite direction of the direction the ghost moved to during the lst frame update is set to false, so ghost can never turn around
- AI works as follows:
- first the x & y vector for the distance between ghost and player are calculated
- Ghost always first tries to move towards the players direction first trying to move in the direction of the largest vector
- If the neighbouring tile for that vector is blocked it checks the other vector’s direction
- if that direction is blocked too, it moves (or should) into 1 of the 2 remaining direction that is not opposed to the previous move