Implementación Buscaminas en C
Enviado por rebecuchismosis • 23 de Agosto de 2017 • Tarea • 1.941 Palabras (8 Páginas) • 350 Visitas
Introducción
Durante bastante tiempo ha sido complicado señalar cual fue el primer videojuego, principalmente debido a las múltiples definiciones de este que se han ido estableciendo, pero se puede considerar como primer videojuego el Nought and crosses, también llamado OXO, desarrollado por Alexander S.Douglas en 1952. El juego era una versión computerizada del tres en raya que se ejecutaba sobre la EDSAC y permitía enfrentar a un jugador humano contra la máquina.
En 1958 William Higginbotham creó, sirviéndose de un programa para el cálculo de trayectorias y un osciloscopio, Tennis for Two (tenis para dos): un simulador de tenis de mesa para entretenimiento de los visitantes de la exposición Brookhaven National Laboratory. Este fue el primer videojuego en permitir el juego entre dos jugadores.
Hasta este punto se ha visto el inicio de los videojuegos, después avanzan con gran rapidez, tanto que para el tiempo en el que el juego buscaminas fue inventado ya existían juegos como el Mario Bros, Pac-Man, Sonic, etc, juegos de 8-bits que fueron inventados unos años antes que el propio buscaminas.
El Buscaminas es un videojuego para un jugador inventado por Robert Donner en 1989. El objetivo del juego es despejar un campo de minas sin detonar ninguna mina.
El juego ha sido programado para muchos sistemas operativos, pero debe su popularidad a las versiones que vienen con Microsoft Windows desde su versión 3.1.
El juego consiste en despejar todas las casillas de una pantalla que no oculten una mina.
Algunas casillas tienen un número, este número indica las minas que suman todas las casillas circundantes. Así, si una casilla tiene el número 3, significa que de las ocho casillas que hay alrededor (si no es en una esquina o borde) hay 3 con minas y 5 sin minas. Si se descubre una casilla sin número indica que ninguna de las casillas vecinas tiene mina y estas se descubren automáticamente. Si se descubre una casilla con una mina se pierde la partida.
Metodología
A continuación, se especificará que es lo que sucede en el código que se programó para la creación del juego de buscaminas, esto significa que se indicará paso por paso que es lo que el programa realiza.
El primer paso fue, como es de ley, incluir todas aquellas librerías que se ocupan para la realización correcta el programa, tales como stdio, stdlib, time y stdbool, esta última se agregó para poder utilizar una variable booleana en el programa que nos indicara si es true o false dicha variable.
Se definieron algunos parámetros, tales como filas y columnas, que sirven para indicar el tamaño del tablero, así también se definieron los valores para cuando existe una bomba en la casilla, para cuando no existe y para cuando no se ha jugado la casilla, también se definieron 3 estados para poder controlar cuando se ejecutaba el programa, tales como jugando, perdedor y ganador.
Enseguida, se declara el tamaño del arreglo (o del campo de minas) llamado minefield, también se declara un arreglo tipo booleano que nos indique si dicha casilla ha sido jugada o no, se declara una variable global llamada nJugadas para saber cuántas casillas se han jugado, y una variable global llamada estado para controlar el estado del juego.
Aquí es cuando empieza la implementación de funciones, tal es el caso de la primera función de nombre iniArr, que se encarga de iniciar el arreglo y darle valores de -3 a todas las casillas del campo al no tener bombas, y un valor falso a jugadas por no tener ninguna casilla jugada.
Unos reglones después de ser indicada la función anterior, se implementa una función de nombre randomB, encargada de poner bombas aleatorias por todo el campo de minas, se hace el uso de tres variables enteras i,x, y, para con un ciclo while controlar que si i (que tiene ya un valor inicial de 1) es menor o igual a nb(b mayúscula) se haga el acomodo aleatorio de bombas en x,y (filas y columnas), dichos valores son asignados a minefield con un valor de -1 por tener bomba, para esta función se tiene como prototipo de función una variable entera de nombre nb (b mayúscula, ya indicada anteriormente) que se encarga de indicar cuantas bombas hay en el campo de minas.
Después se implementa una función de nombre boardDisplay que se encarga de imprimir el tablero, esto se controla mediante ciclos for que, al imprimirse, indica si el usuario piso una mina, si el usuario abrió una casilla sin mina (e indica el número de casillas que tiene a su alrededor) o si una casilla no ha sido abierta.
La siguiente función que se implementa es para saber cuántas bombas existen en el tablero, dicha función tiene como parámetros variables enteras x,y, y dentro del mismo se declaran variables i y j, así mismo de la variable nb que es inicializada en 0, y mediante ciclos for se encarga de indicar cuantas bombas existen. Esta función retorna la variable nb.
La función que le continua es llamaba establecerN, dicha función establece si una casilla tiene bomba o no, se declaran funciones internas i, j y num, con ciclos for se controla si una casilla no tiene bomba.
La función displayAll es la encargada de imprimir (al saber si gano o perdió) el campo de minas con todos sus números y bombas ya mostradas, esto es parecido a la función boardDisplay, con la excepción de que no imprime las casillas sin jugar.
La función nJugadas, es la función encargada de contar cuantas casillas han sido jugadas, tiene como variables enteras num iniciada en 0, i y j, este es controlado con dos ciclos for y con el arreglo booleano jugadas, retorna num.
La siguiente función es la función recursiva encargada de controlar si hay bomba, o en todo caso, cuantas bombas hay alrededor de dicha casilla, recursivePlay tiene como parámetros x,y, dentro tiene declaradas las variables enteras i y j para controlar los for. Si x es mayor o igual que 0 y menor que el número de filas, y si y es mayor igual a 0 y menor que el número de columnas se llama al arreglo jugadas con valor de verdadero para saber que se ha jugado, si el arreglo minefield tiene mina se declara la variable estado como perdedor, y si no se incluye un if, si minefield es igual a 0 indica que hay 0 bombas alrededor, mediante dos for se encarga de comprobar si hay más casillas sin bomba, entra otro if donde si minefield es igual 0 y también jugadas es falso significa que encontró una bomba, y llama a la misma función recursiva, y si no cumple indica que jugadas es verdadero.
...