Erinevus lehekülje "ITI0011-2014:Gomoku" redaktsioonide vahel
(Uus lehekülg: '<!-- mõtteid: internet piirata, mälupiirang? kettale kirjutamine piirata? turnamendil anda ette random seis (mingi seed'iga), millest mõlemad mängijad alustavad. see annaks...') |
|||
1. rida: | 1. rida: | ||
+ | |||
+ | Tuleb implementeerida interface'i: | ||
+ | <source lang="java"> | ||
+ | package gomoku; | ||
+ | |||
+ | /** | ||
+ | * @author Ago | ||
+ | * | ||
+ | * Interface for computer strategy. | ||
+ | */ | ||
+ | public interface ComputerStrategy { | ||
+ | /** | ||
+ | * Takes the game state and return the best move | ||
+ | * @param board Board state | ||
+ | * @return A location where to make computer's move. | ||
+ | * | ||
+ | * @see SimpleBoard | ||
+ | * @see Location | ||
+ | */ | ||
+ | public Location getMove(SimpleBoard board); | ||
+ | |||
+ | /** | ||
+ | * Name will be shown during the play. | ||
+ | * This method should be overridden to | ||
+ | * show student's name. | ||
+ | * @return Name of the player | ||
+ | */ | ||
+ | public String getName(); | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | Objekt, mis antakse "getMove" meetodile kaasa: | ||
+ | |||
+ | <source lang="java"> | ||
+ | package gomoku; | ||
+ | |||
+ | /** | ||
+ | * Simple 2-dimensional presentation | ||
+ | * of the game board. | ||
+ | * Every cell in the board is represented | ||
+ | * by one integer, the Values are either | ||
+ | * PLAYER_X, PLAYER_O or EMPTY. | ||
+ | * This object also knows the size of the board | ||
+ | * and the last move (Location object). | ||
+ | * | ||
+ | * @author Ago | ||
+ | * @see Location | ||
+ | */ | ||
+ | public class SimpleBoard { | ||
+ | |||
+ | /** | ||
+ | * Cell value for player X | ||
+ | */ | ||
+ | public static final int PLAYER_X = 1; | ||
+ | |||
+ | /** | ||
+ | * Cell value for player O | ||
+ | */ | ||
+ | public static final int PLAYER_O = -1; | ||
+ | |||
+ | /** | ||
+ | * Empty cell value | ||
+ | */ | ||
+ | public static final int EMPTY = 0; | ||
+ | |||
+ | /** | ||
+ | * The height of the board. | ||
+ | * Indicates the number of rows. | ||
+ | */ | ||
+ | private int height = -1; | ||
+ | /** | ||
+ | * The width of the board. | ||
+ | * Indicates the number of columns. | ||
+ | */ | ||
+ | private int width = -1; | ||
+ | |||
+ | private int[][] board; | ||
+ | |||
+ | /** | ||
+ | * Returns the height (number of rows) | ||
+ | * of the board. | ||
+ | * @return Number of rows | ||
+ | */ | ||
+ | public int getHeight() { | ||
+ | return height; | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * Returns the width (number of columns) | ||
+ | * of the board. | ||
+ | * @return Number of columns | ||
+ | */ | ||
+ | public int getWidth() { | ||
+ | return width; | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * Returns 2-dimensional | ||
+ | * array of integers with values | ||
+ | * PLAYER_O, PLAYER_X or EMPTY. | ||
+ | * The values correspond to | ||
+ | * "O" player's piece, | ||
+ | * "X" player's piece, | ||
+ | * or an empty cell accordingly. | ||
+ | * @return | ||
+ | */ | ||
+ | public int[][] getBoard() { | ||
+ | return board; | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * Constructor to instantiate the board. | ||
+ | * @param simpleBoard 2-dimensional | ||
+ | * array for the board. | ||
+ | */ | ||
+ | public SimpleBoard(int[][] simpleBoard) { | ||
+ | height = simpleBoard.length; | ||
+ | if (height > 0) width = simpleBoard[0].length; | ||
+ | board = simpleBoard; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </source> | ||
+ | |||
+ | Teil tuleb "getMove" meetodis tagastada käigu asukoht Location objektina: | ||
+ | |||
+ | <source> | ||
+ | package gomoku; | ||
+ | |||
+ | /** | ||
+ | * @author Ago | ||
+ | * Location on the board, 0-based. | ||
+ | */ | ||
+ | public class Location { | ||
+ | /** | ||
+ | * Index of the row. | ||
+ | */ | ||
+ | private final int row; | ||
+ | /** | ||
+ | * Index of the column. | ||
+ | */ | ||
+ | private final int column; | ||
+ | |||
+ | public Location(int row, int column) { | ||
+ | this.row = row; | ||
+ | this.column = column; | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * @return Row index | ||
+ | */ | ||
+ | public int getRow() { | ||
+ | return row; | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * @return Columnt index | ||
+ | */ | ||
+ | public int getColumn() { | ||
+ | return column; | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public String toString() { | ||
+ | return String.format("(%d, %d)", row, column); | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | Näidis random strateegia: | ||
+ | <source lang="java"> | ||
+ | /** | ||
+ | * A random strategy implementation | ||
+ | * for the gomoku game. | ||
+ | * @author Ago | ||
+ | * | ||
+ | */ | ||
+ | public class RandomStrategy implements ComputerStrategy { | ||
+ | |||
+ | @Override | ||
+ | public Location getMove(SimpleBoard board) { | ||
+ | int[][] b = board.getBoard(); | ||
+ | while (true) { | ||
+ | // let's loop until we find an empty spot | ||
+ | int row = (int)(Math.random() * board.getHeight()); | ||
+ | int col = (int)(Math.random() * board.getWidth()); | ||
+ | if (b[row][col] == SimpleBoard.EMPTY) { | ||
+ | // if empty, let's return this location | ||
+ | return new Location(row, col); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public String getName() { | ||
+ | return "Random computer strategy"; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </source> | ||
<!-- | <!-- | ||
Redaktsioon: 10. november 2014, kell 14:54
Tuleb implementeerida interface'i: <source lang="java"> package gomoku;
/**
* @author Ago * * Interface for computer strategy. */
public interface ComputerStrategy { /** * Takes the game state and return the best move * @param board Board state * @return A location where to make computer's move. * * @see SimpleBoard * @see Location */ public Location getMove(SimpleBoard board);
/** * Name will be shown during the play. * This method should be overridden to * show student's name. * @return Name of the player */ public String getName(); } </source>
Objekt, mis antakse "getMove" meetodile kaasa:
<source lang="java"> package gomoku;
/**
* Simple 2-dimensional presentation * of the game board. * Every cell in the board is represented * by one integer, the Values are either * PLAYER_X, PLAYER_O or EMPTY. * This object also knows the size of the board * and the last move (Location object). * * @author Ago * @see Location */
public class SimpleBoard {
/** * Cell value for player X */ public static final int PLAYER_X = 1;
/** * Cell value for player O */ public static final int PLAYER_O = -1;
/** * Empty cell value */ public static final int EMPTY = 0;
/** * The height of the board. * Indicates the number of rows. */ private int height = -1; /** * The width of the board. * Indicates the number of columns. */ private int width = -1;
private int[][] board;
/** * Returns the height (number of rows) * of the board. * @return Number of rows */ public int getHeight() { return height; }
/** * Returns the width (number of columns) * of the board. * @return Number of columns */ public int getWidth() { return width; }
/** * Returns 2-dimensional * array of integers with values * PLAYER_O, PLAYER_X or EMPTY. * The values correspond to * "O" player's piece, * "X" player's piece, * or an empty cell accordingly. * @return */ public int[][] getBoard() { return board; }
/** * Constructor to instantiate the board. * @param simpleBoard 2-dimensional * array for the board. */ public SimpleBoard(int[][] simpleBoard) { height = simpleBoard.length; if (height > 0) width = simpleBoard[0].length; board = simpleBoard; } }
</source>
Teil tuleb "getMove" meetodis tagastada käigu asukoht Location objektina:
<source> package gomoku;
/**
* @author Ago * Location on the board, 0-based. */
public class Location { /** * Index of the row. */ private final int row; /** * Index of the column. */ private final int column;
public Location(int row, int column) { this.row = row; this.column = column; }
/** * @return Row index */ public int getRow() { return row; }
/** * @return Columnt index */ public int getColumn() { return column; }
@Override public String toString() { return String.format("(%d, %d)", row, column); } } </source>
Näidis random strateegia: <source lang="java"> /**
* A random strategy implementation * for the gomoku game. * @author Ago * */
public class RandomStrategy implements ComputerStrategy {
@Override public Location getMove(SimpleBoard board) { int[][] b = board.getBoard(); while (true) { // let's loop until we find an empty spot int row = (int)(Math.random() * board.getHeight()); int col = (int)(Math.random() * board.getWidth()); if (b[row][col] == SimpleBoard.EMPTY) { // if empty, let's return this location return new Location(row, col); } } }
@Override public String getName() { return "Random computer strategy"; }
} </source>