예제 #1
0
        public void NG_ShouldNotPromoteTwice(EPieceSort sort)
        {
            BPiece piece = MakePiece(sort, true);

            piece.Promote();
            Assert.IsFalse(piece.CanPromote(), $"{sort} must not promote twice");
        }
예제 #2
0
        public void NG_AnyNonPromotedPieceShouldNotHaveControlToItself(
            EPieceSort sort, bool isWhite)
        {
            BPiece piece = MakePiece(sort, isWhite);

            Assert.IsFalse(piece.HasControlTo(Coord.Zero),
                           $"{piece} should not have control to itself");
        }
예제 #3
0
        public void OK_EveryPieceShouldBeNonPromotedAtFirst(
            [Values] EPieceSort sort,
            [Values] bool isWhtie
            )
        {
            BPiece piece = MakePiece(sort, isWhtie);

            Assert.IsFalse(piece.Promoted, "Every piece should not be non-promoted at first");
        }
예제 #4
0
        public static BPiece MakePiece(EPieceSort sort, bool isWhite)
        {
            BPiece ret = null;

            switch (sort)
            {
            case EPieceSort.kKing:
                ret = new King(isWhite);
                break;

            case EPieceSort.kRook:
                ret = new Rook(isWhite);
                break;

            case EPieceSort.kBishop:
                ret = new Bishop(isWhite);
                break;

            case EPieceSort.kGold:
                ret = new Gold(isWhite);
                break;

            case EPieceSort.kSilver:
                ret = new Silver(isWhite);
                break;

            case EPieceSort.kKnight:
                ret = new Knight(isWhite);
                break;

            case EPieceSort.kLance:
                ret = new Lance(isWhite);
                break;

            case EPieceSort.kPorn:
                ret = new P**n(isWhite);
                break;

            default:
                Trace.TraceError("the piece sort is unknown");
                Environment.Exit(1);
                break;
            }
            if (ret == null)
            {
                Trace.TraceError("PieceFactory#NewPiece(): couldn't make a Piece");
            }
            return(ret);
        }
예제 #5
0
 public Move(
     EPieceSort _pieceSort,
     Coord _from,
     Coord _to,
     bool _white,
     bool _doPromote,
     bool _doDrop)
 {
     sort      = _pieceSort;
     from      = _from;
     to        = _to;
     white     = _white;
     doPromote = _doPromote;
     doDrop    = _doDrop;
 }
예제 #6
0
        public void NG_SomePiecesShouldNotHaveFarControl_Right(
            [Values(
                 EPieceSort.kPorn,
                 EPieceSort.kSilver,
                 EPieceSort.kGold,
                 EPieceSort.kKing)] EPieceSort sort,
            [Range(-1, 1)] int row,
            [Range(2, 3)] int col,
            [Values] bool isWhite,
            [Values] bool doPromote)
        {
            var piece = MakePiece(sort, isWhite);

            if (doPromote)
            {
                piece.Promote();
            }
            Assert.IsFalse(piece.HasControlTo(new Coord(row, col)),
                           $"{piece} should not have control to ${new Coord(row, col)}");
        }
예제 #7
0
 protected BPiece(EPieceSort sort, bool isWhite)
 {
     Sort     = sort;
     Promoted = false;
     White    = isWhite;
 }
예제 #8
0
        public void NG_ShouldNotJump(EPieceSort sort)
        {
            BPiece piece = MakePiece(sort, true);

            Assert.IsFalse(piece.CanJump(), $"{sort} must not jump");
        }
예제 #9
0
        public void OK_ShouldJump(EPieceSort sort)
        {
            BPiece piece = MakePiece(sort, true);

            Assert.IsTrue(piece.CanJump(), $"{sort} should jump");
        }
예제 #10
0
        public void OK_ShouldPromote(EPieceSort sort)
        {
            BPiece piece = MakePiece(sort, true);

            Assert.IsTrue(piece.CanPromote(), $"{sort} should promote");
        }