Saturday, October 07, 2006

El programa de Scrabble del Gemelo

Jesús Ortega, no el político del PRD, sino alguien mucho más buena onda, el "gemelo" (porque tiene un hermano gemelo precisamente), está terminando su tesis de licenciatura en matemáticas (en el ITAM - Instituto tecnológico autónomo de México, creo). Su trabajo trata de un programa que juegue al Scrabble. De hecho, Jesús es, si no mal recuerdo, el campeón nacional de la especialidad, y ha competido en España, en donde -aunque no ganó el primer puesto- logró un premio por la palabra de más puntos al inicio de la partida: "chispeado" (212 puntos). El gemelo es un apasionado de los fractales y tiene su propio blog. Vale la pena visitarlo.

Pues bien, Jesús me pidió ayuda con la interfaz de su programa de Scrabble, que está escrito en C++ pero no tiene una interfaz gráfica adecuada. Después de poner su proyecto en el baúl de los pendientes (que se acumulan cada vez más), lo retomé para mostrarle cómo podría hacerse una interfaz gráfica digna al menos. Obviamente le di un programita demostrativo, en donde aparecen las fichas, el tablero del scrabble y el usuario puede mover dichas fichas en la imagen del tablero.

Curiosamente, en mi primera aproximación utilicé la técnica de Drag&Drop para Delphi, analizada en algunos sitios de Internet. Descubrí qué complicada pueden hacer la vida los que explican esto. El tema es por lo pronto por demás trivial, y ante mis dudas, al invocar al sitio de expertos en programación encontré que la tarea era muy fácil de hacer. Sin embargo, encontré algo curioso. Cuando uno pone una imagen dentro de una forma dentro de un programa en Delphi, se puede acceder a las coordenadas de dicha imagen con instrucciones como pixels[x,y]. Pero las coordenadas de la imagen son locales a la misma. Es decir, si una forma (ventana de Windows), tiene un sistema de coordenadas, la imagen tiene el suyo propio y así parece pasar con prácticamente todos los componentes visuales. El resultado de esto es entonces que hay que hacer coincidir las coordenadas de la forma con los de la imagen (en este caso el tablero de scrabble), o bien, tener una rutina que reubique las coordenadas de la ficha que queremos mover y soltar (drag and drop), para que quede exactamente donde queremos.

Después de luchar en vano varias horas para encontrar la fórmula adecuada, recordé que usé el componente de greatis, form designer, que me permite mover cualquier componente de una forma en delphi en tiempo de ejecución. Dicho componente lo usé en mi programa de retratos hablados y ahí no existe el problema de las coordenadas locales, por lo que sustituí todo lo que hice por el form designer y hallé que mi programa fue rápidamente más funcional. Así, la primera fase, el demo que debe ahora analizar el gemelo, ya quedó.

2 comments:

Yixus said...

Está muy bien. Ahora estaría bien que nos reuniéramos a discutir lo que sigue.

Yixus said...

Ah, y desafortunadamente hace justo una semana que ya no soy campeón. :(