Novedades
Ya está disponible la versión 2.1 que permite ahora un movimiento mucho más natural de las caras. permite mover más caras dada una misma posición e incluye un cronómetro y un contador de movimientos.
He recibido noticias de que un jugador ha conseguido resolver el cubo en solo 2:07, a ver quién lo hace más rápido. Si lo consigue, que me envíe un mensaje a luismiravallesarrobagmail.com.
Descripción
El cubo de Rubik, como todo el mundo sabe, fue inventado por el señor Rubik, en 1974. Ya llovió. Y todavía hoy hay competiciones para ver quién es capaz de resolverlo en el menor tiempo.
Lo que os presento aquí es un programa para teléfono móvil para jugar con el cubo de Rubik e que intentéis resolverlo. El programa es minimalista. Solamente te presenta un Cubo y puedes mover sus piezas de acuerdo a las reglas de movimiento del cubo de Rubik. El programa ni te va a contar el tiempo que tardes , ni los movimientos que lleves, ni siquiera te va a felicitar cuando termines de resolverlo.
He escrito este programa para jugar con la tecnología Java M3G (Mobile 3D Graphics) y está compilado en particular para los Nokia S60v5 con pantalla tátil. De hecho para mover las piezas hay que usar el dedo o el puntero. No he probado a ejecutarlo móviles de otras marcas pero yo creo que mientras tengan soporte de M3G (es decir del JSR184) creo que funcionará.
Se puede descargar el juego gratuitamente, (siempre y cuando me envíes un agradecimiento si te ha gustado :) aquí:
- El Cubo de Rubik (Fichero .jar instalable de 92 Kb). Mucho cuidado, los que uséis Internet Explorer que os lo dejará con extensión ".zip". El fichero en realidad tiene extensión ".jar". Recomiendo usar otro navegador o bien usar botón derecho "Guardar como..." y elegir el nombre "rubik.jar". Luego ya se puede enviar al móvil para instalarlo.
El código fuente
Antes de que te bajes el código fuente, un "disclaimer". No hay comentarios. No me critiquéis por ello. He hecho el programa para divertirme y no me divierte escribir comentarios.
Otra petición. Si lo bajáis, sed respetuosos con la autoría. El código libre es así. Se puede hacer libremente todas las modificaciones que se quiera, pero se debe mantener la referencia al autor del algoritmo.
El código fuente está en SourceForge. Podeis verlo directamente o bajarlo con SVN. Si queréis colaborar para mejorar el programa escribidme.
Entorno de trabajo
Os cuento un poco el entorno de trabajo que he utilizado por si os viene bien. He utilizado el IDE de Eclipse 3.5 en su versión exprésamente compilada para desarrollo para móviles. Se llama Pulsar for Mobile Java Developers y te lo puedes descargar gratuítamente desde el sitio de Eclipse.
Por otro lado me bajé el SDK de Nokia N97. Es necesario para poder ejecutar en emulación y lo utiliza el propio IDE Eclipse para construir el ejecutable.
En el propio SDK de Nokia viene el Javadoc completo de la librería M3G, aunque como casi siempre, esto no es suficiente, así que he tenido que consultar lo poco que hay en Internet sobre M3G y problar muuuucho. Recomiendo este tutorial:
Algunas cosas que he aprendido
La programación en 3D para móviles tiene cierto parecido con el OpenGL. De hecho es más fácil pasar de OpenGL a móvil que venir de J3D. J3D es el API estándar que propone Sun para Java fuera del ámbito de los móviles. Estuve experimentándolo un poco y no me gustó . Quizás tenga que darle otra oportunidad. El caso es que me parece bastante diferente con respecto al M3G.
M3G es muy sencillo porque es muy limitado, pero eso lo hace muy interesante, ya que te enfrentas solamente a una veintena de clases. El hecho de ser para móviles le obliga a ser conciso. No hay un montón de patrones implementados como cabría esperar de una librería de Java normal. Aquí se va al grano.
La sencillez de la librería es virtud pero también pecado. Para crear una formar en 3D hay que trabajar directamente con triángulos. No hay librerías de primitivas. En mi caso ha sido sencillo porque solamente tuve que trabajar con planos colocados en las 3 dimensiones. Me copié el código que genera un plano de 1x1 y con ello tiré. Pero si hay que programar figuras más complejas entonces convendrá dibujarlas con algún editor 3D y exportar la figura al formato m3G que es capaz de leer esta librería.
Me tuve que pegar bastante con las transformaciones, en especial las rotaciones. La rotación de las caras del cubo fue un suplicio. Intenté hacerlo utilizando la clase Transform pero no fuí capaz. Al final descubrí que las rotaciones que se pueden conseguir con esta clase son rotaciones con respecto a si mismo de cada objeto. No se puede utilizar para rotar respecto a un punto separado del objeto. Finalmente tuve que rotar utilizando una multiplicación de matrices un poco fuera de los recursos que ofrece la librería. Todo este follón quizás tenga algo que ver con el hecho de que en el mundo 3D soy un aficionado.
Una de las cosas más complejas ha sido la interacción. Es dificil manejar un objeto 3D desde una pantalla 2D. Los gestos con el puntero son muy dificiles de trasladar al movimiento 3D. En 2D los movimientos en el eje y,x son ambiguos. Puse a probar el juego con usuarios y fracasé varias veces porque no conseguía que supieran deducir cómo funcionaba el movimiento y no conseguí en ningún caso que el primer gesto guiado por la intuición respondiera a lo que el usuario esperaba. Al final lo cambié todo. En la versión 2.0 espero tener éxito porque ahora se mueve como teóricamente esperan los usuarios, pero sólo teóricamente. En el momento de escribir esto , no está probado con usuarios.
Aunque este programa lo he creado para divertirme a veces uno piensa si debe pedir dinero por ello o no. La tentación de intentar venderlo se me ha quitado de la cabeza al saber lo que tengo que hacer para publicar el programa en un sitio como Ovistore. Ovistore es un sitio como el AppStore de Apple pero en este caso de Nokia. Es como un almacen enorme de aplicaciones para el móvil. Lo bueno de este almacen es la visibilidad que tiene, porque todos los móviles se venden configurados con enlaces hacia a él. Pues bien, para poder colgar un programa en este almacen hay que:
- Pagar a Nokia 50€ por registrarse. Luego, Nokia se queda el 30% de las ventas.
- Un requisito es que el programa debe estar firmado digitalmente. Para conseguir un certificado válido se necesita comprar a una entidad cerificadora reconocida como verisign. Estamos hablando de 500€. La verdad es que en esto de la firma digital patino un poco. En este momento no sé si se podría firmar un ".jar" con el certificiado digital del DNI electrónico ya que es gratis. Por favor, si alguien lo sabe que me lo diga. Lo busqué por Internet, pero no lo encontré.
Otros Cubos
Sé que no soy el único. De hecho ya he encontrado un par de Cubos de Rubik para Móvil:
- Offscreen Technologies tiene un Cubo de Rubik para Symbian . Está muy logrado.
- En el OviStore de Nokia también puedes encontrar otro Cubo de Rubik de 2, 3, y 4 piezas por lado.
- Destacar también este Applet que se Josef Jeniskel que está muy logrado. Al ser un Applet lo podemos ejecutar desde el navegador.
- El Rubik's Touch Cube roza ya la esquizofrenia. Es un cubo de rubik real, con forma de cubo, pero sus caras son virtuales. hay que verlo para entenderlo.
Curiosidades
¿ Sabías que ?
- El record del mundo de resolución del cubo está en 8.72 segundos.
- El número de combinaciones posibles del cubo supera el trillón.
- Un niño de 12 años encontró un algoritmo para resolver el cubo, y lo publicó allá por los años 70 y fué un éxito mundial.
- Se ha demostrado que en el peor de los casos el cubo se puede resolver en 23 movimientos.
Mejoras futuras
Si me animo me gustaría hacer las siguientes mejoras:
- Añadir un botón para resolver el cubo.
- Hacer el cubo con fotos en vez de poner colores.





