def is_move_ok(match, srcx, srcy, dstx, dsty, piece): DIRS = rules.DIRS direction, stepx, stepy = rk_step(None, srcx, srcy, dstx, dsty) if(direction == DIRS['undefined']): return False color = Match.color_of_piece(piece) pin_dir = rules.pin_dir(match, srcx, srcy) if(direction == DIRS['north'] or direction == DIRS['south']): if(pin_dir != DIRS['north'] and pin_dir != DIRS['south'] and pin_dir != DIRS['undefined']): return False elif(direction == DIRS['east'] or direction == DIRS['west']): if(pin_dir != DIRS['east'] and pin_dir != DIRS['west'] and pin_dir != DIRS['undefined']): return False x = srcx + stepx y = srcy + stepy while(x >= 0 and x <= 7 and y >= 0 and y <= 7): field = match.readfield(x, y) if(x == dstx and y == dsty): if(Match.color_of_piece(field) == color): return False else: return True elif(field != Match.PIECES['blk']): return False x += stepx y += stepy return False
def is_move_ok(match, srcx, srcy, dstx, dsty, piece, prom_piece): DIRS = rules.DIRS direction = pw_dir(srcx, srcy, dstx, dsty, piece) if(direction == DIRS['undefined']): return False pin_dir = rules.pin_dir(match, srcx, srcy) if(direction == DIRS['north'] or direction == DIRS['south'] or direction == DIRS['2north'] or direction == DIRS['2south']): if(pin_dir != DIRS['north'] and pin_dir != DIRS['south'] and pin_dir != DIRS['undefined']): return False elif(direction == DIRS['north-west'] or direction == DIRS['south-east']): if(pin_dir != DIRS['north-west'] and pin_dir != DIRS['south-east'] and pin_dir != DIRS['undefined']): return False elif(direction == DIRS['north-east'] or direction == DIRS['south-west']): if(pin_dir != DIRS['north-east'] and pin_dir != DIRS['south-west'] and pin_dir != DIRS['undefined']): return False dstpiece = match.readfield(dstx, dsty) dstcolor = Match.color_of_piece(dstpiece) if(direction == DIRS['north'] or direction == DIRS['south']): if(dstpiece != Match.PIECES['blk']): return False elif(direction == DIRS['2north']): midpiece = match.readfield(dstx, srcy + 1) if(midpiece != Match.PIECES['blk'] or dstpiece != Match.PIECES['blk']): return False elif(direction == DIRS['2south']): midpiece = match.readfield(dstx, srcy - 1) if(midpiece != Match.PIECES['blk'] or dstpiece != Match.PIECES['blk']): return False if(direction == DIRS['north-west'] or direction == DIRS['north-east']): if(dstcolor != Match.COLORS['black']): return is_white_ep_move_ok(match, srcx, srcy, dstx, dsty) elif(direction == DIRS['south-east'] or direction == DIRS['south-west']): if(dstcolor != Match.COLORS['white']): return is_black_ep_move_ok(match, srcx, srcy, dstx, dsty) if(piece == Match.PIECES['wPw'] and dsty == 7 and not (prom_piece == Match.PIECES['wQu'] or prom_piece == Match.PIECES['wRk'] or prom_piece == Match.PIECES['wBp'] or prom_piece == Match.PIECES['wKn'])): return False elif(piece == Match.PIECES['bPw'] and dsty == 0 and not (prom_piece == Match.PIECES['bQu'] or prom_piece == Match.PIECES['bRk'] or prom_piece == Match.PIECES['bBp'] or prom_piece == Match.PIECES['bKn'])): return False return True
def is_move_ok(match, srcx, srcy, dstx, dsty, piece): DIRS = rules.DIRS direction = kn_dir(srcx, srcy, dstx, dsty) if(direction == DIRS['undefined']): return False color = Match.color_of_piece(piece) pin_dir = rules.pin_dir(match, srcx, srcy) if(pin_dir != DIRS['undefined']): return False field = match.readfield(dstx, dsty) if(match.color_of_piece(field) == color): return False return True