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)