2026. május 29., péntek

Sakkprogram írása pythonba AI csatolással

https://www.mediafire.com/file/lvubqy555p5qar9/Stockfish_17_win32_engines.7z/file
https://stockfishchess.org/download/
----------------------
import chess
import subprocess
import sys

# cSpell:disable

def ask_stockfish(board, stockfish_path, move_time_ms=1000):
    """Közvetlen UCI kommunikáció a Stockfish-sel szálkezelés nélkül."""
    # Elindítjuk a Stockfish folyamatot közvetlenül
    process = subprocess.Popen(
        stockfish_path,
        stdin=subprocess.PIPE,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        text=True
    )
    
    # UCI protokoll inicializálása
    process.stdin.write("uci\n")
    process.stdin.write("isready\n")
    
    # Átadjuk a jelenlegi táblaállást FEN formátumban
    process.stdin.write(f"position fen {board.fen()}\n")
    
    # Megkérjük, hogy gondolkozzon X ezredmásodpercig
    process.stdin.write(f"go movetime {move_time_ms}\n")
    process.stdin.flush()
    
    best_move = None
    # Olvassuk a Stockfish válaszát, amíg meg nem kapjuk a legjobb lépést
    while True:
        line = process.stdout.readline().strip()
        if line.startswith("bestmove"):
            # A sor formátuma pl.: "bestmove e2e4 ponder e7e5"
            best_move = line.split()[1]
            break
            
    # Bezárjuk a folyamatot, hogy ne egye a memóriát
    process.terminate()
    return best_move

def main():
    # 1. ADD MEG A STOCKFISH PONTOS ÚTVONALÁT!
    stockfish_path = "IDE_MÁSOLD_A_STOCKFISH_FÁJL_ÚTVONALÁT"

    # Sakkbábla inicializálása
    board = chess.Board()
    
    print("Sakk MI játék indítása (Biztonságos, szálmentes mód)!")
    print("A lépéseket SAN formátumban add meg (pl.: e4, Nf3, d5).")
    print("A játékból a 'quit' beírásával léphetsz ki.\n")

    human_is_white = True 

    while not board.is_game_over():
        print("-" * 40)
        print(board)
        print("-" * 40)

        if board.turn == human_is_white:
            move_input = input("Te lépsz: ").strip()
            if move_input.lower() == 'quit':
                break
                
            try:
                move = board.parse_san(move_input) if len(move_input) < 5 else board.parse_uci(move_input)
                if move in board.legal_moves:
                    board.push(move)
                else:
                    print("Szabálytalan lépés! Próbáld újra.")
            except ValueError:
                print("Érvénytelen formátum! Használj e4-et vagy e2e4-et.")
        else:
            print("Stockfish gondolkodik...")
            try:
                # Meghívjuk a saját, szálmentes Stockfish függvényünket
                ai_move_str = ask_stockfish(board, stockfish_path, move_time_ms=1000)
                move = chess.Move.from_uci(ai_move_str)
                
                print(f"Stockfish lépése: {move}")
                board.push(move)
            except Exception as e:
                print(f"\nHiba történt a Stockfish hívása közben: {e}")
                print("Ellenőrizd, hogy a Stockfish útvonala pontos-e!")
                break

    print("\n" + "="*10 + " JÁTÉK VÉGE " + "="*10)
    print(board)
    print(f"Eredmény: {board.result()}")

if __name__ == "__main__":
    main()
---------------
Válaszok;
  Sakk MI jatek inditasa (Biztonsogos, szalmentes mod)!
A lepeseket SAN formatumban add meg (pl.: e4, Nf3, d5).
A jatekbol a 'quit' beirasaval lephetsz ki.
---------------------------------------- r n b q k b n r p p p p p p p p . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . P P P P P P P P R N B Q K B N R ---------------------------------------- Te lepsz:
     
        # Predikció (Mit tippel most a MI?)


----------------------------------------
r n b q k b n r
p p p p p p p p
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
P P P P P P P P
R N B Q K B N R
----------------------------------------
Te lepsz: e4
----------------------------------------
r n b q k b n r
p p p p p p p p
. . . . . . . .
. . . . . . . .
. . . . P . . .
. . . . . . . .
P P P P . P P P
R N B Q K B N R
----------------------------------------
Stockfish gondolkodik...

----------------------------------------
r n b q k b n r
p p p p   p p p
. . . . . . . .
. . . . p . . .
. . . . p . . .
. . . . . . . .
P P P P   P P P
R N B Q K B N R
----------------------------------------
Te lepsz: e4
----------------------------------------
r n b q k b n r
p p p p  p p p
. . . . . . . .
. . . p p . . .
. . . p P . . . . . . . . . . . P P P . P P P R N B Q K B N R ---------------------------------------- Stockfish gondolkodik... r n b q k b n r p p p p p p p . . . . . . . . . . . . p . . .
. . . p p . . . . . . . . . . . P P P . P P P R N B Q K B N R Eredmeny: * ** Process exited - Return Code: 0 ** ========== JaTeK VeGE ========== r n b q k b n r p p p p p p p p . . . . . . . . . . . p p . . . . . . p p . . . . . . . . N . . P P P P . P P P R N B Q K B R Eredmeny: *

Nincsenek megjegyzések:

Megjegyzés küldése