예제 #1
0
def wpenalty():
    penalty = 0
    for sq in board.whiteMen:
        # penalty for knight and bishop on original rank
        if firstrank(sq):
            if manAt(sq) == man.knight:
                penalty = penalty - 66
                # get that kings knight out
                if sq == g1:
                    penalty = penalty - 50
            elif manAt(sq) == man.bishop:
                penalty = penalty - 61
                # get that kings bishop out
                if sq == f1:
                    penalty = penalty - 50
        # penalty for center pawn on original squares
        if sq in [e2, d2, c2]:
            if manAt(sq) == man.pawn:
                penalty = penalty - 96
        # a knight on the rim is dim
        if afile(sq) or hfile(sq):
            if manAt(sq) == man.knight:
                penalty = penalty - 89
        # penalty for king in center
        if manAt(sq) == man.king:
            if centerfile(sq):
                penalty = penalty - 77
            if not firstrank(sq):
                penalty = penalty - 100
    return penalty
예제 #2
0
def bpenalty():
    penalty = 0
    for sq in board.blackMen:
        # penalty for knight and bishop on original rank
        if lastrank(sq):
            if manAt(sq) == -man.knight:
                penalty = penalty + 66
                # get that kings knight out
                if sq == g8:
                    penalty = penalty + 50
            elif manAt(sq) == -man.bishop:
                penalty = penalty + 61
                # get that kings bishop out
                if sq == f8:
                    penatly = penalty + 50
        # penalty for center pawn on original squares
        if sq in [e7, d7, c7]:
            if manAt(sq) == -man.pawn:
                penalty = penalty + 96
        # a knight on the rim is dim
        if afile(sq) or hfile(sq):
            if manAt(sq) == -man.knight:
                penalty = penalty + 89
        # penalty for king in center
        if manAt(sq) == -man.king:
            if centerfile(sq):
                penalty = penalty + 77
            if not lastrank(sq):
                penalty = penalty + 100
    return penalty
예제 #3
0
def prdashPiece(mv, mvs):
    assert tag(mv) == "-"
    assert isPiece(manAt(osq(mv)))
    # simplest form - pln
    p = man.pr(manAt(osq(mv)))
    ln = square.pr(nsq(mv))
    s = "%s%s" % (p, ln)
    found = algebraic.find(s, mvs)
    if len(found) == 1:
        return s
    # disabiguate by file - pfln
    f = "abcdefgh"[col(osq(mv))]
    s = "%s%s%s" % (p, f, ln)
    found = algebraic.find(s, mvs)
    if (len(found)) == 1:
        return s
    # disambiguate by rank - prln
    r = "12345678"[row(osq(mv))]
    s = "%s%s%s" % (p, r, ln)
    found = algebraic.find(s, mvs)
    if (len(found)) == 1:
        return s
    # disambiguate by both -rare but possible - prfln
    s = "%s%s%s%s" % (p, r, f, ln)
    if (len(found)) == 1:
        return s
    # there should be no other cases given that move is legal
    assert False
예제 #4
0
def prcapturePiece(mv, mvs):
    assert tag(mv) in ["x", "x/", "xep"]
    assert isPiece(manAt(osq(mv)))
    # simplest form - pxln
    p = man.pr(manAt(osq(mv)))
    ln = square.pr(nsq(mv))
    s = "%sx%s" % (p, ln)
    found = algebraic.find(s, mvs)
    if len(found) == 1:
        return s
    # disambiguate by file - pfxln
    f = "abcdefgh"[col(osq(mv))]
    s = "%s%sx%s" % (p, f, ln)
    found = algebraic.find(s, mvs)
    if len(found) == 1:
        return s
    # disambiguate by rank - prxln
    r = "12345678"[row(osq(mv))]
    s = "%s%sx%s" % (p, r, ln)
    found = algebraic.find(s, mvs)
    if len(found) == 1:
        return s
    # disambiguate by both - prfxln
    s = "%s%s%sx%s" % (p, r, f, ln)
    found = algebraic.find(s, mvs)
    if len(found) == 1:
        return s
    # if move is legal there should be no other cases
    assert False
예제 #5
0
def mkdashpromote(mv):
    assert tag(mv) in ["-/", "x/"]
    assert man.isPawn(board.manAt(osq(mv)))
    assert board.manAt(nsq(mv)) == cmn(mv)
    assert not color(mv) == 'white' or man.whiteQRBN(pmn(mv))
    assert not color(mv) == 'black' or man.blackQRBN(pmn(mv))
    assert not color(mv) == 'white' or board.manAt(osq(mv)) == man.pawn
    assert not color(mv) == 'black' or board.manAt(osq(mv)) == -man.pawn
    assert not tag(mv) == "-/" or cmn(mv) == 0
    assert not tag(mv) == "x/" or cmn(mv) != 0
    assert board.valid()
    # update board
    zobrist.PlaceMan(osq(mv), 0)
    #board.theBoard[osq(mv)] = 0
    zobrist.PlaceMan(nsq(mv), pmn(mv))
    #board.theBoard[nsq(mv)] = pmn(mv)
    # maintain Men
    if color(mv) == 'white':
        board.whiteMen.remove(osq(mv))
        board.whiteMen.add(nsq(mv))
    else:
        board.blackMen.remove(osq(mv))
        board.blackMen.add(nsq(mv))
    board.history[hmc(mv)] = mv
    assert not tag(mv) == "-" or board.valid()
예제 #6
0
def mkxep(mv):
    assert tag(mv) == "xep"
    assert board.manAt(nsq(mv)) == 0
    if color(mv) == 'white':
        assert board.manAt(osq(mv)) == man.pawn
        assert board.manAt(bak(nsq(mv))) == -man.pawn
        zobrist.PlaceMan(osq(mv), 0)
        #board.theBoard[osq(mv)]=0
        zobrist.PlaceMan(nsq(mv), man.pawn)
        #board.theBoard[nsq(mv)]=man.pawn
        zobrist.PlaceMan(bak(nsq(mv)), 0)
        #board.theBoard[bak(nsq(mv))]=0
        board.whiteMen.remove(osq(mv))
        board.whiteMen.add(nsq(mv))
        board.blackMen.remove(bak(nsq(mv)))
    else:
        assert board.manAt(osq(mv)) == -man.pawn
        assert board.manAt(fwd(nsq(mv))) == man.pawn
        zobrist.PlaceMan(osq(mv), 0)
        #board.theBoard[osq(mv)]=0
        zobrist.PlaceMan(nsq(mv), -man.pawn)
        #board.theBoard[nsq(mv)]= -man.pawn
        zobrist.PlaceMan(fwd(nsq(mv)), 0)
        #board.theBoard[fwd(nsq(mv))]=0
        board.blackMen.remove(osq(mv))
        board.blackMen.add(nsq(mv))
        board.whiteMen.remove(fwd(nsq(mv)))
    board.history[hmc(mv)] = mv
예제 #7
0
def bbonus():
    bonus = 0
    for sq in board.blackMen:
        #bonus for rook in center
        if manAt(sq) == -man.rook:
            if sq in [d8, e8, f8]:
                bounus = bonus - 11
        # bonus king at castled sq
        elif manAt(sq) == -man.king:
            if sq == g8:
                bonus = bonus - 12
    return bonus
예제 #8
0
def wbonus():
    # bonus for rook in center
    bonus = 0
    for sq in board.whiteMen:
        if manAt(sq) == man.rook:
            if sq in [d1, e1, f1]:
                bounus = bonus + 11
        #bonus king at castled sq
        elif manAt(sq) == man.king:
            if sq == g1:
                bonus = bonus + 12
    return bonus
예제 #9
0
def prcapturePawn(mv, mvs):
    assert tag(mv) in ["x", "x/", "xep"]
    assert isPawn(manAt(osq(mv)))
    # simplest form - fxln
    f = "abcdefgh"[col(osq(mv))]
    ln = square.pr(nsq(mv))
    if tag(mv) == "x/":
        q = man.pr(pmn(mv))
        s = "%sx%s=%s" % (f, ln, q)
    else:
        s = "%sx%s" % (f, ln)
    found = algebraic.find(s, mvs)
    if len(found) == 1:
        return s
    # disambiguate by both - rfxln
    rf = square.pr(osq(mv))
    if tag(mv) == "x/":
        s = "%sx%s=%s" % (rf, ln, q)
    else:
        s = "%sx%s" % (rf, ln)
    found = algebraic.find(s, mvs)
    if len(found) == 1:
        return s
    # if move is legal there should be no other cases
    assert False
예제 #10
0
def btrialbishop(h, sq):
    assert board.blackToMove()
    assert h == len(board.history)
    assert board.manAt(sq) == -man.bishop
    global mvs
    for dir in [dfr, dfl, dbr, dbl]:
        s = dir(sq)
        done = False
        while not s == None and not done:
            if board.empty(s):
                mvs.append((h, "-", sq, s))
                s = dir(s)
            elif man.isWhite(board.manAt(s)):
                mvs.append((h, "x", sq, s, board.manAt(s)))
                done = True
            elif man.isBlack(board.manAt(s)):
                done = True
예제 #11
0
def btrialrook(h, sq):
    assert board.blackToMove()
    assert h == len(board.history)
    assert board.manAt(sq) == -man.rook
    global mvs
    for dir in [fwd, rgt, bak, lft]:
        s = dir(sq)
        done = False
        while not s == None and not done:
            if board.empty(s):
                mvs.append((h, "-", sq, s))
                s = dir(s)
            elif man.isWhite(board.manAt(s)):
                mvs.append((h, "x", sq, s, board.manAt(s)))
                done = True
            elif man.isBlack(board.manAt(s)):
                done = True
예제 #12
0
def umkcapture(mv):
    assert tag(mv) == "x"
    assert man.isMan(mn(mv))
    assert not color(mv) == 'white' or man.isBlack(mn(mv))
    assert not color(mv) == 'black' or man.isWhite(mn(mv))
    assert board.valid()
    umkdash(mv)
    # board.theBoard[nsq(mv)] = cmn(mv)  # WHAT ???
    # note the theBoard will be invalid at this point
    if color(mv) == 'white':
        assert man.isBlack(board.manAt(nsq(mv)))
        board.blackMen.add(nsq(mv))
    else:
        assert man.isWhite(board.manAt(nsq(mv)))
        board.whiteMen.add(nsq(mv))
    # after the above board maintennance it will be valid again
    assert board.valid()
예제 #13
0
def moves():
    assert manAt(board.whiteKingAt) == king
    assert manAt(board.blackKingAt) == -king
    legalmoves = []
    for mv in trial.trialmoves():
        if not (move.tag(mv) in ["OO","OOO"]) and man.isKing(manAt(move.nsq(mv))):
            print "legal.19: mv=",mv
            board.dump()
        move.make(mv)
        assert manAt(board.whiteKingAt) == king
        assert manAt(board.blackKingAt) == -king
        if board.blackToMove():
            if move.isOO(mv):
                if not blackAttacks(e1) and not blackAttacks(f1) and not blackAttacks(g1):
                    legalmoves.append(mv)
            elif move.isOOO(mv):
                if not blackAttacks(e1) and not blackAttacks(d1) and not blackAttacks(c1):
                    legalmoves.append(mv)
            elif not blackAttacks(board.whiteKingAt):
                legalmoves.append(mv)
        elif board.whiteToMove():
            if move.isOO(mv):
                if not whiteAttacks(e8) and not whiteAttacks(f8) and not whiteAttacks(g8):
                    legalmoves.append(mv)
            elif move.isOOO(mv):
                if not whiteAttacks(e8) and not whiteAttacks(d8) and not whiteAttacks(c8):
                    legalmoves.append(mv)
            elif not whiteAttacks(board.blackKingAt):
                legalmoves.append(mv)
        move.umake(mv)
    assert manAt(board.whiteKingAt) == king
    assert manAt(board.blackKingAt) == -king
    assert noKingCapture(legalmoves) # you never see a king captured in any legal move
    return legalmoves
예제 #14
0
def btrialking(h, sq):
    assert board.blackToMove()
    assert h == len(board.history)
    assert board.manAt(sq) == -man.king
    global mvs
    for dir in [fwd, dfr, rgt, dbr, bak, dbl, lft, dfl]:
        s = dir(sq)
        if board.empty(s):
            mvs.append((h, "-", sq, s))
        elif man.isWhite(board.manAt(s)):
            mvs.append((h, "x", sq, s, board.manAt(s)))
        elif man.isBlack(board.manAt(s)):
            pass
    if board.blackAllowOO and board.empty(f8) and board.empty(g8):
        mvs.append((h, "OO", e8))
    if board.blackAllowOOO and board.empty(d8) and board.empty(
            c8) and board.empty(b8):
        mvs.append((h, "OOO", e8))
예제 #15
0
def wtrialking(h, sq):
    assert board.whiteToMove()
    assert h == len(board.history)
    assert board.manAt(sq) == man.king
    global mvs
    for dir in [fwd, dfr, rgt, dbr, bak, dbl, lft, dfl]:
        s = dir(sq)
        if board.empty(s):
            mvs.append((h, "-", sq, s))
        elif man.isBlack(board.manAt(s)):
            mvs.append((h, "x", sq, s, board.manAt(s)))
        elif man.isWhite(board.manAt(s)):
            pass
    if board.whiteAllowOO and board.empty(f1) and board.empty(g1):
        mvs.append((h, "OO", e1))
    if board.whiteAllowOOO and board.empty(d1) and board.empty(
            c1) and board.empty(b1):
        mvs.append((h, "OOO", e1))
예제 #16
0
def btrialknight(h, sq):
    assert board.blackToMove()
    assert h == len(board.history)
    assert board.manAt(sq) == -man.knight
    global mvs
    for s in [
            dfr(fwd(sq)),
            dfr(rgt(sq)),
            dbr(rgt(sq)),
            dbr(bak(sq)),
            dbl(bak(sq)),
            dbl(lft(sq)),
            dfl(lft(sq)),
            dfl(fwd(sq))
    ]:
        if board.empty(s):
            mvs.append((h, "-", sq, s))
        elif man.isWhite(board.manAt(s)):
            mvs.append((h, "x", sq, s, board.manAt(s)))
예제 #17
0
def noKingCapture(mvs):
    for mv in mvs:
        if move.tag(mv) in ["x","x/"]:
            if man.isKing(move.cmn(mv)):
                print "error (king capture): ",mv
                return False
            if man.isKing(manAt(move.nsq(mv))):
                print "error (king at nsq): ",mv
                return False
    return True
예제 #18
0
def mkdash(mv):
    assert tag(mv) in ["-", "x"]
    assert not tag(mv) == "-" or man.isEmpty(cmn(mv))
    assert not tag(mv) == "x" or man.isMan(cmn(mv))
    assert man.isMan(board.manAt(osq(mv)))
    assert board.valid()

    # maintain allow flags
    if color(mv) == 'white':
        if osq(mv) == e1 and board.manAt(e1) == man.king:
            board.whiteAllowOO = False
            board.whiteAllowOOO = False
        elif osq(mv) == h1 and board.manAt(h1) == man.rook:
            board.whiteAllowOO = False
        elif osq(mv) == a1 and board.manAt(a1) == man.rook:
            board.whiteAllowOOO = False
    else:
        if osq(mv) == e8 and board.manAt(e8) == -man.king:
            board.blackAllowOO = False
            board.blackAllowOOO = False
        elif osq(mv) == h8 and board.manAt(h8) == -man.rook:
            board.blackAllowOO = False
        elif osq(mv) == a8 and board.manAt(a8) == -man.rook:
            board.blackAllowOOO = False

    # maintain KingAt and Men sets
    if color(mv) == 'white':
        board.whiteMen.remove(osq(mv))
        board.whiteMen.add(nsq(mv))
        if board.manAt(osq(mv)) == man.king:
            board.whiteKingAt = nsq(mv)
    else:
        board.blackMen.remove(osq(mv))
        board.blackMen.add(nsq(mv))
        if board.manAt(osq(mv)) == -man.king:
            board.blackKingAt = nsq(mv)

    # update board
    zobrist.PlaceMan(nsq(mv), board.theBoard[osq(mv)])
    zobrist.PlaceMan(osq(mv), 0)

    #board.theBoard[nsq(mv)] = board.theBoard[osq(mv)]
    #board.theBoard[osq(mv)] = 0

    # update history
    board.history[hmc(mv)] = mv
    assert not tag(mv) == "-" or board.valid()
예제 #19
0
def btrialqueen(h, sq):
    assert board.blackToMove()
    assert h == len(board.history)
    assert board.manAt(sq) == -man.queen
    global mvs
    for dir in [fwd, rgt, bak, lft, dfr, dfl, dbr, dbl]:
        s = dir(sq)
        done = False
        while not s == None and not done:
            if board.empty(s):
                mvs.append((h, "-", sq, s))
                s = dir(s)
            elif man.isWhite(board.manAt(s)):
                mvs.append((h, "x", sq, s, board.manAt(s)))
                done = True
            elif man.isBlack(board.manAt(s)):
                done = True
            else:
                print "error in btrialqueen"
                sys.exit(1)
예제 #20
0
def moves():
    assert manAt(board.whiteKingAt) == king
    assert manAt(board.blackKingAt) == -king
    legalmoves = []
    for mv in trial.trialmoves():
        make(mv)
        assert manAt(board.whiteKingAt) == king
        assert manAt(board.blackKingAt) == -king
        if blackToMove():
            if isOO(mv):
                if not blackAttacks(e1) and not blackAttacks(f1) and not blackAttacks(g1):
                    legalmoves.append(mv)
            elif isOOO(mv):
                if not blackAttacks(e1) and not blackAttacks(d1) and not blackAttacks(c1):
                    legalmoves.append(mv)
            elif not blackAttacks(board.whiteKingAt):
                legalmoves.append(mv)
        elif whiteToMove():
            if isOO(mv):
                if not whiteAttacks(e8) and not whiteAttacks(f8) and not whiteAttacks(g8):
                    legalmoves.append(mv)
            elif isOOO(mv):
                if not whiteAttacks(e8) and not whiteAttacks(d8) and not whiteAttacks(c8):
                    legalmoves.append(mv)
            elif not whiteAttacks(board.blackKingAt):
                legalmoves.append(mv)
        umake(mv)
    assert manAt(board.whiteKingAt) == king
    assert manAt(board.blackKingAt) == -king
    assert noKingCapture(legalmoves) # you never see a king captured in any legal move
    return legalmoves
예제 #21
0
def prdashPawn(mv, mvs):
    assert tag(mv) == "-" or tag(mv) == "-/"
    assert isPawn(manAt(osq(mv)))
    # simplest form - ln
    ln = square.pr(nsq(mv))
    if tag(mv) == "-/":
        q = man.pr(pmn(mv))
        s = "%s=%s" % (ln, q)
    else:
        s = ln
    found = algebraic.find(s, mvs)
    if len(found) == 1:
        return s
예제 #22
0
def mkcapture(mv):
    assert tag(mv) == "x"
    assert not color(mv) == 'white' or man.isBlack(board.manAt(nsq(mv)))
    assert not color(mv) == 'black' or man.isWhite(board.manAt(nsq(mv)))
    assert board.valid()
    assert not man.isKing(board.manAt(nsq(mv)))
    mkdash(mv)
    if color(mv) == 'white':
        board.blackMen.remove(nsq(mv))  # <<--------
        # capturing rooks on original squares affects castling
        if nsq(mv) == h8:
            board.blackAllowOO = False
        elif nsq(mv) == a8:
            board.blackAllowOOO = False
    else:
        board.whiteMen.remove(nsq(mv))
        # capturing rooks on original squares affects castling
        if nsq(mv) == h1:
            board.whiteAllowOO = False
        elif nsq(mv) == a1:
            board.whiteAllowOOO = False
    assert board.valid()
예제 #23
0
def umkdashpromote(mv):
    assert tag(mv) in ["-/", "x/"]
    assert board.manAt(osq(mv)) == 0
    assert board.manAt(nsq(mv)) == pmn(mv)
    assert not color(mv) == 'white' or man.whiteQRBN(pmn(mv))
    assert not color(mv) == 'black' or man.blackQRBN(pmn(mv))
    assert not tag(mv) == "-/" or cmn(mv) == 0
    assert not tag(mv) == "x/" or cmn(mv) != 0
    assert board.valid()
    zobrist.PlaceMan(nsq(mv), cmn(mv))
    #board.theBoard[nsq(mv)] = cmn(mv)
    if color(mv) == 'white':
        zobrist.PlaceMan(osq(mv), man.pawn)
        #board.theBoard[osq(mv)] = man.pawn
        board.whiteMen.remove(nsq(mv))
        board.whiteMen.add(osq(mv))
    else:
        zobrist.PlaceMan(osq(mv), -man.pawn)
        #board.theBoard[osq(mv)] = -man.pawn
        board.blackMen.remove(nsq(mv))
        board.blackMen.add(osq(mv))
    del board.history[hmc(mv)]
    assert not tag(mv) == "-" or board.valid()
예제 #24
0
def whiteKnightAttacks(sq):
    for s in [
            dfl(fwd(sq)),
            dfr(fwd(sq)),
            dfr(rgt(sq)),
            dbr(rgt(sq)),
            dbr(bak(sq)),
            dbl(bak(sq)),
            dbl(lft(sq)),
            dfl(lft(sq))
    ]:
        if board.manAt(s) == man.knight:
            return True
    return False
예제 #25
0
def mkxep(mv):
    assert tag(mv) == "xep"
    assert board.manAt(nsq(mv)) == 0
    if color(mv) == 'white':
        assert board.manAt(osq(mv)) == man.pawn
        assert board.manAt(bak(nsq(mv))) == -man.pawn
        board.theBoard[osq(mv)] = 0
        board.theBoard[nsq(mv)] = man.pawn
        board.theBoard[bak(nsq(mv))] = 0
        board.whiteMen.remove(osq(mv))
        board.whiteMen.add(nsq(mv))
        board.blackMen.remove(bak(nsq(mv)))
    else:
        assert board.manAt(osq(mv)) == -man.pawn
        assert board.manAt(fwd(nsq(mv))) == man.pawn
        board.theBoard[osq(mv)] = 0
        board.theBoard[nsq(mv)] = -man.pawn
        board.theBoard[fwd(nsq(mv))] = 0
        board.blackMen.remove(osq(mv))
        board.blackMen.add(nsq(mv))
        print "mv=", mv
        board.whiteMen.remove(fwd(nsq(mv)))
    board.history[hmc(mv)] = mv
예제 #26
0
파일: fen.py 프로젝트: markcornwell/pychess
def prPieceData():
    cnt = 0
    d = ""
    for r in xrange(7,-1,-1):
        for f in xrange(0,8):
            sq = r*8 + f
            m = board.manAt(sq)
            if man.isMan(m):
                if cnt>0:
                    d = d + str(cnt)
                    cnt = 0
                d = d+sym[m]
            else:
                assert man.isEmpty(m)
                cnt = cnt+1
        if r>0:
            d = d + "/"
    return d
예제 #27
0
def wtrials(h, sqset):
    assert board.whiteToMove()
    assert h == len(board.history)
    global mvs
    mvs = []
    for sq in sqset:
        assert man.isWhite(board.manAt(sq))
        if board.manAt(sq) == man.pawn:
            wtrialpawn(h, sq)
        elif board.manAt(sq) == man.knight:
            wtrialknight(h, sq)
        elif board.manAt(sq) == man.bishop:
            wtrialbishop(h, sq)
        elif board.manAt(sq) == man.rook:
            wtrialrook(h, sq)
        elif board.manAt(sq) == man.queen:
            wtrialqueen(h, sq)
        elif board.manAt(sq) == man.king:
            wtrialking(h, sq)
        else:
            print "wtrials: square not occupied"
    return mvs
예제 #28
0
def btrials(h, sqset):
    assert board.blackToMove()
    assert h == len(board.history)
    global mvs
    mvs = []
    for sq in sqset:
        assert man.isBlack(board.manAt(sq))
        if board.manAt(sq) == -man.pawn:
            btrialpawn(h, sq)
        elif board.manAt(sq) == -man.knight:
            btrialknight(h, sq)
        elif board.manAt(sq) == -man.bishop:
            btrialbishop(h, sq)
        elif board.manAt(sq) == -man.rook:
            btrialrook(h, sq)
        elif board.manAt(sq) == -man.queen:
            btrialqueen(h, sq)
        elif board.manAt(sq) == -man.king:
            btrialking(h, sq)
        else:
            print "btrials: square not occupied"
    return mvs
예제 #29
0
파일: fen.py 프로젝트: markcornwell/pychess
        av = av + "K"
    if board.whiteAllowOOO:
        av = av + "Q"
    if board.blackAllowOO:
        av = av + "k"
    if board.blackAllowOOO:
        av = av + "q"
    if av=="":
        av = "-"

               
def prEpTargetSq():
    if len(board.history)=0:
        return "-"
    mv = board.lastmove()
    if move.tag(mv)=="-" and board.manAt(move.nsq(mv))==man.pawn:
        if move.color(mv)=='white':
            if square.rank(move.osq(mv))==2 and square.rank(move.nsq(mv))==4:
                return square.pr(square.fwd(move.osq(mv)))
        else:
            assert move.color(mv)=='black'
            if square.rank(move.osq(mv))==7 and square.rank(move.nsq(mv))==5:
                return square.pr(square.bak(move.osq(mv)))
    else:
        return "-"

def prHalfMoveClock():
    #number of half moves since the last pawn advance or capturing move
    return "0"  # TBD
    
def prFullMoveNumber():
예제 #30
0
def whitePawnAttacks(sq):
    for d in [dbr, dbl]:
        if board.manAt(d(sq)) == man.pawn:
            return True
    return False