コード例 #1
0
 public void Capture(IPieceBag pieceBag, IPiece startingPiece, Direction direction)
 {
     foreach (var piece in GetCapturablePieces(pieceBag, startingPiece, direction))
     {
         piece.Flip();
     }
 }
コード例 #2
0
        private IEnumerable<IPiece> GetContiguousOpponentPieces(IPieceBag pieceBag, IPiece startingPiece, Direction direction)
        {
            var piece = GetNextPieceFrom(pieceBag, startingPiece, direction);
            while (piece != null)
            {
                if (piece.Side == startingPiece.Side)
                {
                    yield break;
                }

                yield return piece;
                piece = GetNextPieceFrom(pieceBag, piece, direction);
            }
        }
コード例 #3
0
        private IEnumerable<IPiece> GetCapturablePieces(IPieceBag pieceBag, IPiece startingPiece, Direction direction)
        {
            var opponents = GetContiguousOpponentPieces(pieceBag, startingPiece, direction)
                .ToArray();
            if (!opponents.Any())
            {
                return Enumerable.Empty<IPiece>();
            }

            var nextPiece = GetNextPieceFrom(pieceBag, opponents.Last(), direction);
            if (nextPiece == null || nextPiece.Side != startingPiece.Side)
            {
                return Enumerable.Empty<IPiece>();
            }

            return opponents;
        }
コード例 #4
0
ファイル: Board.cs プロジェクト: cncplyr/reversal
 public PiecesInLine(Board board, Piece piece, Direction direction)
 {
     this.board = board;
     this.piece = piece;
     this.direction = direction;
 }
コード例 #5
0
 private IPiece GetNextPieceFrom(IPieceBag pieceBag, IPiece piece, Direction direction)
 {
     return pieceBag.GetPiece(direction.AwayFrom(piece.Position));
 }
コード例 #6
0
 public bool HasCapturablePieces(IPieceBag pieceBag, IPiece startingPiece, Direction direction)
 {
     return GetCapturablePieces(pieceBag, startingPiece, direction).Any();
 }