File size: 3,983 Bytes
56eb498 0356fb2 7bc796e aa815df 0356fb2 56eb498 0356fb2 56eb498 0356fb2 56eb498 0356fb2 56eb498 0356fb2 56eb498 1a3554c 7bc796e 56eb498 0356fb2 56eb498 1a3554c 56eb498 0356fb2 56eb498 3075b60 0efcaab 56eb498 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
from flask import Flask, render_template, request, jsonify
from stockfish import Stockfish, StockfishException
import os
app = Flask(__name__)
# --- Configuration Stockfish ---
STOCKFISH_PATH = "/usr/games/stockfish" # Modifiez selon votre installation
# STOCKFISH_PATH = "/opt/homebrew/bin/stockfish" # macOS
# STOCKFISH_PATH = "stockfish" # Si dans le PATH
STOCKFISH_DEPTH = 12
STOCKFISH_PARAMS = {
"Threads": 2,
"Hash": 128,
"UCI_LimitStrength": False,
"Skill Level": 15 # Niveau modéré (0-20)
}
# Initialiser Stockfish
try:
sf = Stockfish(path=STOCKFISH_PATH, depth=STOCKFISH_DEPTH, parameters=STOCKFISH_PARAMS)
print(f"Stockfish initialisé: {sf._path}")
except Exception as e:
print(f"Erreur Stockfish: {e}")
sf = None
@app.route('/')
def index():
return render_template('index.html')
@app.route('/api/move', methods=['POST'])
def make_move():
if not sf:
return jsonify({'error': 'Stockfish non disponible'}), 500
try:
data = request.get_json()
fen = data.get('fen')
user_move = data.get('move')
# Définir la position
sf.set_fen_position(fen)
# Vérifier et jouer le coup utilisateur
if not sf.is_move_correct(user_move):
return jsonify({'error': f'Coup invalide: {user_move}'}), 400
sf.make_moves_from_current_position([user_move])
# Vérifier si la partie est terminée après le coup utilisateur
eval_after_user = sf.get_evaluation()
user_fen = sf.get_fen_position()
if eval_after_user.get("type") == "mate" and eval_after_user.get("value") == 0:
return jsonify({
'fen': user_fen,
'stockfish_move': None,
'evaluation': eval_after_user,
'game_over': True,
'result': 'Mat ou Pat'
})
# Obtenir le coup de Stockfish
stockfish_move = sf.get_best_move()
if not stockfish_move:
return jsonify({
'fen': user_fen,
'stockfish_move': None,
'evaluation': eval_after_user,
'game_over': True,
'result': 'Partie terminée'
})
# Jouer le coup de Stockfish
sf.make_moves_from_current_position([stockfish_move])
final_fen = sf.get_fen_position()
final_eval = sf.get_evaluation()
# Vérifier si la partie est terminée après le coup de Stockfish
game_over = False
result = None
if final_eval.get("type") == "mate":
game_over = True
if final_eval.get("value") == 0:
result = "Mat ou Pat"
elif final_eval.get("value") > 0:
result = "Stockfish gagne"
else:
result = "Vous gagnez"
return jsonify({
'fen': final_fen,
'stockfish_move': stockfish_move,
'evaluation': final_eval,
'game_over': game_over,
'result': result
})
except StockfishException as e:
return jsonify({'error': f'Erreur Stockfish: {str(e)}'}), 500
except Exception as e:
return jsonify({'error': f'Erreur: {str(e)}'}), 500
@app.route('/api/analyze', methods=['POST'])
def analyze_position():
if not sf:
return jsonify({'error': 'Stockfish non disponible'}), 500
try:
data = request.get_json()
fen = data.get('fen')
sf.set_fen_position(fen)
evaluation = sf.get_evaluation()
best_move = sf.get_best_move()
return jsonify({
'evaluation': evaluation,
'best_move': best_move
})
except Exception as e:
return jsonify({'error': f'Erreur analyse: {str(e)}'}), 500
if __name__ == '__main__':
app.run(debug=True, port=5000) |