⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 threechessgame.java

📁 是<java程序设计>的课后作业2-8源码.可以供初学者参考,作了解java基础语法所用.
💻 JAVA
字号:
/**
 * @(#)ThreeChessGame.java
 *
 *
 * @author 
 * @version 1.00 2009/3/13
 */

import javax.swing.JOptionPane;

public class ThreeChessGame {
	
	//二维数组模拟棋盘
	private char[][] chessBoard;
	
    //构造函数
    public ThreeChessGame() {
    	
    	//棋盘初始化
    	chessBoard=new char [3][3];
    	for(int i=0;i<3;i++)
    		for(int j=0;j<3;j++)
    			chessBoard[i][j]='*';    	
    }
    
    
    //供开始比赛的方法
    public void startGame()
    {
    	//提示用户比赛开始
         JOptionPane.showMessageDialog(null,"开始游戏。。。\n先走的一方在棋盘中X为标记,\n"+
         	"后走的一方在棋盘中O为标记,\n棋盘中暂时的地方用*标出.\n\n"+
         	showChessBoard(),"Game Hint",JOptionPane.INFORMATION_MESSAGE);
         
         //键入玩比赛的方法
         playThreeChessGame();
    }
    
    
    //玩三子棋比赛
    private void playThreeChessGame()
    {
    	//
    	int chessNumber=0;
    	//这里可以调用testFinished()函数替代chessNumber<15;
    	while(chessNumber<9)
    	{
    		boolean gameGoOn=false;
    		
    		//X落子?
    		if(chessNumber%2==0)
    		{
    			//X落子成功???
    			gameGoOn = xTurn();
    			
    			//落子失败,终止比赛
    			if(!gameGoOn) 
    			{
    				JOptionPane.showMessageDialog(null,"比赛终止\n","Game Result",JOptionPane.INFORMATION_MESSAGE);
    				return;
    			}
    			
    			//落子成功,棋子个数自增
    			chessNumber++;
    			
    			//测试比赛状态
    			if(chessNumber>=5)
    			{
    				boolean isXWin=testXWin();
    			    if(isXWin)
    			    {
    				    JOptionPane.showMessageDialog(null,"第一个游戏者获胜,比赛结束\n"+showChessBoard(),
    				    "Game Result",JOptionPane.INFORMATION_MESSAGE);
    				    return;
    			    }    				
    			}   			
    		}
    		//O落子    		
    		else
    		{
    			gameGoOn=oTurn(); 
    			
    			if(!gameGoOn) 
    			{
    				JOptionPane.showMessageDialog(null,"比赛终止\n","Game Result",JOptionPane.INFORMATION_MESSAGE);
    				return;
    			}
    			chessNumber++;
    			
    			if(chessNumber>=6)
    			{
    				boolean isOWin=testOWin();
    			    if(isOWin)
    		     	{
    				    JOptionPane.showMessageDialog(null,"第二个游戏者获胜,比赛结束\n"+showChessBoard(),
    				    "Game Result",JOptionPane.INFORMATION_MESSAGE);
    				     return;
    			    } 
    			}   			
    		}    				
    	}
    	
    	//比赛是平局
    		JOptionPane.showMessageDialog(null,"平局,比赛结束\n"+showChessBoard(),
    				"Game Result",JOptionPane.INFORMATION_MESSAGE);
    				return;
    	   	    	
    }
    
    //显示棋盘
    private String showChessBoard()
    {
    	String strChessBoard="";
    	for(int i=0;i<3;i++)
    	{
    		for(int j=0;j<3;j++)
    		{
    			if(testPosition(i+1,j+1))
    				strChessBoard=strChessBoard+chessBoard[i][j]+"             ";
    			else    				
    				strChessBoard=strChessBoard+chessBoard[i][j]+"            ";
    		}
    			
    		
    		//每一行需要换行	
    		strChessBoard+="\n\n\n";
    			                               
    	}
    	
    	return strChessBoard;
    }
    
    //处理X落子
    private boolean xTurn()
    {
    	int i=0;
    	//最多有三次输入机会,连续三次落子有误,即落子失败.
    	while(i<3)
    	{
    		
    		String strInputPosition=JOptionPane.showInputDialog(null,"请第一个游戏者输入落子位置,如,12(指第一行第二列):\n\n"+
    			showChessBoard(),"Game Input",JOptionPane.QUESTION_MESSAGE);
    	    int inputPosition=Integer.parseInt(strInputPosition);
    	    int inputRow=inputPosition/10;
    	    int inputColumn=inputPosition%10;
    	
    	    boolean flag=true;
    	    if(inputRow<4&&inputRow>0&&inputColumn<4&&inputColumn>0)
    	    {
    	    	if(testPosition(inputRow,inputColumn))
    	    	{
    	    		chessBoard[inputRow-1][inputColumn-1]='X';
    	    	    return true;   
    	    	} 	    		
    	    	
    	    }
    	    
    	    i++;
    	    JOptionPane.showMessageDialog(null,"第一个游戏者落子位置有误!","Game Warning",JOptionPane.INFORMATION_MESSAGE);    	    	
    	} 
    		
    	JOptionPane.showMessageDialog(null,"第一个游戏者多次落子位置有误!","Game Warning",JOptionPane.INFORMATION_MESSAGE);
    	return false;   		
    	
    }
    
    private boolean oTurn()
    {
    	int i=0;
    	//最多有三次输入机会,连续三次落子有误,即落子失败.
    	while(i<3)
    	{
    		
    		String strInputPosition=JOptionPane.showInputDialog(null,"请第二个游戏者输入落子位置,如,12(指第一行第二列):\n\n"+
    			showChessBoard(),"Game Input",JOptionPane.QUESTION_MESSAGE);
    	    int inputPosition=Integer.parseInt(strInputPosition);
    	    int inputRow=inputPosition/10;
    	    int inputColumn=inputPosition%10;
    	
    	    //boolean flag=true;
    	    if(inputRow<4&&inputRow>0&&inputColumn<4&&inputColumn>0)
    	    {
    	    	if(testPosition(inputRow,inputColumn))
    	    	{
    	    		chessBoard[inputRow-1][inputColumn-1]='O';
    	    	    return true;    	    		
    	    	}
    	    	
    	    }
    	    
    	    //落子位置有误
    	    i++;
    	    JOptionPane.showMessageDialog(null,"第二个游戏者落子位置有误!\n","Game Warning",JOptionPane.INFORMATION_MESSAGE);    	    	
    	} 
    		
    	//落子失败
    	JOptionPane.showMessageDialog(null,"第二个游戏者多次落子位置有误!\n","Game Warning",JOptionPane.INFORMATION_MESSAGE);
    	return false;   		
    	
    }
    
    //判断X是否赢得比赛.
    private boolean testXWin()
    {
    	//默认X还未赢得比赛
    	//boolean xWin=false;
    	
    	//遍历数组,是否是X获胜
    	
    	//检查每一行
    	for(int i=0;i<3;i++)
    	{
    		if(chessBoard[i][0]=='X'&&chessBoard[i][1]=='X'&&chessBoard[i][2]=='X')
    		{	
    			//xWin==true;
    			return true;
    		}
    	} 
    	
    	//遍历每一列
    	for(int j=0;j<3;j++)
    	{
    		if(chessBoard[0][j]=='X'&&chessBoard[1][j]=='X'&&chessBoard[2][j]=='X')
    		{
    			//xWin=true;
    			return true;
    		}
    	}
    	
    	//检测对角线
    	if((chessBoard[0][0]=='X'&&chessBoard[1][1]=='X'&&chessBoard[2][2]=='X')||(chessBoard[0][2]=='X'&&chessBoard[1][1]=='X'&&chessBoard[2][0]=='X'))
    	   	return true;
    	   	
    	 return false;
    }
    
    
    //判断O是否赢得比赛
    private boolean testOWin()
    {
    	//默认O还未赢得比赛
    	//boolean oWin=false;
    	
    	//遍历数组,是否是O获胜
    	
    	//检查每一行
    	for(int i=0;i<3;i++)
    	{
    		if(chessBoard[i][0]=='O'&&chessBoard[i][1]=='O'&&chessBoard[i][2]=='O')
    		{	
    			//oWin==true;
    			return true;
    		}
    	} 
    	
    	//遍历每一列
    	for(int j=0;j<3;j++)
    	{
    		if(chessBoard[0][j]=='O'&&chessBoard[1][j]=='O'&&chessBoard[2][j]=='O')
    		{
    			//oWin=true;
    			return true;
    		}
    	}
    	
    	//检测对角线
    	if((chessBoard[0][0]=='O'&&chessBoard[1][1]=='O'&&chessBoard[2][2]=='O')||(chessBoard[0][2]=='O'&&chessBoard[1][1]=='O'&&chessBoard[2][0]=='O'))
    	   	return true;
    	   	
    	 return false;
    }
    
    private boolean testFinished()
    {
    	//boolean tie=false;
    	
    	//检查是否用空的位置没有填棋子
    	for(int i=0;i<3;i++)
    		for(int j=0;j<3;j++)
    		{
    			if(chessBoard[i][j]=='*')
    				return false;
    		}
    		
    	return true;
    }
    
    //测试给定位置是否已经填了棋子
    private boolean testPosition(int i,int j)
    {
    	//测试指定位置是否依然是一个星号标志
    	//注意数组下表是从0开始,用户习惯的行列是从1开始
    	if(chessBoard[i-1][j-1]=='*')
    		return true;
    	
    	return false;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -