def undo(): mv = board.lastMove() if mv == None: print "at start of game" else: move.umake(mv) auto()
def wtrialpawn(h, sq): assert board.whiteToMove() assert h == len(board.history) assert board.manAt(sq) == man.pawn global mvs # pawn may move 2 squares on first move if rank(sq) == 2 and board.empty(fwd(sq)) and board.empty(fwd(fwd(sq))): mvs.append((h, "-", sq, fwd(fwd(sq)))) # pawn moves only one square fwd if beyond original position and square is empty if rank(sq) < 7: if board.manAt(fwd(sq)) == 0: mvs.append((h, "-", sq, fwd(sq))) if man.isBlack(board.manAt(dfr(sq))): mvs.append((h, "x", sq, dfr(sq), board.manAt(dfr(sq)))) if man.isBlack(board.manAt(dfl(sq))): mvs.append((h, "x", sq, dfl(sq), board.manAt(dfl(sq)))) # pawn promotes on reaching last rank if rank(sq) == 7: if board.manAt(fwd(sq)) == 0: for pmn in [man.queen, man.rook, man.bishop, man.knight]: mvs.append((h, "-/", sq, fwd(sq), 0, pmn)) if man.isBlack(board.manAt(dfr(sq))): for pmn in [man.queen, man.rook, man.bishop, man.knight]: mvs.append((h, "x/", sq, dfr(sq), board.manAt(dfr(sq)), pmn)) if man.isBlack(board.manAt(dfl(sq))): for pmn in [man.queen, man.rook, man.bishop, man.knight]: mvs.append((h, "x/", sq, dfl(sq), board.manAt(dfl(sq)), pmn)) # en passant if len(board.history) > 0: mv = board.lastMove() if tag(mv) == "-" and board.manAt(nsq(mv)) == -man.pawn and rank( osq(mv)) == 7 and rank(nsq(mv)) == 5: if nsq(mv) in [rgt(sq), lft(sq)]: mvs.append((h, "xep", sq, fwd(nsq(mv))))
def btrialpawn(h, sq): assert board.blackToMove() assert h == len(board.history) assert board.manAt(sq) == -man.pawn global mvs # pawn may move 2 squares on first move if rank(sq) == 7 and board.empty(bak(sq)) and board.empty(bak(bak(sq))): mvs.append((h, "-", sq, bak(bak(sq)))) # pawn moves only one square if beyond original position if rank(sq) > 2: if board.manAt(bak(sq)) == 0: mvs.append((h, "-", sq, bak(sq))) if man.isWhite(board.manAt(dbr(sq))): mvs.append((h, "x", sq, dbr(sq), board.manAt(dbr(sq)))) if man.isWhite(board.manAt(dbl(sq))): mvs.append((h, "x", sq, dbl(sq), board.manAt(dbl(sq)))) # pawn promotes on reaching last rank if rank(sq) == 2: if board.manAt(bak(sq)) == 0: for pmn in [-man.queen, -man.rook, -man.bishop, -man.knight]: mvs.append((h, "-/", sq, bak(sq), 0, pmn)) if man.isWhite(board.manAt(dbr(sq))): for pmn in [-man.queen, -man.rook, -man.bishop, -man.knight]: mvs.append((h, "x/", sq, dbr(sq), board.manAt(dbr(sq)), pmn)) if man.isWhite(board.manAt(dbl(sq))): for pmn in [-man.queen, -man.rook, -man.bishop, -man.knight]: mvs.append((h, "x/", sq, dbl(sq), board.manAt(dbl(sq)), pmn)) # en passant if len(board.history) > 0: mv = board.lastMove() if tag(mv) == "-" and board.manAt(nsq(mv)) == man.pawn and rank( osq(mv)) == 2 and rank(nsq(mv)) == 4: if nsq(mv) in [rgt(sq), lft(sq)]: mvs.append((h, "xep", sq, bak(nsq(mv))))
def bmobility(mvs): if board.colorToMove() == 'black': return len(mvs) else: move.make((len(board.history), 'null')) cnt = len(trial.trialmoves()) move.umake(board.lastMove()) return -cnt
def prline(mvs): s = "" c = 0 for mv in mvs: legals = legal.moves() if move.color(mv) == 'white': s = s + ("%s %s" % (num(mv), san.pr(mv, legals))) else: if c == 0: s = "%s ...%s " % (num(mv), san.pr(mv, legals)) else: s = s + (" %s " % san.pr(mv, legals)) move.make(mv) c = c + 1 while c > 0: move.umake(board.lastMove()) c = c - 1 return s