diff options
author | Joonas Lehtinen <joonas.lehtinen@itmill.com> | 2007-01-12 13:50:21 +0000 |
---|---|---|
committer | Joonas Lehtinen <joonas.lehtinen@itmill.com> | 2007-01-12 13:50:21 +0000 |
commit | 0c6ebfaa849cd35696daee80bbb018cb57937fe4 (patch) | |
tree | 102859122b016efff986a607e83abf2fede089b9 /src/com/itmill/toolkit/demo/gogame/Game.java | |
parent | 37f3faed9cc9ab8f084d4d8bb3cd639847969994 (diff) | |
download | vaadin-framework-0c6ebfaa849cd35696daee80bbb018cb57937fe4.tar.gz vaadin-framework-0c6ebfaa849cd35696daee80bbb018cb57937fe4.zip |
Removed not-well-working demos to fix #195 (they can be restored when we have time to polish them)
svn changeset:250/svn branch:toolkit
Diffstat (limited to 'src/com/itmill/toolkit/demo/gogame/Game.java')
-rw-r--r-- | src/com/itmill/toolkit/demo/gogame/Game.java | 223 |
1 files changed, 0 insertions, 223 deletions
diff --git a/src/com/itmill/toolkit/demo/gogame/Game.java b/src/com/itmill/toolkit/demo/gogame/Game.java deleted file mode 100644 index 5e5a8d1fe2..0000000000 --- a/src/com/itmill/toolkit/demo/gogame/Game.java +++ /dev/null @@ -1,223 +0,0 @@ -package com.itmill.toolkit.demo.gogame; - -import java.util.Iterator; -import java.util.LinkedList; - -public class Game { - - // States for the positions on the game board. - /** Empty position. */ - public static final int EMPTY = 0; - /** Black stone. */ - public static final int BLACK = 1; - /** White stone */ - public static final int WHITE = 2; - - // Two-dimentionel array holding the current state of the game. - private int[][] state; - - // List of listeners listening to game events. - private LinkedList listeners = new LinkedList(); - - // Names of the players. - private String blackPlayer; - private String whitePlayer; - - // Number of moves made so far. - private int moves = 0; - - // Number of captured stones - private int captured[] = { 0, 0, 0 }; - - /** Creates a new game with the specified board size and player names. - */ - public Game(int boardSize, String blackPlayer, String whitePlayer) { - - // Assign player names. - this.blackPlayer = blackPlayer; - this.whitePlayer = whitePlayer; - - // Initialize board. - state = new int[boardSize][boardSize]; - for (int i = 0; i < boardSize; i++) - for (int j = 0; j < boardSize; j++) - state[i][j] = EMPTY; - } - - /** Gets the current state of the game as a two-dimentional array - * representing the board, with the states Game.EMPTY, Game.BLACK - * and Game.WHITE. - */ - public int[][] getState() { - return state; - } - - /** Adds a black or white stone to the specified position on the - * board. - */ - public void addStone(int i, int j, boolean isBlack) { - if (state[i][j] == EMPTY) { - state[i][j] = isBlack ? BLACK : WHITE; - moves++; - removeDeadStonesAround(i, j); - for (Iterator li = listeners.iterator(); li.hasNext();) - ((Game.Listener) li.next()).stoneIsAdded(this, i, j, isBlack); - } - } - - /** Adds a listener to the list of listeners - */ - public void addGameListener(Game.Listener listener) { - listeners.add(listener); - } - - /** Removes a listener from the list of listeners. - */ - public void removeGameListener(Game.Listener listener) { - listeners.remove(listener); - } - - /** Interface for implementing a listener listening to Go-game events. - */ - public interface Listener { - /** Called whenever a stone is added to the game. - */ - public void stoneIsAdded(Game game, int i, int j, boolean isBlack); - } - - /** This function returns the state of the game as a string. - */ - public String toString() { - return blackPlayer - + " (Black) vs. " - + whitePlayer - + " (White) (" - + state.length - + "x" - + state[0].length - + ", " - + moves - + " moves done" - + (captured[WHITE] > 0 - ? (", Black has captured " + captured[WHITE] + " stones") - : "") - + (captured[BLACK] > 0 - ? (", White has captured " + captured[BLACK] + " stones") - : "") - + ")"; - } - - /** Gets the black player's name. - */ - public String getBlackPlayer() { - return blackPlayer; - } - - /** Gets the number of moves so far. - */ - public int getMoves() { - return moves; - } - - /** Gets the white player's name. - */ - public String getWhitePlayer() { - return whitePlayer; - } - - /** Remove dead stones. Removes stones that are dead as - * defined by the rules of go. The state is only checked for - * the four stones surrounding the last stone added */ - private void removeDeadStonesAround(int lastx, int lasty) { - - // Remove possible victims of attack - removeIfDead(lastx - 1, lasty, lastx, lasty); - removeIfDead(lastx + 1, lasty, lastx, lasty); - removeIfDead(lastx, lasty + 1, lastx, lasty); - removeIfDead(lastx, lasty - 1, lastx, lasty); - - // Remove stones on suicide - removeIfDead(lastx, lasty, -1, -1); - } - - /** Remove area, if it is dead. This fairly complicated algorithm - * tests if area starting from (x,y) is dead and removes it in - * such case. The last stone (lastx,lasty) is always alive. */ - private void removeIfDead(int x, int y, int lastx, int lasty) { - - // Only check the stones on the board - int width = state.length; - int height = state[0].length; - if (x < 0 || y < 0 || x >= width || y >= width) - return; - - // Not dead if empty of same color than the last stone - int color = state[x][y]; - if (color == EMPTY - || (lastx >= 0 && lasty >= 0 && color == state[lastx][lasty])) - return; - - // Check areas by growing - int checked[][] = new int[state.length][state[0].length]; - checked[x][y] = color; - while (true) { - boolean stillGrowing = false; - for (int i = 0; i < width; i++) - for (int j = 0; j < height; j++) - for (int o = 0; o < 4; o++) - if (checked[i][j] == EMPTY) { - int nx = i; - int ny = j; - switch (o) { - case 0 : - nx++; - break; - case 1 : - nx--; - break; - case 2 : - ny++; - break; - case 3 : - ny--; - break; - } - if (nx >= 0 - && ny >= 0 - && nx < width - && ny < height - && checked[nx][ny] == color) { - checked[i][j] = state[i][j]; - if (checked[i][j] == color) - stillGrowing = true; - else if (checked[i][j] == EMPTY) - - // Freedom found - return; - } - - } - // If the area stops growing and no freedoms found, - // it is dead. Remove it - if (!stillGrowing) { - for (int i = 0; i < width; i++) - for (int j = 0; j < height; j++) - if (checked[i][j] == color) { - state[i][j] = EMPTY; - captured[color]++; - } - return; - } - } - } - - /** Get the number of white stones captures */ - public int getCapturedWhiteStones() { - return captured[WHITE]; - } - - /** Get the number of black stones captures */ - public int getCapturedBlackStones() { - return captured[BLACK]; - } -} |