コード例 #1
0
ファイル: Game.cs プロジェクト: peter2787/Gomoku
        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;
                    }
                }
            }
        }
コード例 #2
0
ファイル: Game.cs プロジェクト: KenkunLiu/Gomoku
        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;
                    }
                }
            }
        }
コード例 #3
0
ファイル: Game.cs プロジェクト: LYS786/practice-git
        /*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;
                    }
                }
            }
        }
コード例 #4
0
        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;
                    }
                }
            }
        }
コード例 #5
0
        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;
                    }
                }
            }
        }
コード例 #6
0
        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;
                        }
                    }
                }
            }
        }
コード例 #7
0
        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;
        }