amazon.设计1. tic tac toe
2014-07-24 04:28
441 查看
//不觉中 已经全力找工作好久好久了。大概有1年半了。身心疲惫,不要放弃。曙光快来了。
1.tic tac toe
1.tic tac toe
//http://www.ntu.edu.sg/home/ehchua/programming/java/JavaGame_TicTacToe.html 类似相关棋牌坐标对战游戏 一通百通 /** * Enumerations for the various states of the game */ public enum GameState { // to save as "GameState.java" PLAYING, DRAW, CROSS_WON, NOUGHT_WON } /** * Enumerations for the seeds and cell contents */ public enum Seed { // to save as "Seed.java" EMPTY, CROSS, NOUGHT } ========= Cell.java ========= /** * The Cell class models each individual cell of the game board. */ public class Cell { // save as Cell.java // package access Seed content; // content of this cell of type Seed. // take a value of Seed.EMPTY, Seed.CROSS, or Seed.NOUGHT int row, col; // row and column of this cell, not used in this program /** Constructor to initialize this cell */ public Cell(int row, int col) { this.row = row; this.col = col; clear(); // clear content } /** Clear the cell content to EMPTY */ public void clear() { content = Seed.EMPTY; } /** Paint itself */ public void paint() { switch (content) { case CROSS: System.out.print(" X "); break; case NOUGHT: System.out.print(" O "); break; case EMPTY: System.out.print(" "); break; } } } =========== Board.class =========== /** * The Board class models the game-board. */ public class Board { // save as Board.java // Named-constants for the dimensions public static final int ROWS = 3; public static final int COLS = 3; // package access Cell[][] cells; // a board composes of ROWS-by-COLS Cell instances int currentRow, currentCol; // the current seed's row and column /** Constructor to initialize the game board */ public Board() { cells = new Cell[ROWS][COLS]; // allocate the array for (int row = 0; row < ROWS; ++row) { for (int col = 0; col < COLS; ++col) { cells[row][col] = new Cell(row, col); // allocate element of the array } } } /** Initialize (or re-initialize) the contents of the game board */ public void init() { for (int row = 0; row < ROWS; ++row) { for (int col = 0; col < COLS; ++col) { cells[row][col].clear(); // clear the cell content } } } /** Return true if it is a draw (i.e., no more EMPTY cell) */ public boolean isDraw() { for (int row = 0; row < ROWS; ++row) { for (int col = 0; col < COLS; ++col) { if (cells[row][col].content == Seed.EMPTY) { return false; // an empty seed found, not a draw, exit } } } return true; // no empty cell, it's a draw } /** Return true if the player with "theSeed" has won after placing at (currentRow, currentCol) */ public boolean hasWon(Seed theSeed) { return (cells[currentRow][0].content == theSeed // 3-in-the-row && cells[currentRow][1].content == theSeed && cells[currentRow][2].content == theSeed || cells[0][currentCol].content == theSeed // 3-in-the-column && cells[1][currentCol].content == theSeed && cells[2][currentCol].content == theSeed || currentRow == currentCol // 3-in-the-diagonal && cells[0][0].content == theSeed && cells[1][1].content == theSeed && cells[2][2].content == theSeed || currentRow + currentCol == 2 // 3-in-the-opposite-diagonal && cells[0][2].content == theSeed && cells[1][1].content == theSeed && cells[2][0].content == theSeed); } /** Paint itself */ public void paint() { for (int row = 0; row < ROWS; ++row) { for (int col = 0; col < COLS; ++col) { cells[row][col].paint(); // each cell paints itself if (col < COLS - 1) System.out.print("|"); } System.out.println(); if (row < ROWS - 1) { System.out.println("-----------"); } } } } ============= GameMain.class ============= import java.util.Scanner; /** * The main class for the Tic-Tac-Toe (Console-OO, non-graphics version) * It acts as the overall controller of the game. */ public class GameMain { private Board board; // the game board private GameState currentState; // the current state of the game (of enum GameState) private Seed currentPlayer; // the current player (of enum Seed) private static Scanner in = new Scanner(System.in); // input Scanner /** Constructor to setup the game */ public GameMain() { board = new Board(); // allocate game-board // Initialize the game-board and current status initGame(); // Play the game once. Players CROSS and NOUGHT move alternately. do { playerMove(currentPlayer); // update the content, currentRow and currentCol board.paint(); // ask the board to paint itself updateGame(currentPlayer); // update currentState // Print message if game-over if (currentState == GameState.CROSS_WON) { System.out.println("'X' won! Bye!"); } else if (currentState == GameState.NOUGHT_WON) { System.out.println("'O' won! Bye!"); } else if (currentState == GameState.DRAW) { System.out.println("It's Draw! Bye!"); } // Switch player currentPlayer = (currentPlayer == Seed.CROSS) ? Seed.NOUGHT : Seed.CROSS; } while (currentState == GameState.PLAYING); // repeat until game-over } /** Initialize the game-board contents and the current states */ public void initGame() { board.init(); // clear the board contents currentPlayer = Seed.CROSS; // CROSS plays first currentState = GameState.PLAYING; // ready to play } /** The player with "theSeed" makes one move, with input validation. Update Cell's content, Board's currentRow and currentCol. */ public void playerMove(Seed theSeed) { boolean validInput = false; // for validating input do { if (theSeed == Seed.CROSS) { System.out.print("Player 'X', enter your move (row[1-3] column[1-3]): "); } else { System.out.print("Player 'O', enter your move (row[1-3] column[1-3]): "); } int row = in.nextInt() - 1; int col = in.nextInt() - 1; if (row >= 0 && row < Board.ROWS && col >= 0 && col < Board.COLS && board.cells[row][col].content == Seed.EMPTY) { board.cells[row][col].content = theSeed; board.currentRow = row; board.currentCol = col; validInput = true; // input okay, exit loop } else { System.out.println("This move at (" + (row + 1) + "," + (col + 1) + ") is not valid. Try again..."); } } while (!validInput); // repeat until input is valid } /** Update the currentState after the player with "theSeed" has moved */ public void updateGame(Seed theSeed) { if (board.hasWon(theSeed)) { // check for win currentState = (theSeed == Seed.CROSS) ? GameState.CROSS_WON : GameState.NOUGHT_WON; } else if (board.isDraw()) { // check for draw currentState = GameState.DRAW; } // Otherwise, no change to current state (still GameState.PLAYING). } /** The entry main() method */ public static void main(String[] args) { new GameMain(); // Let the constructor do the job } }
相关文章推荐
- (未完成!)LeetCode 348. Design Tic-Tac-Toe 设计井字棋游戏
- [LeetCode] Design Tic-Tac-Toe 设计井字棋游戏
- [LeetCode] 348. Design Tic-Tac-Toe 设计井字棋游戏
- poj 2361 Tic Tac Toe
- 纯C++游戏编程: Tic-Tac-Toe(三连棋游戏)的实现
- POJ 2361 Tic Tac Toe 模拟
- Tic-Tac-Toe
- Analysis On Tic-Tac-Toe
- Codeforces 3C. Tic-tac-toe
- uva 11534 - Say Goodbye to Tic-Tac-Toe(Nim和)
- NEFU要崛起第2场 C - Tic-tac-toe
- codeforces 3C. Tic-tac-toe
- Problem A. Tic-Tac-Toe-Tomek【解题报告】
- C - Tic-tac-toe
- UVa 10363 - Tic Tac Toe
- SGU 289. Challenging Tic-Tac-Toe
- [cf]Tic-tac-toe
- Tic Tac Toe
- uva 11623 - Tic Tac Toe(game)
- Tic-Tac-Toe