Alters

VB.net: A buscar M!nas

Buenas a todos!

Después de un par de series de entradas, me he decidido por crear una serie que espero sea extensa.

En ella trataremos varios aspectos de programación; analizaremos, diseñaremos y crearemos un programa completo. Más tarde tengo pensado continuar con este "proyecto" y hacer algo en web, como por ejemplo una pequeña página dinámica que use una base de datos (que incorporaremos al proyecto progresivamente) para hacer estadísticas, competiciones...

Por ahora centrémonos en el primer paso: el juego de las M!nas (ojo, **ironía** no tiene nada que ver con cualquier juego que tengáis en vuestro PC).

Además, me he decidido a hacer BIEN las entradas. Intentaré escribir más lento (esos fallos otrográficos...) y poner algo de estilo en las entradas (cuadros "tchatchis" para el código, y cosas así).

Os dejo un pequeño índice de lo que será el proyecto inicial:



  • VB.net: A buscar M!nas
    • Análisis
      • ¿Cómo se juega?
      • Análisis teórico del modo de juego
    • Diseño
      • Diseño de algoritmos
      • Diseñando las pantallas del juego
    • Programación
      • Conceptos previos
        • Estructuración de código
        • "Multi-handler"
        • Controles dinámicos (en tiempo de ejecución)
      • Creación del programa + ejecutable (link de descarga)

Bien, definido el índice empecemos: contando esta serán seis entradas; aunque es posible que la quinta (Conceptos previos) la divida en tres... ya veremos.

Por ahora, veamos la primera sección

¿Cómo se juega?

Buscaminas es un juego de lógica de aquellos que me gustan. Está disponible desde hace varias versiones de Windows (desde el 95, si no recuerdo mal).

Tip: Si tienes Windows 7 y quieres jugar, prueba esto:

  - Inicio
  - Panel de control
  - Programas y características (si tienes la vista en iconos) / Programas > Programas y características (categorías)
  - Activar o desactivar las características de Windows
  - Buscamos Juegos y seleccionamos
  - Aceptar, y... ya tenemos los juegos activados

Hay varios niveles de dificultad. En Windows ponen 3 niveles básicos y uno "custom". Estudiaremos los niveles básicos:


  • Fácil:
    • 10 minas
    • Cuadrícula 9x9
  • Intermedio:
    • 40 minas
    • Cuadrícula 16x16
  • Difícil
    • 99 minas
    • Cuadrícula 16x30
El nivel de dificultad no influye en la finalidad del juego, pero creo necesario comentarla.

Bien; para jugar solo debemos saber contar un poco y usar el "coco". La finalidad del juego es marcar (con el botón derecho del ratón, o con el izquierdo si lo tienes configurado para zurdos) todas las minas correctamente, sin pisar (con el otro botón) ninguna de ellas.

Pisar una mina termina el juego, marcar una incorrectamente también (aunque de forma indirecta).

Sin embargo, nos dan un par de ventajas:

  1. Cada zona que no es mina tiene un número (entre 0 y 8), que nos dice cuántas minas tiene esa zona alrededor.
  2. Pisar una zona con 0 minas abre un perímetro de seguridad (toda la zona anexa que no tenga mina, recursivamente).
En nuestro proyecto solo daremos la primera ventaja.

Para jugar necesitamos usar solo el ratón. Las acciones permitidas son:

  • Pisar zona: con el botón izquierdo del ratón (derecho si lo tienes para zurdos)
    • Aplicable en zonas sin destapar
    • Si sale número sigue el juego; de lo contrario pierdes
  • Marcar mina / interrogante: botón derecho (o izquierdo si está configurado para zurdos)
    • Aplicable en zonas tapadas
    • Un interrogante es una marca personal para acordarte que quizás hay mina ahí.
    • Si marcas una zona donde no hay mina, a la larga perderás.
  • Comprobar zona: pulsando ambos botones a la vez.
    • Aplicable a cualquier zona; solo tiene efecto en zonas destapadas
    • Si la zona pulsada tiene todas las minas marcadas, destapará las zonas contiguas. ¡OJO!: si has marcado mal una mina y usas esto, perderás, ya que se abrirá una mina... (esta parte tampoco la implementaremos)
Usando bien el "truco" de comprobar zonas, podemos usar (solo en Windows) la siguiente estrategia:

 - Buscamos abrir una zona (img1)
 - Buscamos un 1 en una esquina, y marcamos el único cuadro adyacente como mina (img2)
 - Hacemos una comprobación en un 1 adyacente (img3)...  - Repetir mientras puedas! (img4)

Nota: No hace falta que sea un 1; mientras esté en una esquina (como en img1) se puede usar un poco de lógica y saber muy fácilmente si es mina o no; entonces podemos hacer casi la mitad del juego (en img4, todo lo que hay descubierto está hecho con este sistema).

img1
img2

img3
































img4

















A partir de ese momento hace falta usar algo de lógica... Tenemos que tener siempre en cuenta el número de minas que tenemos marcado y también el número de minas (las que hay y las marcadas) de los vecinos. Este aspecto es similar al sudoku... se basa en conjeturas y especulación...

Así pues, esta es una pequeña introducción al Buscaminas, la base de nuestro proyecto.

En la próxima entrega deduciremos qué nos hace falta para simular el juego.

Hasta la próxima!