Browse Source

Added FindPath Function to Map

remotes/origin/ghostsbehaviour
Julian 11 months ago
parent
commit
4d2044374e
  1. 100
      src/main/java/pacmanGame/Map.java

100
src/main/java/pacmanGame/Map.java

@ -128,4 +128,104 @@ public class Map {
}
}
}
public String FindPath(Vector2 from, Vector2 to)
{
char[][] tempMap = new char[size.x][size.y];
for(int x = 0; x < size.x; x++) {
for(int y = 0; y < size.y; y++) {
Vector2 pos = new Vector2(x,y);
Cell cell = GetCell(pos);
if(cell.type.equals("wall")) {
tempMap[x][y] = 'w';
}
else {
tempMap[x][y] = 'e';
}
}
}
tempMap[to.x][to.y] = 't';
String targetChars = "tudlr";
boolean done = false;
while(!done) {
int changes = 0;
for(int x = 0; x < size.x; x++) {
for(int y = 0; y < size.y; y++) {
if(tempMap[x][y] == 'e') {
Vector2 pos = new Vector2(x,y);
char newChar = 'x';
if(targetChars.indexOf(tempMap[x + 1][y]) >= 0) {
newChar = 'r';
}
else if(targetChars.indexOf(tempMap[x - 1][y]) >= 0) {
newChar = 'l';
}
else if(targetChars.indexOf(tempMap[x][y + 1]) >= 0) {
newChar = 'u';
}
else if(targetChars.indexOf(tempMap[x][y - 1]) >= 0) {
newChar = 'd';
}
if(newChar != 'x') {
tempMap[x][y] = newChar;
changes++;
if(pos.equals(from)) {
done = true;
}
}
}
}
}
if(changes == 0) {
done = true;
}
}
if(tempMap[from.x][from.y] != 'e') {
boolean reading = true;
String path = "";
Vector2 currentReadPos = from.Clone();
while(reading) {
char currentChar = tempMap[currentReadPos.x][currentReadPos.y];
if(currentReadPos.equals(to)) {
reading = false;
}
else {
path += currentChar;
if(currentChar == 'l') {
currentReadPos = currentReadPos.Add(new Vector2(-1, 0));
}
else if(currentChar == 'r') {
currentReadPos = currentReadPos.Add(new Vector2(1, 0));
}
else if(currentChar == 'u') {
currentReadPos = currentReadPos.Add(new Vector2(0, 1));
}
else if(currentChar == 'd') {
currentReadPos = currentReadPos.Add(new Vector2(0, -1));
}
}
}
return path;
}
else {
//no path was found
return "";
}
}
}
Loading…
Cancel
Save