예제 #1
0
def addMan(m, sq):
    global theBoard, whiteKingAt, blackKingAt, whiteMen, blackMen
    if not man.isMan(m):
        print "addman: bad value for man: %s" % m
    elif not square.isq(sq):
        print "addman: bad value for square: %s" % sq
    elif man.isPawn(m) and (square.lastrank(sq) or square.firstrank(sq)):
        print "addman: pawns not allowed on rank" % rank(sq)
    elif occupied(sq):
        print "addman: square %s is occupied" % sq
    elif man.isWhiteKing(m) and not (whiteKingAt == 999):
        print "addman: only one white king allowed"
    elif man.isBlackKing(m) and not (blackKingAt == 999):
        print "addman: only one black king allowed"
    else:
        #assert hash == zobrist.hashBoard()
        if man.isWhite(m):
            if man.isKing(m):
                whiteKingAt = sq
            whiteMen.add(sq)
        else:
            if man.isKing(m):
                blackKingAt = sq
            blackMen.add(sq)
        zobrist.PlaceMan(sq, m)
예제 #2
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
예제 #3
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
예제 #4
0
def umkdash(mv):
    assert tag(mv) in ["-", "x"]
    assert man.isMan(board.theBoard[nsq(mv)])
    board.theBoard[osq(mv)] = board.theBoard[nsq(mv)]
    board.theBoard[nsq(mv)] = 0
    if color(mv) == 'white':
        board.whiteMen.remove(nsq(mv))
        board.whiteMen.add(osq(mv))
        if man.isKing(board.theBoard[osq(mv)]):
            board.whiteKingAt = osq(mv)
    else:
        board.blackMen.remove(nsq(mv))
        board.blackMen.add(osq(mv))
        if man.isKing(board.theBoard[nsq(mv)]):
            board.blackKingAt = nsq(mv)
    del board.history[hmc(mv)]
예제 #5
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()