Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import chess
- def simplify_fen_string(fen):
- """
- Zjednoduší FEN řetězec odstraněním informací o počtu tahů, čímž zjednoduší a standardizuje jeho formát.
- To umožňuje lepší porovnávání pozic bez zbytečných informací o historii hry.
- """
- parts = fen.split(' ')
- simplified_fen = ' '.join(parts[:4]) # Zachová pouze informace o pozici a hráči na tahu
- return simplified_fen
- def evaluate_position(board):
- """
- Vyhodnotí šachovou pozici na základě pravidel šachu a vrátí numerické hodnocení.
- Vrátí -1000 pro mat, 0 pro remízu a None, pokud hra může pokračovat.
- """
- if board.is_checkmate():
- return -1000 # Mat
- elif board.is_stalemate() or board.is_insufficient_material() or board.can_claim_draw():
- return 0 # Remíza
- else:
- return None # Hra může pokračovat
- def update_AR(board, AR):
- """
- Aktualizuje slovník AR s novými šachovými pozicemi a jejich hodnoceními.
- Používá frontu pro kontrolu a procházení nových pozic.
- """
- queue = list(AR.keys()) # Fronta pozic k prozkoumání
- while queue:
- fen = queue.pop(0) # Odebere první pozici ve frontě
- board.set_fen(fen)
- for move in board.legal_moves:
- board.push(move)
- new_fen = simplify_fen_string(board.fen())
- if new_fen not in AR:
- AR[new_fen] = evaluate_position(board)
- queue.append(new_fen) # Přidá novou pozici do fronty pro další prozkoumání
- board.pop()
- def print_draw_positions(AR):
- """
- Vypíše všechny pozice uložené v slovníku AR, které mají hodnotu odpovídající remíze (0).
- """
- print("Remízové pozice:")
- for fen, value in AR.items():
- if value == -1000:
- print(f"FEN: {fen}, Hodnota: {value}")
- def main():
- """
- Hlavní funkce, která inicializuje šachovnici s počáteční pozicí, aktualizuje slovník AR
- s nově nalezenými pozicemi a nakonec vypíše pozice odpovídající remíze.
- """
- initial_fen = "8/8/8/3Q4/8/8/5k1K/8 w - - 0 1"
- board = chess.Board(initial_fen)
- AR = {simplify_fen_string(initial_fen): evaluate_position(board)}
- update_AR(board, AR)
- print_draw_positions(AR)
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement