Gadgets, Apple, software, coches y mucho más en Blog de Blogs


29 Ene

Clonar el buscaminas: Parte 1

Encabezado clonar buscaminas

Ya que hemos tanteado por encima SDL y tenemos una idea base del subsistema de vídeo nos podemos dedicar a nuestro primer juego. He elegido el buscaminas porque es un juego en el que no es necesaria la programación de una IA que juegue contra nosotros ni tan siquiera requiere que hagamos un soporte para animaciones. Para cumplir esta tarea vamos a dejar ya de lado el compilador en modo consola, cuya finalidad ya se ha cumplido. Ahora cuando tengáis que instalar alguna librería a mano no tendréis dudas sobre cómo hacerlo.

Como sucesor he elegido el Dev-Cpp que podéis descargar aquí. Bien, una vez que lo instaléis tendréis que actualizarlo para que compile con SDL, para ello tendréis que ir a Herramientas->Buscar Actualizaciones, una vez ahí cambiar el servidor de descarga por el devpacks, esta un poco desactualizado pero para lo que necesitamos nos sobra. Cuando salga la lista buscamos SDL 1.2.12. A partir de ahí el proceso será automático, salvo que tendréis que copiar el SDL.dll en el directorio system32 o en el de ejecución. Si no hacéis esto último no funcionará.

Para empezar tenemos que crear un proyecto SDL, para ello pulsamos Archivo->Nuevo->Proyecto, y en la pestaña de multimedia, seleccionamos SDL. Borrad todo el contenido del archivo, ya iremos nosotros incluyendo las cosas conforme las necesitemos. Incluid SDL y no olvidéis poner los dos argumentos del main, int argc y char **argv. Son necesarios para que compile el programa. El código queda bastante vacío, escribamos un poco.

Tenemos que definir una estructura, que incluya todos los datos necesarios que controlen el juego. Conforme veamos que vamos necesitando más variables las iremos añadiendo a la estructura. Veamos, para un buscaminas necesitaremos una matriz para almacenar los datos de las minas, otra para almacenar la información de cuantas minas tiene alrededor cada casilla y una última para llevar el control de lo que se verá y lo que no. Esto se puede hacer con una matriz tridimensional de 3 capas del tipo int malla[ancho][alto][capas]. En este momento vamos a definir unas macros que sustituyan el valor del ancho, alto y capas de nuestra matriz. Así facilitaremos la lectura del código y su escritura.

estructura.JPGDe esta forma cada vez que escribamos alguna de las palabras definidas el pre- procesador lo sustituirá por el valor indicado a su lado. La única función de la barra baja delante de los nombres es asegurar que no llamemos igual a una variable por error. Así , como se observa en la imagen, el preprocesador sustituyen los valores por sus macros.

Por ahora no crearemos más variables en la estructura. Lo que vamos a hacer es crear una ventana al igual que en el tutorial anterior, pero esta vez de una forma más seria, es decir rastreando los errores. Ya que cuando el programa explote, o no se ejecute como es debido nos vendrá muy bien esa información. Lo haremos de una forma que es aplicable a cualquier tipo de función de SDL que devuelva de alguna forma su condición de éxito o fracaso. ¿Que cómo sabréis eso?, pues consultando una guía de referencia como la que os comenté en el anterior artículo.

errcontrol.JPG

Como veis la estructura es simple, un if cuya condición es el resultado de la asignación. Si se ha asignado un puntero NULL será true, en caso contrario será false. Al entrar escribe en el archivo stderr, este archivo es creado junto a otro llamado stdout, los crea SDL mientras se ejecuta y toda salida por el canal estándar será escrita en alguno de esos dos. Si no han sido modificado serán destruidos a la salida. Y en caso de modificación se quedaran guardados, entonces podremos abrirlos para ver el error. La función SDL_GetError devuelve una cadena que almacenará el último mensaje de error lanzado por SDL cierta ejecución.

La gestión de eventos será por ahora la misma que en el artículo anterior, un main loop del que se saldrá en el momento que pulsemos alguna combinación de salida o la tecla escape. La única diferencia que haremos ahora será que la variable de control de salida, que llamaremos running, será interna a la estructura que hemos creado para el juego, así que ya podemos añadirla. En la próxima parte ya sacaremos las celdas por pantalla y haremos un gestor de eventos que controle el ratón para pulsar las casillas.

En principio crearemos una función que sitúe 99 minas al azar en la primera capa de la malla y otra que en la segunda almacene los números que se mostrarán cuando descubramos una casilla, que son el número de minas que quedan por descubrir en el entorno de la casilla descubierta. Creo que podréis hacerla por vosotros mismos aunque de todas formas en próximo pondré como he implementado yo esas funciones.

La tercera y última capa de la matriz, la usaremos para llevar control de lo que se ve por pantalla. Será la capa con la que en realidad jugaremos con el ratón, las otras dos se reservan solo para acceso a datos. Tendremos que hacer una función que según los datos almacenados en esta capa muestre unas imágenes u otras. Por cierto y hablando de las imágenes, tendréis que ir creándolas o capturándolas directamente del juego original. Tendrán que ser una por cada numero del 0 al 8, una para bandera, otra para mina y una última para casilla sin descubrir. El tamaño que usare yo será 16×16 pixel y formato bmp.

  • Enviar a:
  • Fresqui
  • Meneame
  • Barrapunto
  • MisterWong
  • Del.icio.us
  • co.mments
  • Yahoo
  • Vidaup
trackback Dirección Trackback
categorias Categoría/s: Curiosidades, Software
tags Tags: , ,

Publicidad

Deja un comentario

Agradeceríamos conocer tu opinión acerca de esta entrada. Abstente de insultar y de utilizar palabras malsonantes. Aquellos comentarios o nicks que no se ajusten a lo anterior, o que mencionen o enlacen a otras webs de forma promocional y descontextualizada, serán borrados/modificados inmediatamente.

Puedes usar las siguientes etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

Publicidad