74 lines
2.1 KiB
Java
74 lines
2.1 KiB
Java
package cs6601.p1;
|
|
|
|
public class TerritoryMarker {
|
|
public static final char BLACK_TERRITORY = 'x';
|
|
public static final char WHITE_TERRITORY = 'o';
|
|
public static final char UNOWNED_TERRITORY = '-';
|
|
public static final char TERRITORY_MARKER = '?';
|
|
|
|
public static final int EMPTY = 0;
|
|
public static final int BLACK = 1;
|
|
public static final int WHITE = 2;
|
|
|
|
public static GameBoard markTerritory(GameBoard gameBoard) {
|
|
for (int row = 0; row < gameBoard.getSize(); row++) {
|
|
for (int col = 0; col < gameBoard.getSize(); col++) {
|
|
char symbol = gameBoard.getSymbolAt(col,row);
|
|
if (symbol != '.') {
|
|
continue;
|
|
}
|
|
int ownedBy = findTerritory(gameBoard,col,row);
|
|
if (ownedBy == BLACK) {
|
|
gameBoard.replaceSymbol(TERRITORY_MARKER, BLACK_TERRITORY);
|
|
} else if (ownedBy == WHITE) {
|
|
gameBoard.replaceSymbol(TERRITORY_MARKER, WHITE_TERRITORY);
|
|
} else {
|
|
gameBoard.replaceSymbol(TERRITORY_MARKER, UNOWNED_TERRITORY);
|
|
}
|
|
}
|
|
}
|
|
gameBoard.setTerritoryMarked(true);
|
|
return gameBoard;
|
|
}
|
|
|
|
public static int getStoneColor(GameBoard gameBoard, int col, int row) {
|
|
char symbol = gameBoard.getSymbolAt(col,row);
|
|
if (symbol == GameBoard.BLACK_STONE) {
|
|
return BLACK;
|
|
} else if (symbol == GameBoard.WHITE_STONE) {
|
|
return WHITE;
|
|
} else {
|
|
return EMPTY;
|
|
}
|
|
}
|
|
|
|
public static int findTerritory(GameBoard gameBoard, int col, int row) {
|
|
char symbol = gameBoard.getSymbolAt(col,row);
|
|
|
|
if (symbol == GameBoard.BLACK_STONE) {
|
|
return BLACK;
|
|
} else if (symbol == GameBoard.WHITE_STONE) {
|
|
return WHITE;
|
|
} else if (symbol == TERRITORY_MARKER) {
|
|
return EMPTY;
|
|
}
|
|
|
|
gameBoard.markTerritory(col,row,TERRITORY_MARKER);
|
|
int borderBits = EMPTY;
|
|
|
|
if (col > 0) {
|
|
borderBits |= findTerritory(gameBoard,col-1,row);
|
|
}
|
|
if (col < gameBoard.getSize() - 1) {
|
|
borderBits |= findTerritory(gameBoard,col+1,row);
|
|
}
|
|
if (row > 0) {
|
|
borderBits |= findTerritory(gameBoard,col,row-1);
|
|
}
|
|
if (row < gameBoard.getSize() - 1) {
|
|
borderBits |= findTerritory(gameBoard,col,row+1);
|
|
}
|
|
|
|
return borderBits;
|
|
}
|
|
} |