![JAR search and dependency download from the Maven repository](/logo.png)
org.ggp.base.apps.kiosk.games.BiddingTicTacToeCanvas Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of alloy-ggp-base Show documentation
Show all versions of alloy-ggp-base Show documentation
A modified version of the GGP-Base library for Alloy.
The newest version!
package org.ggp.base.apps.kiosk.games;
import java.awt.Color;
import java.awt.Graphics;
import java.util.HashSet;
import java.util.Set;
import org.ggp.base.apps.kiosk.templates.CommonGraphics;
import org.ggp.base.apps.kiosk.templates.GameCanvas_FancyGrid;
public class BiddingTicTacToeCanvas extends GameCanvas_FancyGrid {
private static final long serialVersionUID = 1L;
@Override
public String getGameName() { return "Tic-Tac-Toe (Bidding)"; }
@Override
protected String getGameKey() { return "biddingTicTacToe"; }
@Override
protected int getGridHeight() { return 5; }
@Override
protected int getGridWidth() { return 7; }
@Override
protected boolean coordinatesStartAtOne() { return false; }
@Override
protected boolean useGridVisualization() { return false; }
@Override
protected Set getFactsAboutCell(int xCell, int yCell) {
if(onGrid(xCell, yCell)) {
return gameStateHasFactsMatching("\\( cell " + xCell + " " + yCell + " (.*) \\)");
} else {
int nScore = onScoreboard(xCell, yCell);
if(nScore == -2) {
return gameStateHasFactsMatching("\\( tiebreaker " + myRole + " \\)");
} else if (nScore != -1) {
return gameStateHasFactsMatching("\\( coins " + myRole + " " + nScore + " \\)");
}
}
return new HashSet();
}
@Override
protected Set getLegalMovesForCell(int xCell, int yCell) {
if(onGrid(xCell, yCell)) {
return gameStateHasLegalMovesMatching("\\( mark " + xCell + " " + yCell + " \\)");
} else {
int nScore = onScoreboard(xCell, yCell);
if(nScore >= 0) {
return gameStateHasLegalMovesMatching("\\( bid " + nScore + " (.*) \\)");
}
}
return new HashSet();
}
@Override
protected void renderCellBackground(Graphics g, int xCell, int yCell) {
g.setColor(Color.GRAY);
if(onGrid(xCell, yCell)) {
CommonGraphics.drawCellBorder(g);
} else {
int nScore = onScoreboard(xCell, yCell);
if(nScore >= 0) {
CommonGraphics.fillWithString(g, "" + nScore, 1.2);
} else if(nScore == -2) {
CommonGraphics.fillWithString(g, "T", 1.2);
}
}
}
@Override
protected void renderCellContent(Graphics g, String theFact) {
String[] cellFacts = theFact.split(" ");
g.setColor(Color.BLACK);
if(cellFacts[1].equals("cell")) {
String cellPlayer = cellFacts[4];
if(cellPlayer.equals("b")) return;
CommonGraphics.fillWithString(g, cellPlayer, 1.2);
} else if(cellFacts[1].equals("coins")) {
CommonGraphics.fillWithString(g, cellFacts[3], 1.2);
} else if(cellFacts[1].equals("tiebreaker")) {
CommonGraphics.fillWithString(g, "T", 1.2);
}
}
@Override
protected void renderMoveSelectionForCell(Graphics g, int xCell, int yCell, String theMove) {
String[] moveParts = theMove.split(" ");
if(isSelectedCell(xCell, yCell))
CommonGraphics.drawSelectionBox(g);
if(moveParts[1].equals("bid") && moveParts[3].equals("with_tiebreaker")) {
if(xCell == 6 && yCell == 4) {
CommonGraphics.drawSelectionBox(g);
}
}
}
private boolean onGrid(int xCell, int yCell) {
return (xCell <= 3 && xCell >= 1 && yCell <= 3 && yCell >= 1);
}
private int onScoreboard(int xCell, int yCell) {
if(xCell < 5) return -1;
if(xCell == 5 && yCell == 4) return -1;
if(xCell == 6 && yCell == 3) return -1;
if(xCell == 6 && yCell == 4) return -2;
return yCell + (xCell == 6 ? 4 : 0);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy