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)
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
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
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)]
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()