/// <summary>
        /// 返却されるPathには開始地点は含まれない。
        /// </summary>
        /// <param name="startPosition"></param>
        /// <param name="viaPosition"></param>
        /// <param name="endPosition"></param>
        /// <param name="pieces"></param>
        /// <param name="start2ViaPieceMovement"></param>
        /// <param name="via2EndPieceMovement"></param>
        /// <returns></returns>
        public static IEnumerable <IntegerVector2> CalculatePath(IntegerVector2 startPosition, IntegerVector2 viaPosition, IntegerVector2 endPosition,
                                                                 IReadOnlyPositionArrayAccessor <IReadOnlyPiece> pieces, PieceMovement start2ViaPieceMovement, PieceMovement via2EndPieceMovement)
        {
            //startPositionは各直線ではなく全体の開始地点でなければならない
            //インスタンス変数化?
            bool isFrontPlayersPiece = IsFrontPlayersPiece(pieces, startPosition);

            if (viaPosition == endPosition)
            {
                return(CalculateStraightPath(startPosition, endPosition, start2ViaPieceMovement, isFrontPlayersPiece));
            }
            return(CalculateBrockenPath(startPosition, viaPosition, endPosition, start2ViaPieceMovement, via2EndPieceMovement, isFrontPlayersPiece));
        }
 static bool IsFrontPlayersPiece(IReadOnlyPositionArrayAccessor <IReadOnlyPiece> pieces, IntegerVector2 startPosition)
 => pieces.Read(startPosition).Owner != null && pieces.Read(startPosition).Owner.Encampment == Encampment.Front;
Beispiel #3
0
        public PieceMoveVerifier(IReadOnlyPositionArrayAccessor <IReadOnlyPiece> pieces)
        {
            Assert.IsNotNull(pieces);

            this.pieces = pieces;
        }