Advertisement
max2201111

petr good minimax

Mar 23rd, 2024
558
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.11 KB | Science | 0 0
  1. # Import potřebných knihoven
  2. import chess
  3.  
  4. def simplify_fen_string(fen):
  5.     """
  6.    Zjednoduší FEN řetězec odstraněním informací o počtu tahů na konci.
  7.    Tato funkce slouží k zjednodušení a standardizaci FEN řetězců.
  8.    """
  9.     parts = fen.split(' ')
  10.     simplified_fen = ' '.join(parts[:4])  # Zachová základní informace o pozici
  11.     return simplified_fen
  12.  
  13. def evaluate_position(board):
  14.     """
  15.    Vyhodnotí danou pozici na šachovnici.
  16.    Vrátí -1000 pro mat, 0 pro remízu a None, pokud hra stále pokračuje.
  17.    """
  18.     if board.is_checkmate():
  19.         return -1000
  20.     elif board.is_stalemate() or board.is_insufficient_material() or board.can_claim_draw():
  21.         return 0
  22.     else:
  23.         return None
  24.  
  25. def update_AR(board, AR):
  26.     """
  27.    Aktualizuje slovník AR s hodnoceními pozic na základě dostupných tahů.
  28.    """
  29.     changed = True
  30.     while changed:
  31.         changed = False
  32.         for fen in list(AR.keys()):
  33.             board.set_fen(fen)
  34.             for move in board.legal_moves:
  35.                 board.push(move)
  36.                 new_fen = simplify_fen_string(board.fen())
  37.                 if new_fen not in AR:
  38.                     value = evaluate_position(board)
  39.                     AR[new_fen] = value
  40.                     changed = True
  41.                 board.pop()
  42.  
  43. def print_draw_positions(AR):
  44.     """
  45.    Vytiskne všechny remízové pozice (hodnota 0) zaznamenané v slovníku AR.
  46.    """
  47.     print("Remízové pozice:")
  48.     for fen, value in AR.items():
  49.         if value == 0:
  50.             print(f"FEN: {fen}, Hodnota: {value}")
  51.  
  52. def main():
  53.     """
  54.    Hlavní funkce pro inicializaci, aktualizaci AR a výpis remízových pozic.
  55.    """
  56.     initial_fen = "8/2k5/8/1Q6/8/8/5K2/8 w - - 0 1"
  57.     initial_fen = "8/8/8/8/8/8/5k1K/8 w - - 0 1"
  58.    
  59.     board = chess.Board(initial_fen)
  60.     AR = {simplify_fen_string(initial_fen): evaluate_position(board)}
  61.    
  62.     update_AR(board, AR)  # Aktualizuje AR s nově vyhodnocenými pozicemi
  63.     print_draw_positions(AR)  # Vytiskne všechny remízové pozice
  64.  
  65. # Spuštění hlavní funkce
  66. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement