private void checkWinner() { int centerX = board.LastPlacedNode.X; int centerY = board.LastPlacedNode.Y; //檢查8個方向 for (int xDir = -1; xDir <= 1; xDir++) { for (int yDir = -1; yDir <= 1; yDir++) { //(0,0)是自己的位置所以不檢查 if (xDir == 0 && yDir == 0) { continue; } //紀錄在路徑上看到幾顆相同的棋子 int count = 1; int count2 = 1; //往同一方向檢查5顆棋子 while (count < 5) { int targetX = centerX + count * xDir; int targetY = centerY + count * yDir; //檢察顏色是否相同 if (targetX < 0 || targetX >= Board.NODE_COUNT || targetY < 0 || targetY >= Board.NODE_COUNT || board.GetPieceType(targetX, targetY) != currentPlayer) { break; } count++; } while (count2 < 5) { //檢查count的相反方向 int targetX = centerX - count2 * xDir; int targetY = centerY - count2 * yDir; if (targetX < 0 || targetX >= Board.NODE_COUNT || targetY < 0 || targetY >= Board.NODE_COUNT || board.GetPieceType(targetX, targetY) != currentPlayer) { break; } count2++; } //檢查是否有5顆棋子 if (count == 5 || count + count2 > 5) { winner = currentPlayer; } } } }
private void checkWinner() { int centerX = board.LastPlacedNode.X; int centerY = board.LastPlacedNode.Y; int a = 0, b = 0, c = 0, d = 0; //檢查八個不同的方向 for (int xDir = -1; xDir <= 1; xDir++) { for (int yDir = -1; yDir <= 1; yDir++) { //排除中間的情況(也就是最後下的那顆棋子座標,不需檢查自己) if (xDir == 0 && yDir == 0) { //直接進入下一個迴圈,不執行下方程式碼 continue; } //紀錄現在看到幾顆相同顏色的棋子 int count = 1; while (count < 5) { int targetX = centerX + count * xDir; int targetY = centerY + count * yDir; //判斷是否會超出棋盤邊界 if (targetX < 0 || targetX >= Board.NODE_COUNT || targetY < 0 || targetY >= Board.NODE_COUNT || board.GetPieceType(targetX, targetY) != currentPlayer) { break; } count++; } countPieceRecord[xDir + 1, yDir + 1] = count - 1; if (isWinnerExist(countPieceRecord)) { winner = currentPlayer; } } } }
/*public Point autoPlay() * { * return board.autoPlay(); * } */ // 判斷有無勝者 private void CheckWinner() { int centerX = board.LastPlaceNode.X; int centerY = board.LastPlaceNode.Y; // 檢查八個方向 for (int xDir = -1; xDir <= 1; xDir++) { for (int yDir = -1; yDir <= 1; yDir++) { // 排除檢查自己(中心) if (xDir == 0 && yDir == 0) { continue; } // 紀錄相同顏色棋子個數 int count = 1; while (count < 5) { int targetX = centerX + count * xDir; int targetY = centerY + count * yDir; //Console.WriteLine("targetX:" + targetX); // Console.WriteLine("targetY:" + targetY); // 檢查顏色是否相同 if (targetX < 0 || targetX >= Board.NODE_COUNT || targetY < 0 || targetY >= Board.NODE_COUNT || board.GetPieceType(targetX, targetY) != currentPlayer) { break; } count++; } countPieceRecord[xDir + 1, yDir + 1] = count - 1; if (isWinnerExist(countPieceRecord)) { winner = currentPlayer; } } } }
private void CheckWinner() { int centerX = board.LastPlaceNode.X; int centerY = board.LastPlaceNode.Y; //check 8 way for (int xDir = -1; xDir <= 1; xDir++) { for (int yDir = -1; yDir <= 1; yDir++) { if (xDir == 0 && yDir == 0) { continue; } // Exclude middle situation // Record howmany same color pieces int count = 1; while (count < 5) { int targetX = centerX + count * xDir; int targetY = centerY + count * yDir; //Check color same? if (targetX < 0 || targetX >= Board.NODE_COUNT || targetY < 0 || targetY >= Board.NODE_COUNT || board.GetPieceType(targetX, targetY) != currentPlayer) { break; } count++; } //Check if 5 pieces? if (count == 5) { winner = currentPlayer; } } } }
public void CheckWinner() { int centerX = board.LastPlacedNode.X; int centerY = board.LastPlacedNode.Y; for (int xDir = -1; xDir <= 1; xDir++) { for (int yDir = -1; yDir <= 1; yDir++) { if (xDir == 0 && yDir == 0) { continue; } int count = 1; while (count < 5) { int targetX = centerX + count * xDir; int targetY = centerY + count * yDir; if (targetX >= Board.NODE_COUNT || targetX < 0 || targetY >= Board.NODE_COUNT || targetY < 0 || board.GetPieceType(targetX, targetY) != currentPlayer) { break; } count++; } // 檢查是否有五顆棋子 if (count == 5) { winner = currentPlayer; } } } }
private void checkWinner() { int centerX = board.LastPlaceNode.X; int centerY = board.LastPlaceNode.Y; /*** * check the eight direction * -------------------------------- | (-1,-1) | (+0,-1) | (+1,-1) | |------------------------------| | (-1,0) | (+0,+0) | (+1,0) | |------------------------------| | (-1,+1) | (+0,+1) | (+1,+1) | | -------------------------------- ***/ for (int xDir = -1; xDir <= 1; xDir++) { for (int yDir = -1; yDir <= 1; yDir++) { //jump the middle one(not the direction to middle) if (xDir == 0 & yDir == 0) { continue; } //record the count int winnerCount = 1; //if search the piece is not the same color , return False bool target = true; bool oppoisit = true; for (int count = 1; count <= 5; count++) { int targetX = centerX + count * xDir; int targetY = centerY + count * yDir; int oppoistetargetX = centerX + count * xDir * -1; int oppoistetargetY = centerY + count * yDir * -1; //check the front side is right or not if (target) { if (targetX < 0 || targetX >= Board.NODE_COUNT || targetY < 0 || targetY >= Board.NODE_COUNT || board.GetPieceType(targetX, targetY) != currentPlayer) { target = false; } else { winnerCount++; } } //check the backside is right or not if (oppoisit) { if (oppoistetargetX < 0 || oppoistetargetX >= Board.NODE_COUNT || oppoistetargetY < 0 || oppoistetargetY >= Board.NODE_COUNT || board.GetPieceType(oppoistetargetX, oppoistetargetY) != currentPlayer) { oppoisit = false; } else { winnerCount++; } } if (target == false & oppoisit == false) { break; } //if the count is 5 the winner if (winnerCount == 5) { winner = currentPlayer; } } } } }
private void CheckWinner() //用當下下的那個仁與棋子來判斷是否獲勝 { int centerX = board.LastPlaceNode.X; int centerY = board.LastPlaceNode.Y; //檢查八個不同方向 for (int xDir = -1; xDir <= 1; xDir++) { for (int yDir = -1; yDir <= 1; yDir++) { if (xDir == 0 && yDir == 0) { continue; } //紀錄現在看到幾顆相同的棋子 int count = 1; while (count < 5) { int targetX = centerX + count * xDir; int targetY = centerY + count * yDir; //檢查顏色是否相同,要注意是否碰到邊界 if (targetX < 0 || targetX >= Board.NODE_COUNT || targetY < 0 || targetY >= Board.NODE_COUNT || board.GetPieceType(targetX, targetY) != currentPlayer) { break; } count++; } int count2 = 0; while (count2 < 5) { int targetX = centerX + count2 * -xDir; int targetY = centerY + count2 * -yDir; //檢查顏色是否相同,要注意是否碰到邊界 if (targetX < 0 || targetX >= Board.NODE_COUNT || targetY < 0 || targetY >= Board.NODE_COUNT || targetX == centerX || targetY == centerY || //因為count2初始是0,所以會導致自己判斷成自己 board.GetPieceType(targetX, targetY) != currentPlayer) { break; } else { count2++; } } if (count + count2 >= 5) { winner = currentPlayer; } } } ////紀錄現在看到幾顆相同的棋子 //int count = 1; //while (count < 5) //{ // int targetX = centerX + count; // int targetY = centerY; // //檢查顏色是否相同,要注意是否碰到邊界 // if (targetX < 0 || targetX >= Board.NODE_COUNT || // targetY < 0 || targetY >= Board.NODE_COUNT || // board.GetPieceType(targetX, targetY) != currentPlayer) // break; // count++; //} //if (count == 5) // winner = currentPlayer; }