boolean blocked = false;
int fromRow = move.getFromRow();
int fromCol = move.getFromCol();
BlockadeBoardPosition start = board.getPosition(fromRow, fromCol);
BlockadeBoardPosition west = start.getNeighbor(Direction.WEST, board);
BlockadeBoardPosition north = start.getNeighbor(Direction.NORTH, board);
BlockadeBoardPosition south, east;
switch (move.getDirection()) {
case NORTH_NORTH :
BlockadeBoardPosition northNorth = start.getNeighbor(Direction.NORTH_NORTH, board);
if (northNorth.isSouthBlocked()) blocked = true;
case NORTH :
if (north.isSouthBlocked()) blocked = true;
break;
case WEST_WEST :
BlockadeBoardPosition westWest = start.getNeighbor(Direction.WEST_WEST, board);
if (westWest.isEastBlocked()) blocked = true;
case WEST :
if (west.isEastBlocked()) blocked = true;
break;
case EAST_EAST :
east = start.getNeighbor(Direction.EAST, board);
if (east.isEastBlocked()) blocked = true;
case EAST :
if (start.isEastBlocked()) blocked = true;
break;
case SOUTH_SOUTH :
south = start.getNeighbor(Direction.SOUTH, board);
if (south.isSouthBlocked()) blocked = true;
case SOUTH :
if (start.isSouthBlocked()) blocked = true;
break;
case NORTH_WEST :
BlockadeBoardPosition northWest = start.getNeighbor(Direction.NORTH_WEST, board);
if (!((west.isEastOpen() && northWest.isSouthOpen()) ||
(north.isSouthOpen() && northWest.isEastOpen()) ) ) {
blocked = true;
}
break;
case NORTH_EAST :
BlockadeBoardPosition northEast = start.getNeighbor(Direction.NORTH_EAST, board);
if (!((start.isEastOpen() && northEast.isSouthOpen()) ||
(north.isSouthOpen() && north.isEastOpen()) ) ) {
blocked = true;
}
break;
case SOUTH_WEST :
BlockadeBoardPosition southWest = start.getNeighbor(Direction.SOUTH_WEST, board);
if (!((west.isEastOpen() && west.isSouthOpen()) ||
(start.isSouthOpen() && southWest.isEastOpen()) ) ) {
blocked = true;
}
break;
case SOUTH_EAST :
south = start.getNeighbor(Direction.SOUTH, board);