En el último capítulo, enumeramos los protagonistas del juego. Ahora, proponemos una primera implementación del modelo del juego con un conjunto de clases que representan las entidades involucradas:
SpaceWar,
CentralStar,
SpaceShip,
Torpedo.
Antes de definir estas clases en Cuis-Smalltalk, queremos crear una categoría de clases dedicada para agruparlas ahí dentro.
En cualquier ventana de Cuis-Smalltalk, al hacer clic con el botón derecho del ratón en un panel, normalmente aparecerá un menú con las operaciones específicas que se pueden aplicar a ese panel.
Con el puntero del ratón sobre el panel de categorías de clases del navegador (el más a la izquierda), haz lo siguiente:
...click derecho → add item... luego
teclea Spacewar!
Una vez creada nuestra nueva categoría, el navegador propone una
plantilla de código en el panel del código fuente del método –el
inferior– para crear una nueva clase en la categoría Spacewar!.
Object subclass: #NameOfSubclass instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Spacewar!'
Sustituimos el símbolo #NameOfSubclass por un símbolo que
represente el nombre de la clase que queremos crear. Empecemos con
#SpaceWar. Para guardar nuestra clase, mientras estamos
sobre el código de declaración de la clase, hacemos do
...click derecho → Accept... Cuis-Smalltalk nos
preguntará por nuestras iniciales y nombre si no lo ha hecho
antes. También podemos simplemente hacer Ctrl-s (Save).
Ahora sólo tienes que repetir el proceso para cada uno de #SpaceShip,
#CentralStar y #Torpedo. Si fuera necesario,
para obtener otra plantilla de código de clases, clicka en la categoría
de clase Spacewar!.
Cuando termines, tu categoría de clases debería estar rellena con cuatro clases, como se muestra en la Figura 2.2.
Figura 2.2: Categoría de clases Spacewar!
Otro uso importante de una categoría de clase es definir un paquete para
guardar código en un archivo. Un paquete guarda el código de las clases
contenidas en una categoría de clase determinada y algo más, pero
hablaremos de eso más adelante. Para crear nuestro paquete Spacewar! y
guardar el código del juego, utilizamos la herramienta Installed
Packages (Paquetes instalados).
Open... → Installed Packages...
new → Input Spacewar! → Return...
Spacewar! →
botón save...
Figura 2.3: Ventana Installed Package
Se crea un fichero Spacewar!.pck.st junto al archivo de imagen
Cuis-Smalltalk. Para instalar un paquete en un entorno nuevo de Cuis-Smalltalk,
utiliza la herramienta File List (lista de archivos):
Open... → File List...
install package
También puedes arrastrar y soltar el archivo del paquete desde tu
sistema operativo a la ventana de Squeak. Al soltar el archivo sobre la
ventana, Cuis-Smalltalk te preguntará qué quieres hacer con este paquete. Para
instalarlo en tu entorno, simplemente pulsa Install package
(Instalar paquete).
O, puedes abrir un Workspace, teclear Feature require: 'Spacewar!'
y Ctrl-d Do it.
Ahora, hemos creado y guardado el paquete. Cada vez que inicies un nuevo entorno Cuis-Smalltalk, podrás cargar el paquete del juego.
Las clases que hemos definido son estructuras vacías sin estado ni comportamiento. Estas se completarán y refactorizarán en los siguientes capítulos.
Para disfrutar de una experiencia de juego agradable, las naves de los jugadores deben seguir las leyes del movimiento de Newton. La aceleración, la velocidad y la posición se calculan según estas leyes. Las naves están sometidas a dos fuerzas: la aceleración provocada por la fuerza gravitatoria de la estrella central y una aceleración interna procedente de los motores de la nave.
Más adelante, aprenderemos cómo estas ecuaciones se convierten fácilmente en cálculos informáticos.
Figura 2.4: Ecuaciones de las aceleraciones, velocidad y posición