Пример #1
0
def undo():
    mv = board.lastMove()
    if mv == None:
        print "at start of game"
    else:
        move.umake(mv)
        auto()
Пример #2
0
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))))
Пример #3
0
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))))
Пример #4
0
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
Пример #5
0
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