En esta oportunidad usaremos una libreria llamada python-chess para poder simular una partida de ajedrez y visualizaremos el tablero con ayuda de Flask.
1-Primero instalamos la libreria
pip install python-chess
2- Creamos nuestro archivo app.py e importamos las librerias flask.Flask, chess para crear nuestro tablero y su extension chess.svg para renderearla y poder visualizar nuestros movimientos
from flask import Flaskimport chessimport chess.svg
3.Ahora lo clasico, creamos nuestra app y definimos la ruta.Luego creamos un tablero con chess.Board(), y para renderearlo primero creamos los squares, donde hay varios tipos pero en esta caso pondremos el tipo chess.H8, segundo lo rendereamos con chess.svg, definimos el tablero que ya lo creamos, el tipo de squares y el tamaño, y retornamos el board.
app = Flask(__name__)
@app.route('/chess')defplay():
board = chess.Board()
squares = board.attacks(chess.H8)
board = chess.svg.board(board = board,
squares=squares, size = 400)
return board
if __name__ == "__main__":
app.run(debug=True)
4.Configuramos nuestro ambiente a modo de desarrollo(en cmd) con:
set FLASK_ENV=development
Inicializamos nuestra app con flask run
Ahora solo sera cuestion de darle refresh para poder visualizar los cambios
5.Ahora pasaremos a los movimientos de las fichas, debemos definir el atributo push_san
en nuestro tablero y pasarle como string:
-La inicial de la ficha que quermos mover en ingles, si queremos mover un peon no debemos poner nada
N for knight or horse(caballo)
Nothing for pawn(peon)
R for rook(torre)
Q for queen(reina)
B for bishop(alfil)
K for king(rey)`
-La posicion a la que moveremos la ficha
Por ejemplo, si quiero mover mi caballo blanco a la casilla f3 debo hacer:
board.push_san("Nf3")
Lo cual se veria asi:
from flask import Flask
import chess
import chess.svg
app = Flask(__name__)
@app.route('/chess')defplay():#N for knight or horse#Nothing for pawn#R for rook#Q for queen#B for bishop#K for king
board = chess.Board()
board.push_san("Nf3")
squares = board.attacks(chess.H8)
board = chess.svg.board(board = board,
squares=squares, size = 400)
return board
if __name__ == "__main__":
app.run(debug=True)
Está muy interesante esto, Rodrigo, voy a cacharrear un rato con estos paquetes. Gracias por compartir!