mirror of
https://github.com/inf112-v20/Fiasko.git
synced 2025-01-31 23:29:36 +01:00
Fikser en potensiell evig løkke når transportbånd blir sjekket
Stopper rekursive kall om dybden er større enn åtte, siden dette bare skjer dersom roboter går i ring
This commit is contained in:
parent
256edc871f
commit
417fa6865c
@ -212,12 +212,17 @@ public class Board {
|
||||
/**
|
||||
* Checks whether a given conveyor belt is able to move in its direction
|
||||
* @param conveyorBelt The conveyor belt to move
|
||||
* @param iterations The number of recursive calls already executed
|
||||
* @return True if nothing is blocking its movement
|
||||
*/
|
||||
public boolean conveyorBeltCanMove(BoardElementContainer<Tile> conveyorBelt) {
|
||||
public boolean conveyorBeltCanMove(BoardElementContainer<Tile> conveyorBelt, int iterations) {
|
||||
if (!isConveyorBelt(conveyorBelt.getElement())) {
|
||||
throw new IllegalArgumentException("Input to function is of invalid tile type.");
|
||||
}
|
||||
//Prevents an infinite loop if robots are in a small conveyor belt loop
|
||||
if (iterations >= 8) {
|
||||
return true;
|
||||
}
|
||||
Position conveyorBeltPosition = conveyorBelt.getPosition();
|
||||
Direction conveyorBeltDirection = conveyorBelt.getElement().getDirection();
|
||||
//Ignore conveyor belts without a robot
|
||||
@ -243,7 +248,7 @@ public class Board {
|
||||
if (!hasRobotOnPosition(positionInFront)) {
|
||||
return true;
|
||||
}
|
||||
return conveyorBeltCanMove(new BoardElementContainer<>(tileInFront, positionInFront));
|
||||
return conveyorBeltCanMove(new BoardElementContainer<>(tileInFront, positionInFront), iterations + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -309,7 +309,7 @@ public class RoboRallyGame implements IDrawableGame {
|
||||
for (BoardElementContainer<Tile> conveyorBelt : conveyorBelts) {
|
||||
Position conveyorBeltPosition = conveyorBelt.getPosition();
|
||||
Direction conveyorBeltDirection = conveyorBelt.getElement().getDirection();
|
||||
if (gameBoard.conveyorBeltCanMove(conveyorBelt) &&
|
||||
if (gameBoard.conveyorBeltCanMove(conveyorBelt, 0) &&
|
||||
gameBoard.hasRobotOnPosition(conveyorBeltPosition)) {
|
||||
updateConveyorBeltMaps(conveyorBeltPosition, conveyorBeltDirection, newPositions, moveNormally);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user