Exemple #1
0
    public List <BoardSquare> GetReverseTargetSquares(BoardSquare[,] boardSquares, Address putPos, PieceColorType currentColor)
    {
        var reverseTargetSquareList = new List <BoardSquare>();

        // 隣接するマスを取得(最大8マス)
        var adjacentSquareDic = GetAdjacentSquares(putPos);
        // 隣接するマスから現在の色と反対色のマスを取得
        var reverseColorSquareDic = GetTargetColorSquare(boardSquares, adjacentSquareDic, BoardSquare.GetReverseColor(currentColor));

        if (reverseColorSquareDic.Count == 0)
        {
            return(reverseTargetSquareList);
        }

        foreach (var item in reverseColorSquareDic)
        {
            Address currentSearchPos      = item.Value;
            var     reservationSquareList = new List <BoardSquare>();
            reservationSquareList.Add(GetSquare(boardSquares, currentSearchPos));
            while (true)
            {
                Address searchPos = GetDirectionPos(item.Key, currentSearchPos);
                if (!searchPos.IsValid())
                {
                    break;
                }

                var square = GetSquare(boardSquares, searchPos);
                if (square.CurrentColor == currentColor)
                {
                    reverseTargetSquareList.AddRange(reservationSquareList);
                    break;
                }
                else if (square.CurrentColor == BoardSquare.GetReverseColor(currentColor))
                {
                    reservationSquareList.Add(square);
                }
                else if (square.IsEmpty())
                {
                    break;
                }
                currentSearchPos = searchPos;
            }
        }

        return(reverseTargetSquareList);
    }
Exemple #2
0
    private void TryPutPiece(Address putPos)
    {
        if (!m_BoardAnalyzer.CanPutPiece(m_BoardSquares, m_CurrentTurnColor, putPos))
        {
            return;
        }

        CreateAndPutPiece(putPos, m_CurrentTurnColor);
        ReverseSandwichedPieces(putPos);

        SoundManager.I.PlaySEByName("put");

        bool canChangeTurn = m_BoardAnalyzer.CanPutPieceSomeWhere(m_BoardSquares, BoardSquare.GetReverseColor(m_CurrentTurnColor));
        var  nextTurnColor = canChangeTurn ? BoardSquare.GetReverseColor(m_CurrentTurnColor) : m_CurrentTurnColor;

        FinishTurn(nextTurnColor);
    }
Exemple #3
0
    public bool CanPutPieceSomeWhere(BoardSquare[,] boardSquares, PieceColorType putPieceColor)
    {
        // 盤上にある置こうとしてる色とは反対の色のマスを取得
        var targetColorSquares = GetTargetColorSquares(boardSquares, BoardSquare.GetReverseColor(putPieceColor));

        foreach (var square in targetColorSquares)
        {
            // 隣接するマスを取得(最大8マス)
            var adjacentSquareDic = GetAdjacentSquares(square.Address);
            foreach (var dic in adjacentSquareDic)
            {
                var adjacentSquare = GetSquare(boardSquares, dic.Value);
                if (CanPutPiece(boardSquares, putPieceColor, adjacentSquare.Address))
                {
                    return(true);
                }
            }
        }

        return(false);
    }