darkmaria / app.py
Docfile's picture
Update app.py
3075b60 verified
raw
history blame
3.98 kB
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)