Loading repository data…
Loading repository data…
Santiagozuloaga / repository
PyChess AI es un proyecto de ajedrez web interactivo que permite a un usuario humano jugar contra una Inteligencia Artificial desarrollada en Python. La aplicación sigue una arquitectura clásica de Front-End (HTML/JavaScript) comunicándose con un Back-End (Flask/Python) para manejar la lógica del juego.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
Un motor de ajedrez con inteligencia artificial desarrollado en Python con Flask
PyChess AI v2.7 es un juego de ajedrez web completo que combina inteligencia artificial avanzada con una interfaz moderna e intuitiva.
v2.7 - Novedades: 🔄 Sistema ELO dinámico con profundidad adaptativa | 💾 Guardado de partidas (PGN + JSON) | ✅ Validación robusta de valores ELO (200-3000)
Motor de IA Inteligente:
Modos de Juego:
Experiencia de Usuario:
Tecnología:
# Inicia el servidor
python main.py
# Abre en tu navegador
http://localhost:5000
# 1. Clonar el repositorio de google drive
# 2. Instalar dependencias
pip install -r requirements.txt
# 4. Ejecutar el servidor
python main.py
requirements.txtFlask==3.0.0
python-chess==1.999
PyChess-AI/
│
├── main.py # Servidor Flask y motor de IA
├── templates/
│ └── index.html # Interfaz web del juego
├── books/ # (Opcional) Libros de aperturas
│ └── book.bin
├── static/ # (Futuro) Recursos estáticos
│ ├── css/
│ └── js/
├── requirements.txt # Dependencias Python
├── README.md # Este archivo
└── LICENSE # Licencia del proyecto aunque no esta incluida
El motor evalúa posiciones futuras usando un árbol de búsqueda:
def minimax(board, depth, alpha, beta, maximizing, start_time):
if depth == 0 or board.is_game_over():
return evaluate_board(board)
if maximizing: # Turno del jugador (Blancas)
max_eval = -∞
for move in board.legal_moves:
eval = minimax(board, depth-1, alpha, beta, False, start_time)
max_eval = max(max_eval, eval)
alpha = max(alpha, eval)
if beta <= alpha:
break # Poda Alpha-Beta
return max_eval
# ...
PIECE_VALUES = {
'P': 100, # Peón
'N': 320, # Caballo
'B': 330, # Alfil
'R': 500, # Torre
'Q': 900, # Reina
'K': 20000 # Rey
}
# En main.py
DEFAULT_DEPTH = 3 # Cambia a 1-5
# 1. Descarga un libro en formato Polyglot (.bin)
# Ejemplo: performance.bin, varied.bin, etc.
# 2. Colócalo en la carpeta books/
mkdir books
cp tu-libro.bin books/book.bin
# 3. El servidor lo cargará automáticamente
# Usar Gunicorn (recomendado)
pip install gunicorn
# Ejecutar con 4 workers
gunicorn -w 4 -b 0.0.0.0:5000 main:app
GET /Retorna la interfaz web principal.
POST /make_moveProcesa un movimiento del jugador.
Request:
{
"move": "e2e4",
"promotion": "q"
}
Response:
{
"status": "success",
"fen": "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR",
"user_move": "e2e4",
"ai_move": "e7e5"
}
POST /set_difficultyCambia el nivel de dificultad.
Request:
{
"difficulty": 3
}
POST /resetReinicia la partida.
Response:
{
"status": "success",
"fen": "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR"
}
POST /save_game ⭐ (v2.7)Guarda la partida actual en formato PGN con metadata JSON.
Request:
{
"filename": "mi_partida",
"overwrite": false
}
Response:
{
"status": "success",
"filename": "mi_partida.pgn",
"message": "Partida guardada como mi_partida.pgn"
}
GET /list_games ⭐ (v2.7)Lista todas las partidas guardadas con metadata.
Response:
{
"status": "success",
"count": 5,
"games": [
{
"vs_machine": true,
"elo": 1950,
"difficulty": 4,
"created_at": "2024-10-20 13:07:42",
"filename": "mi_partida.pgn",
"result": "1-0",
"moves_count": 42
}
]
}
# Instalar pytest
pip install pytest
# Ejecutar tests
pytest test_main.py -v
import pytest
from main import get_piece_value, evaluate_board
import chess
def test_piece_values():
assert get_piece_value('P') == 100
assert get_piece_value('q') == -900
def test_initial_position():
board = chess.Board()
assert evaluate_board(board) == 0
CENTER_FILES = {3, 4} para favorecer control central sin depender de constantes obsoletas en python-chess, evitando el AttributeError y restableciendo el cálculo de movimientos.build_game_over_payload vuelve a producir un payload consistente para modos IA y PvP.127.0.0.1, evitando exposición no deseada.PyChess AI v2.7
├── Backend robusto (Flask)
├── Motor IA (Minimax + Alpha-Beta)
├── Sistema ELO dinámico
├── Guardado de partidas (PGN)
└── Frontend responsive (Chessboard.js)
.bin.startGame() y manejar correctamente setDifficulty, así como resolver el texto ausente tras cerrar el modal.Nota: v2.7 resuelve muchos problemas de robustez y agrega funcionalidades profesionales. La iteración v2.7.1 continúa afinando IA y comunicación con la interfaz.
Hecho por Santiago Zuloaga Daza