Kreuzungs erkennung hinzugefügt.

This commit is contained in:
andreas
2014-11-07 14:15:58 +01:00
parent 91d09a9f52
commit 4cee7aaaa5
+48 -12
View File
@@ -9,6 +9,7 @@ import javax.imageio.ImageIO;
import de.heatup.cfg.Config;
import de.heatup.logging.Logger;
import de.heatup.mapengine.MapGrid;
import de.heatup.mapengine.MapGridCell;
public class Opponent extends Player {
@@ -26,6 +27,7 @@ public class Opponent extends Player {
private int prevX;
private int prevY;
private boolean blocked = false;
private boolean move = false;
private int blockedCounter = 0;
@Override protected void loadBufferedImage() {
@@ -37,17 +39,9 @@ public class Opponent extends Player {
}
@Override public void tick() {
if ( redecide ) {
while ( true ) {
this.d = (rand.nextInt(10) <= 4) ? 'x' : 'y';
this.i = (rand.nextInt(10) <= 4) ? 1 : -1;
// Sicher stellen das man nicht in die Richtung geht aus der man gekommen ist.
if ( redecide && this.d == this.prevd && this.i != this.previ ) {
this.i *= -1;
}
// Blockade Erkennung
if ( this.prevX == this.getGridLocation().x & this.prevY == this.getGridLocation().y ) {
this.blockedCounter++;
@@ -58,12 +52,46 @@ public class Opponent extends Player {
this.prevX = this.getGridLocation().x;
this.prevY = this.getGridLocation().y;
//TODO: Bei Kreuzung umentscheiden
// Kreuzung erkennen
if ( d == 'x' ) {
if ( MapGrid.getGridCell(this.getGridLocation().x, this.getGridLocation().y+1).isPath() ) {
this.move = false;
}
if ( MapGrid.getGridCell(this.getGridLocation().x, this.getGridLocation().y-1).isPath() ) {
this.move = false;
}
}
if ( d == 'y' ) {
if ( MapGrid.getGridCell(this.getGridLocation().x-1, this.getGridLocation().y).isPath() ) {
this.move = false;
}
if ( MapGrid.getGridCell(this.getGridLocation().x+1, this.getGridLocation().y).isPath() ) {
this.move = false;
}
}
// Umentscheiden oder weiter in die vorgegeben Richtung
if ( ! this.move ) {
Logger.write("Redeciding...");
this.d = (rand.nextInt(10) <= 4) ? 'x' : 'y';
this.i = (rand.nextInt(10) <= 4) ? 1 : -1;
// Sicher stellen das man nicht in die Richtung geht aus der man gekommen ist.
if ( redecide && this.d == this.prevd && this.i != this.previ ) {
this.i *= -1;
}
} else {
Logger.write("Moving...");
}
this.move = true;
// Blockade auflösen, gehe doch in die Richtung aus man gekommen ist
if ( this.blocked ) {
Logger.write("Warning: Block detected!");
this.i *= -1;
this.move = false;
this.blocked = false;
this.blockedCounter = 0;
}
@@ -86,7 +114,6 @@ public class Opponent extends Player {
animate = true;
break;
}
}
}
@@ -94,7 +121,8 @@ public class Opponent extends Player {
int newx = this.getX();
int newy = this.getY();
for (int s = 0; s < this.speedMultiplicator; s++) { // speed multiplikator
// Speed Multiplikator
for (int s = 0; s < this.speedMultiplicator; s++) {
if (d == 'x' && i == -1) {
newx = newx - 1;
} else if (d == 'x' && i == 1) {
@@ -111,13 +139,21 @@ public class Opponent extends Player {
animate = false;
break;
}
}
if (stepCounter <= 0) {
stepCounter = 25;
if ( ! MapGrid.getGridCell(newx,newy).isPath()) {
redecide = true;
animate = false;
} else {
animate = true;
}
}
}
}
}