martes, 10 de mayo de 2016

What about chesspresso?

Desde hace tiempo estoy con ganas de escribir alguna app asociada al ajedrez, un juego que amo.

Y para ahorrar esfuerzo de desarrollo, me decidía a buscar alguna librería.
¿Que es lo que necesitaría que ofrezca esta librería?

  • Un interprete de archivos PGN y FEN (Base de datos de partidas y posiciones respectivamente)
  • Una interfaz gráfica GUI
  • La capacidad de conectarse a un Motor de Juego
  • Un lector de libro de aperturas
  • Un motor de juego, obviamente no, porque ya existe el Stockfish y otros...

En ese contexto, surge chesspresso (http://www.chesspresso.org/) que pareciera ser una buena librería, escrita en Java, que ofrece varias de estas cosas....  y surge la pregunta de este post

What about chesspresso?

¿Se puede utilizar esta librería? ¿Es gratis? ¿Es open source? ¿Que licencias tiene? ¿Que significa estas licencias? ¿La puedo incluir en mi código si me decido a comercializar mi App de alguna manera? ¿Es difícil de utilizar? ¿Además de Java está la versión para Android? ¿Como se instala? ¿Como se utiliza?





Con estas preguntas en la cabeza, vamos a continuar con el desarrollo del Post.

Comencemos

Descargamos el código fuente del repositorio oficial, aunque hay también algunos proyectos en GitHub

https://sourceforge.net/projects/chesspresso/

Licencia

Tiene licencia GNU Library or Lesser General Public License version 2.0 (LGPLv2)
Y para entender mejor los alcances de esta licencia, me gusta la explicación de la wikipedia sobre GNUL: https://es.wikipedia.org/wiki/GNU_Lesser_General_Public_License

Lamentablemente, no logro aún entender si podría hacer uso del software en el caso que quisiera comercializar la app que utilizaría esta librería. Pareciera que si... pero no estoy seguro. Llegado el caso, revisaré este punto, aunque aún estoy muy lejos de poder subir alguna app de ajedrez al store... sigamos

Descarga y Testing

Directorio de trabajo en mi PC:

/Users/pabloin/Desktop/NoCuestaNada/Mob/CrossFit Chess/04 Chesspresso

Lo primero que observamos, es que viene sin los fuentes y con el Javadoc, y la API parece sencilla. Además que se pueda con Junit

En el readme recomiendan ejecutar:

run the tests with
    java -classpath chesspresso-lib.jar;chesspresso-lib-test.jar;%JUNIT_HOME%\junit.jar chesspresso.AllTests






aunque yo voy a utilizar el eclipse (no tengo ganas de buscar al Junit e incluirlo en el classpath)

Con el workspace en:
/Users/pabloin/Desktop/NoCuestaNada/Mob/CrossFit Chess/04 Chesspresso

Proyecto creado, con la librería chesspresso-lib.jar incluida y también Junit incluido. Aunque Observemos que tenemos que hacer algo para que el eclipse confíe en el jar de chesspresso-lib.jar

chesspresso-lib.jar no puede abrirse porque proviene de un desarrollador no identificado


Continúo para avanzar de otro proyecto tomado de GitHub, donde están los fuentes de la librería:
Lo que en realidad me interesa, es tener una clase de Testing para la librería, que me permita ejecutar un ejemplo de la librería chesspreso funcionado. Esta clase la cual copio a continuación, que reproduce en el visor las primeras jugadas de una apertura Ruy Lopez:


   

package com.probarnocuestanada.chess.chesspreso;

import javax.swing.JFrame;

import org.chesspresso.Chess;
import org.chesspresso.game.Game;
import org.chesspresso.game.view.GameBrowser;
import org.chesspresso.move.IllegalMoveException;
import org.chesspresso.move.Move;

/**
 * @author PabloEzequiel on 6 de may. de 2016
 *
 *         *         ProbarNoCuestaNada.com
 *         

* @no_cuestanada https://github.com/PabloEzequiel https://javaen.blogspot.com
 */
public class ChesspressoGameBrowser extends JFrame {

 private Game chessGame = new Game();
 private GameBrowser gameBrowser = new GameBrowser(chessGame);
 private static final long serialVersionUID = -6856238414376776882L;

 public ChesspressoGameBrowser() {
  setTitle("Chesspresso  test");
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  add(gameBrowser);
  pack();

  addMove(Chess.E2, Chess.E4, false, "Controlando el centro");
  addMove(Chess.E7, Chess.E5, false, "Clasica respuesta");
  
  addMove(Chess.G1, Chess.F3, false, null);
  addMove(Chess.B8, Chess.C6, false, null);
  
  addMove(Chess.F1, Chess.B5, false, "Apertura Ruy Lopez");
  addMove(Chess.A7, Chess.A6, false, null);
 }

 private void addMove(int fromSquareIndex, int toSquareIndex, boolean isCapturingMove, String comment) {
  try {
   short move = Move.getRegularMove(fromSquareIndex, toSquareIndex, isCapturingMove);
   if (Move.isValid(move)) {
    chessGame.getPosition().doMove(move);
    if (comment != null && comment.length() > 0)
     chessGame.addComment(comment);
   }
  } catch (IllegalMoveException e) {
   e.printStackTrace();
  }
 }


}




A continuación creamos otra clase también para que la invoque:


   

package com.probarnocuestanada.chess.chesspreso;

/**
 * @author PabloEzequiel on 6 de may. de 2016
 *
 * * ProbarNoCuestaNada.com
 * 
* @no_cuestanada * https://github.com/PabloEzequiel * https://javaen.blogspot.com */ public class TestChesspresso { public static void main(String[] args) { ChesspressoGameBrowser chessFrame = new ChesspressoGameBrowser(); chessFrame.setVisible(true); System.out.print("Hola"); } }


Después de ejecutar el ejemplo queda, observamos que se levanta un visor básico de Chesspresso:



Veamos que hay mucho para parametrizar aún:

Ok, en este punto damos por cerrado el post. La librería tienen muy buena fama, Quizá no sea demasiado complicado integrarlo a una aplicación Android.

Mi directorio de trabajo fué:

  • /Users/pabloin/Desktop/NoCuestaNada/Mob/CrossFit-Chess-tmp

Creo que no vale la pena compartir el proyecto en GitHub, porque es básicamente la librería y la clase java que copié en le post.



Links
          Ejemplo de uso de la librería

          Una excelente librería de chess en Javascript. No está directamente relacionada a este post,
          pero puede ser una buena idea para el futuro.













0 comentarios:

Publicar un comentario