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); }
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); }
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); }