コード例 #1
0
ファイル: Board.cs プロジェクト: cncplyr/reversal
 public bool CanPlay(Piece piece)
 {
     if (IsOutOfBounds(piece.Position) || IsOccupied(piece.Position))
     {
         return false;
     }
     
     return CapturesOpponentPiecesInAnyDirection(piece);
 }
コード例 #2
0
ファイル: Board.cs プロジェクト: cncplyr/reversal
        public void Play(Piece piece)
        {
            if (!CanPlay(piece))
            {
                throw new InvalidOperationException($"Invalid move for {piece}");
            }

            pieces.Add(piece);
            foreach (var direction in Direction.All())
            {
                var line = new PiecesInLine(this, piece, direction);
                line.FlipOpponents();
            }
        }
コード例 #3
0
ファイル: Board.cs プロジェクト: cncplyr/reversal
 public PiecesInLine(Board board, Piece piece, Direction direction)
 {
     this.board = board;
     this.piece = piece;
     this.direction = direction;
 }
コード例 #4
0
ファイル: Board.cs プロジェクト: cncplyr/reversal
 private bool CapturesOpponentPiecesInAnyDirection(Piece piece)
 {
     return Direction.All()
         .Any(direction => new PiecesInLine(this, piece, direction).CapturesOpponentPieces());
 }
コード例 #5
0
ファイル: Board.cs プロジェクト: cncplyr/reversal
 private Piece GetNextPiece(Piece thisPiece)
 {
     return board.GetPiece(direction.AwayFrom(thisPiece.Position));
 }