package apps.kiosk.games;
import java.awt.Graphics;
import java.awt.Image;
import java.util.Set;
import apps.kiosk.templates.CommonGraphics;
import apps.kiosk.templates.GameCanvas_FancyGrid;
public class PentagoCanvas extends GameCanvas_FancyGrid {
private static final long serialVersionUID = 1L;
public String getGameName() { return "Pentago"; }
protected String getGameKey() { return "pentago"; }
protected int getGridHeight() { return 6; }
protected int getGridWidth() { return 6; }
@Override
protected Set<String> getFactsAboutCell(int xCell, int yCell) {
int nQuad = getQuadrant(xCell, yCell);
xCell = ((xCell > 3) ? (xCell - 3) : xCell);
yCell = ((yCell > 3) ? (yCell - 3) : yCell);
return gameStateHasFactsMatching("\\( cellHolds " + nQuad + " " + xCell + " " + yCell + " (.*) \\)");
}
@Override
protected Set<String> getLegalMovesForCell(int xCell, int yCell) {
int nQuad = getQuadrant(xCell, yCell);
xCell = ((xCell > 3) ? (xCell - 3) : xCell);
yCell = ((yCell > 3) ? (yCell - 3) : yCell);
Set<String> theMoves = gameStateHasLegalMovesMatching("\\( place " + nQuad + " " + xCell + " " + yCell + " \\)");
theMoves.addAll(gameStateHasLegalMovesMatching("\\( rotate " + nQuad + " (.*) \\)"));
return theMoves;
}
@Override
protected void renderCellContent(Graphics g, String theFact) {
String[] cellFacts = theFact.split(" ");
String cellPlayer = cellFacts[5];
CommonGraphics.drawCheckersPiece(g, cellPlayer.equals("red") ? "wp" : "bp");
}
private Image left_arrow = CommonGraphics.getImage("BlueCircleArrowCCW.png");
private Image right_arrow = CommonGraphics.getImage("BlueCircleArrowCW.png");
@Override
protected void renderMoveSelectionForCell(Graphics g, int xCell, int yCell, String theMove) {
String[] moveParts = theMove.split(" ");
if(moveParts[1].equals("rotate")) {
int nQuad = Integer.parseInt(moveParts[2]);
if(getQuadrant(xCell, yCell) == nQuad) {
CommonGraphics.drawSelectionBox(g);
if(!(xCell == 2 || xCell == 5)) return;
if(!(yCell == 2 || yCell == 5)) return;
// TODO: Better visualizations for curved arrows,
// to indicate clockwise/counterclockwise rotation.
int width = g.getClipBounds().width;
int height = g.getClipBounds().height;
if(moveParts[3].equals("clockwise")) {
g.drawImage(left_arrow, 15, 15, width-30, height-30, null);
} else {
g.drawImage(right_arrow, 15, 15, width-30, height-30, null);
}
}
}
}
private int getQuadrant(int xCell, int yCell) {
if(xCell > 3) {
if(yCell > 3) return 1;
else return 4;
} else {
if (yCell > 3) return 2;
else return 3;
}
}
}