JAVA三星题之playing a TicTacToe game

原题:In a game if TicTacToe,two players take turns marking an available cell in a 3x3 grid with their respective tokens(either X or O).When one player has placed three tokens in a horizontal,vertical or diagonal row on the gird,the game is over and that player has won,A draw(no winner) occurs when all the cells on the gird have been filled with tokens and neither player has achiceved a win,Create a program for playing TicTacToe.The program prompts two players to enter X token is enterd,the program redisplays the board on the console and deter=mines the of the game (win,draw,or continue)。

题目来源:

题目选自《JAVA程序语言设计》 P254-7.9***


代码如下:

import java.util.Scanner;
public class Main {
	public static int[][] Chess=new int[3][3]; 		//建立九宫格
	public static int player=1;						//1 为X,-1为O
	public static int count=0;						//计数器,记录九宫格上的棋子数
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		 while(true) {   							//建立游戏循环
	            while(true) {   					//建立输入循环
	                System.out.print("Enter a row(0, 1 or 2) for player");  
	                if(player == 1)
	                     System.out.print(" X: ");
	                else
	                	 System.out.print(" O: ");
	                int row = input.nextInt();  //输入行row上的位置
	                System.out.print("Enter a column(0, 1 or 2) for player");  
	                if(player == 1)
	    	             System.out.print(" X: ");
	                else
   	                	 System.out.print(" O: ");
	                int column = input.nextInt();   		//输入列column上的位置
	                if (Judgingrange(row, column, player) == true) {  //判断输入是否在九宫格内且输入位置没有棋子,
	                    break; 								//如果符合则跳出输入循环
	                }  
	            } 
	            ShowCheckerboard(); //显示当前九宫格局势
	            if (JudgingWin(player) == true) { 			//判断是否有人赢 
	            	if (player==1) 
	            		System.out.println("X player win");
	            	else
	            		System.out.println("O player win");
	                System.out.print("Would you like to continue? (Y or N):");
	                String choose = input.next();
	                if (choose.equals("Y"))
	                {
	                	for (int i=0; i<3 ; i++)
	                		for (int j=0; j<3 ; j++)
	                			Chess[i][j]=0;
	                	count=0;
	                	player=1;
	                	continue;
	                }//重新开始游戏
	                else if (choose.equals("N"))
	                {
	                	break;
	                }//跳出游戏循环
	            }
	            if (count == 9) {  							//如果九宫格每个格上都有棋子
	            	System.out.println("X and O draw"); 	//则是平局  
	            	System.out.print("Would you like to continue? (Y or N):");
		            String choose = input.next();
		            if (choose.equals("Y"))
		            {
		               	for (int i=0; i<3 ; i++)
		               		for (int j=0; j<3 ; j++)
		               			Chess[i][j]=0;
		               	count=0;
		               	player=1;
		               	continue;
		             }//重新开始游戏
	                else if (choose.equals("N"))
	                {
		               	break;
		            }//跳出游戏循环							
	            }
	            player=-player;
	        }  
		 System.out.println("Game Over!");
	}
	public static boolean Judgingrange(int x,int y, int num)
	{
		if (x < 0 || x > 2 || y < 0 || y > 2 ) {           //检查是否越界
            System.out.println("Input out, please input again.");  
            return false;  
        }   
        if (Chess[x][y] == 0) {                            //如果当前位置没有棋子
              Chess[x][y] = num;
              count++;
              return true;  
        }
        else {  											//如果当前位置有棋子
        	System.out.println("There's already a piece, Input out, please input again.");  
                return false;  
         }  
    
	}
	public static boolean JudgingWin(int num)    //判断是否X和O是否有赢
	{
		for (int i = 0; i < 3; i++) {   	//检查行和列上是否有三个一样的棋子
			if (Chess[0][i] == Chess[1][i] && Chess[1][i] == Chess[2][i]  &&Chess[2][i] == num) //行
			{  
                return true;  
            }
            else if (Chess[i][0] == Chess[i][1] && Chess[i][1] == Chess[i][2] && Chess[i][2] == num) //列
            {  
                return true;  
            }
		}
		//检查主对角线和副对角线上是否有三个一样的棋子
		if (Chess[0][0] == Chess[1][1] && Chess[1][1] == Chess[2][2] && Chess[2][2] == num)//主对角线
			return true;
		else if (Chess[0][2] == Chess[1][1] && Chess[1][1] == Chess[2][0] && Chess[2][0] == num)//副对角线
			return true;
		return false;
	}
	
	public static void ShowCheckerboard()	//输出九宫格局势
	{
		System.out.println("—————————————");  
        for (int i = 0; i < 3; ++i) {  
        	System.out.print("|");
            for (int j = 0; j < 3; ++j) {  
                if (Chess[i][j] == 1 )
                	System.out.print(" X |");
                else if(Chess[i][j] == -1)
                	System.out.print(" O |");
                else
                	System.out.print("   |");
                }  
            System.out.println();
            System.out.println("—————————————");
         } 
      }  
}




运行结果:

/*output:
case 1:
Enter a row(0, 1 or 2) for player X: 1
Enter a column(0, 1 or 2) for player X: 1
—————————————
|   |   |   |
—————————————
|   | X |   |
—————————————
|   |   |   |
—————————————
Enter a row(0, 1 or 2) for player O: 2
Enter a column(0, 1 or 2) for player O: 1
—————————————
|   |   |   |
—————————————
|   | X |   |
—————————————
|   | O |   |
—————————————
Enter a row(0, 1 or 2) for player X: 2
Enter a column(0, 1 or 2) for player X: 2
—————————————
|   |   |   |
—————————————
|   | X |   |
—————————————
|   | O | X |
—————————————
Enter a row(0, 1 or 2) for player O: 0
Enter a column(0, 1 or 2) for player O: 0
—————————————
| O |   |   |
—————————————
|   | X |   |
—————————————
|   | O | X |
—————————————
Enter a row(0, 1 or 2) for player X: 1
Enter a column(0, 1 or 2) for player X: 2
—————————————
| O |   |   |
—————————————
|   | X | X |
—————————————
|   | O | X |
—————————————
Enter a row(0, 1 or 2) for player O: 0
Enter a column(0, 1 or 2) for player O: 2
—————————————
| O |   | O |
—————————————
|   | X | X |
—————————————
|   | O | X |
—————————————
Enter a row(0, 1 or 2) for player X: 1
Enter a column(0, 1 or 2) for player X: 0
—————————————
| O |   | O |
—————————————
| X | X | X |
—————————————
|   | O | X |
—————————————
X player win
Would you like to continue? (Y or N):N
Game Over!

case 2 :
Enter a row(0, 1 or 2) for player X: 2
Enter a column(0, 1 or 2) for player X: 3
Input out, please input again.
Enter a row(0, 1 or 2) for player X: 1
Enter a column(0, 1 or 2) for player X: 1
—————————————
|   |   |   |
—————————————
|   | X |   |
—————————————
|   |   |   |
—————————————
Enter a row(0, 1 or 2) for player O: 0
Enter a column(0, 1 or 2) for player O: 0
—————————————
| O |   |   |
—————————————
|   | X |   |
—————————————
|   |   |   |
—————————————
Enter a row(0, 1 or 2) for player X: 2
Enter a column(0, 1 or 2) for player X: 1
—————————————
| O |   |   |
—————————————
|   | X |   |
—————————————
|   | X |   |
—————————————
Enter a row(0, 1 or 2) for player O: 0
Enter a column(0, 1 or 2) for player O: 1
—————————————
| O | O |   |
—————————————
|   | X |   |
—————————————
|   | X |   |
—————————————
Enter a row(0, 1 or 2) for player X: 2
Enter a column(0, 1 or 2) for player X: 1
There's already a piece, Input out, please input again.
Enter a row(0, 1 or 2) for player X: 2
Enter a column(0, 1 or 2) for player X: 0
—————————————
| O | O |   |
—————————————
|   | X |   |
—————————————
| X | X |   |
—————————————
Enter a row(0, 1 or 2) for player O: 0
Enter a column(0, 1 or 2) for player O: 2
—————————————
| O | O | O |
—————————————
|   | X |   |
—————————————
| X | X |   |
—————————————
O player win
Would you like to continue? (Y or N):N
Game Over!

case 3:
Enter a row(0, 1 or 2) for player X: 1
Enter a column(0, 1 or 2) for player X: 1
—————————————
|   |   |   |
—————————————
|   | X |   |
—————————————
|   |   |   |
—————————————
Enter a row(0, 1 or 2) for player O: 2
Enter a column(0, 1 or 2) for player O: 2
—————————————
|   |   |   |
—————————————
|   | X |   |
—————————————
|   |   | O |
—————————————
Enter a row(0, 1 or 2) for player X: 1
Enter a column(0, 1 or 2) for player X: 0
—————————————
|   |   |   |
—————————————
| X | X |   |
—————————————
|   |   | O |
—————————————
Enter a row(0, 1 or 2) for player O: 1
Enter a column(0, 1 or 2) for player O: 2
—————————————
|   |   |   |
—————————————
| X | X | O |
—————————————
|   |   | O |
—————————————
Enter a row(0, 1 or 2) for player X: 0
Enter a column(0, 1 or 2) for player X: 2
—————————————
|   |   | X |
—————————————
| X | X | O |
—————————————
|   |   | O |
—————————————
Enter a row(0, 1 or 2) for player O: 2
Enter a column(0, 1 or 2) for player O: 0
—————————————
|   |   | X |
—————————————
| X | X | O |
—————————————
| O |   | O |
—————————————
Enter a row(0, 1 or 2) for player X: 2
Enter a column(0, 1 or 2) for player X: 1
—————————————
|   |   | X |
—————————————
| X | X | O |
—————————————
| O | X | O |
—————————————
Enter a row(0, 1 or 2) for player O: 0
Enter a column(0, 1 or 2) for player O: 1
—————————————
|   | O | X |
—————————————
| X | X | O |
—————————————
| O | X | O |
—————————————
Enter a row(0, 1 or 2) for player X: 0
Enter a column(0, 1 or 2) for player X: 0
—————————————
| X | O | X |
—————————————
| X | X | O |
—————————————
| O | X | O |
—————————————
X and O draw
Would you like to continue? (Y or N):N
Game Over!
*///~


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的Java实现TicTacToe游戏的示例代码: ```java import java.util.Scanner; public class TicTacToe { private char[][] board; // 存储游戏棋盘 private char currentPlayer; // 当前玩家 public TicTacToe() { board = new char[3][3]; currentPlayer = 'X'; initializeBoard(); } // 初始化游戏棋盘 private void initializeBoard() { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { board[i][j] = '-'; } } } // 打印游戏棋盘 public void printBoard() { System.out.println("-------------"); for (int i = 0; i < 3; i++) { System.out.print("| "); for (int j = 0; j < 3; j++) { System.out.print(board[i][j] + " | "); } System.out.println(); System.out.println("-------------"); } } // 切换玩家 public void switchPlayer() { if (currentPlayer == 'X') { currentPlayer = 'O'; } else { currentPlayer = 'X'; } } // 检查是否有玩家获胜 public boolean checkWin() { return (checkRows() || checkColumns() || checkDiagonals()); } // 检查行是否有玩家获胜 private boolean checkRows() { for (int i = 0; i < 3; i++) { if (checkRowCol(board[i][0], board[i][1], board[i][2])) { return true; } } return false; } // 检查列是否有玩家获胜 private boolean checkColumns() { for (int i = 0; i < 3; i++) { if (checkRowCol(board[0][i], board[1][i], board[2][i])) { return true; } } return false; } // 检查对角线是否有玩家获胜 private boolean checkDiagonals() { return (checkRowCol(board[0][0], board[1][1], board[2][2]) || checkRowCol(board[0][2], board[1][1], board[2][0])); } // 检查一行或一列是否有玩家获胜 private boolean checkRowCol(char c1, char c2, char c3) { return ((c1 != '-') && (c1 == c2) && (c2 == c3)); } // 下棋 public void makeMove(int row, int col) { board[row][col] = currentPlayer; } // 运行游戏 public void play() { Scanner scanner = new Scanner(System.in); System.out.println("Tic Tac Toe Game"); System.out.println("Player 1: X"); System.out.println("Player 2: O"); System.out.println("-------------"); printBoard(); while (!checkWin()) { System.out.println("Player " + currentPlayer + ", enter your move (row[1-3] column[1-3]):"); int row = scanner.nextInt() - 1; int col = scanner.nextInt() - 1; if (row >= 0 && row < 3 && col >= 0 && col < 3 && board[row][col] == '-') { makeMove(row, col); printBoard(); switchPlayer(); } else { System.out.println("Invalid move. Please try again."); } } System.out.println("Player " + currentPlayer + " wins!"); scanner.close(); } public static void main(String[] args) { TicTacToe game = new TicTacToe(); game.play(); } } ``` 以上就是一个简单的Java实现TicTacToe游戏的示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值