1. 程式人生 > >Java基礎演算法——五子棋判定結果的幾種思路

Java基礎演算法——五子棋判定結果的幾種思路

    五子棋作為很多初學者的第一個比較綜合性的小專案,需要大家根據需求對二維陣列進行查詢、存放棋子等操作。這一步相信大家都沒有什麼問題,然而沒有輸贏的五子棋就沒有意義,所以五子棋還有判斷結果這一重要的步驟。大部分老師都沒有對這一步進行要求,但很多同學卻很感興趣並且在網上進行了查詢,相信也能夠利用網上的程式碼玩五子棋的遊戲了。接下來我想提供自己判斷五子棋輸贏的幾種思路

    一、遍歷棋盤的每一行每一列

      這大概是最蠢的一種的方式了,你不僅需要遍歷每一行每一列,還需要遍歷每一列。因為每下一步棋都需要進行結果判斷,勢必會很佔記憶體,所以不推薦這種方式

    二、判斷當前所下棋子的上下棋子個數加起來是否為4

    網上現有的結果判斷基本數都是這一種,通過判斷該棋子橫豎斜每一條線相鄰的棋子是否為4

    三、判斷棋子所在每一行每一列是否有五子相連

    這個是我自己寫的,因為想起來更簡單  

        /**
	 * 
	 *@param x 棋子所在行數-1
	 * @param y 棋子所在列數-1
	 * @param bool bool為true則說明落子為黑子,否則落子為白子
	 * @return 返回true則表明對應的子五子相連,返回false表明沒有五子相連的情況
	 */
	public boolean result(int x,int y,boolean bool){
		String str=(bool)?"■":"○";
		//棋子所在行和列是否有五子相連的情況
		for(int i=0;i<16;i++){
			if((board[x][i].equals(str)&&board[x][i+1].equals(str)&&board[x][i+2].equals(str)&&board[x][i+3].equals(str)&&board[x][i+4].equals(str))||(board[i][y].equals(str)&&board[i+1][y].equals(str)&&board[i+2][y].equals(str)&&board[i+3][y].equals(str)&&board[i+4][y].equals(str)))
				return true;
		}
		//棋子所在撇行是否有五子相連的情況
		if(x+y>=4&&x+y<=30){
			int i=(x+y<=19)?x+y:x+y-20;
			if(x+y<=19){
				for(int k=0;k<=i-4;k++){
					if(board[k][i-k].equals(str)&&board[k+1][i-k-1].equals(str)&&board[k+2][i-k-2].equals(str)&&board[k+3][i-k-3].equals(str)&&board[k+4][i-k-4].equals(str))
						return true;		
				}
			}else{
				for(int k=i;k<=15;k++){
					if(board[k][20-k].equals(str)&&board[k+1][20-k-1].equals(str)&&board[k+2][20-k-2].equals(str)&&board[k+3][20-k-3].equals(str)&&board[k+4][20-k-4].equals(str))
						return true;
				}
			}
		}
		//棋子所在捺行是否有五子相連的情況
		if(y-x<=15&&x-y<=15){
			int i=(x<y)?y-x:x-y;
			if(x<y){
				for(int k=0;k<=19-4-i;k++){
					if(board[k][i+k].equals(str)&&board[k+1][i+k+1].equals(str)&&board[k+2][i+k+2].equals(str)&&board[k+3][i+k+3].equals(str)&&board[k+4][i+k+4].equals(str))
						return true;
				}
			}else{
				for(int k=i;k<=15;k++){
					if(board[k][i+k].equals(str)&&board[k+1][i+k+1].equals(str)&&board[k+2][i+k+2].equals(str)&&board[k+3][i+k+3].equals(str)&&board[k+4][i+k+4].equals(str))
						return true;
				}
			}
		}
		return false;	
	}