En este articulo aqui les comparto un codigo para un juego en C pensado en reproducir el funcionamiento del juego incuido en Windows. Este codigo fue probado en el compilador Dev C++ que puede descargarse gratuitamente via web.
APOYO A ENCUESTA
Hola a todos les escribo para apoyarme con una pequeña encuesta a traves deEncuesta Facil solo te tomara un minuto.
Les dejo la direccion en este URL
http://www.encuestafacil.com/RespWeb/Qn.aspx?EID=2051724
Espero que la informacion de este foro les sea de utilidad y gracias por sus visitas
Este juego esta pensado sobre todo para repasar y reafirmar nuestra tecnica en C para el manejo de arreglos y uso de funciones aleatorias las cuales en este programa tienen una importancia para colocar las bombas y agregar mensajes al usuario con la idea de hacer mas interactivo el juego.
El programa se encuentra segmentado en 4 funciones y un main que lleva a cabo la ejecucion del juego. El funcionamiento del juego se basa en un arreglo bidimensional el cual esta cargado dependiendo del nivel seleccionado de valores 1 como vacio y valores de 3 colocados aleatoriamente que representan las bombas.
Depuracion y mejoras
En el desarrollo de este proyecto una mejora a considerar para la siguiente version es agregar la generacion de tableros ajustables dependiendo del nivel seleccionado. Recordemos que el videojuego original tenia esta caracteristica ademas de que recordemos que conforme el tablero sea mas grande el juego es mas dificl por la cantidad de casillas sobre las que tenemos que movernos.
Nuevos retos
Este codigo puede servir de experiencia para desarrollar despues un juego de gato Tic Tac Toe en el cual el reto consiste en hacer que el programa tome la mejor decision posible en cada tirada de las casillas aun sin tirada del tablero en base a la probabilidad de las casillas restantes para formar una combinacion de gato ya sea esta horizontal, vertical o cruzada.
Juego de gato
Recordemos que mientras mejor desarrollado este nuestro algoritmo nuestro juego sera mas entretenido y retador para el jugador, por lo que no solo la presentacion sino el corecto funcionamiento del juego constituye una parte fundamental en la creacion de videojuegos.
Menu del juego y comentarios
El juego en su menu inicial tiene acceso a 5 niveles en el cual se agregan 5 bombas por cada nivel. El juego mostrara un mensaje de felicitacion en caso de ganar. Para jugar en cada nivel debes ingresar las coordenadas de tu tirada la cual esta marcada en los bordes del tablero para poder escogerlo.
Menu Principal del juego de Buscaminas
Juego corriendo
Perdi ni modo
Espero que estos programas les sean de utilidad para su preparacion en C. Proximamente habra algunos programas tipo tutorial enfocados en el uso de estructuras de datos.
Saludos y felices fiestas
/*Buscaminas 1.0
Juan Lopez
*/
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <stdlib.h>
#include <time.h>
void imprimir_tablero(int tablero[][15], int perder);
void colocar_bombas(int minas[][15], int bum);
void frases_1(int buscar);
void frases_2(int numero);
#define RENGLON 15
#define COLUMNA 15
int main()
{
int buscaminas[RENGLON][COLUMNA] = {0}, i, j;
int nivel, bombas; //bombas aleatorias
int gameStatus, gameCounter = 0, victoria; //control del juego
int tiradas, frases; //estadisticas del juego
float rating;
char salida;
do{
system("cls");
printf("\n\tBuscaminas 1.0-\n\n");
printf("10 bombas en el primer nivel + 5 por cada uno.\n\n");
printf("~Ingresa el nivel del juego:\n%d.-Nivel 1\n", 1);
printf("%d.-Nivel 2\n%d.-Nivel 3\n%d.-Nivel 4\n%d.-Nivel 5\n", 2, 3, 4, 5);
// gotoxy(30, 6);
scanf("%d", &nivel);
switch(nivel){
case 1: bombas = 10;
break;
case 2: bombas = 15;
break;
case 3: bombas = 20;
break;
case 4: bombas = 25;
break;
case 5: bombas = 30;
break;
default: printf("Seleccion invalida, intente de nuevo.\n\n");
break;
}
srand(time(NULL)); //generacion de numeros aleatorios
colocar_bombas(buscaminas, bombas);
tiradas = 0; //este contador lleva cuenta del numero de tiradas en el juego
do{
system("cls");
printf("\n-Buscaminas 1.0-\n\n");
imprimir_tablero(buscaminas, gameStatus);
printf("\n"); //nueva linea
printf("*Ingrese la tirada[i, j]: ");
scanf("%d%d",&i, &j);
if(buscaminas[i][j] == 3){
gameStatus = -1;
tiradas++;
system("cls");
printf("\nBuscaminas1.0-\n\n");
imprimir_tablero(buscaminas, gameStatus);
// gotoxy(80, 4);
printf("\t\t\t\t\t ¡¡¡Perdiste, el juego ha terminado!!");
getch();
}
else
{
buscaminas[i][j] = 1;
gameCounter++;
tiradas++;
}
if(gameCounter == (225 - bombas) )
{
victoria = 1;
system("cls");
printf("\nBuscaminas1.0-\n\n");
imprimir_tablero(buscaminas, gameStatus);
// gotoxy(80, 4);
printf("\t\t\t\t\t ¡¡¡Has ganado, felicidades!!");
getch();
}
}while(gameStatus != -1 || victoria == 1);
system("cls");
rating = ((float)gameCounter * 100) / 225;
printf("\n-Buscaminas 1.0- Estadisticas del juego.\n\n");
printf("Tu rating de juego es %.2f %.2f%\n", rating);
printf("*No. de tiradas %d.\n\n", tiradas);
frases = 1 + rand() % 4;
if(gameStatus == -1)
frases_2(frases);
else if(victoria == 1)
frases_1(frases);
printf("\n\n");
printf("¿Desea jugar de nuevo(S/N)?: ");
salida = getch();
salida = tolower(salida);
for(i = 0; i <= RENGLON - 1; i++)
for(j = 0; j <= COLUMNA - 1; j++)
buscaminas[i][j] = 0;
gameCounter = 0;
}while(salida == 's');
system("cls");
printf("\nBuscaminas1.0-\n\n");
printf("\nCreditos\nHecho por Juan Lopez.\nVuelve pronto..");
getch();
//system("PAUSE");
return 0;
}
/*La sig. funcion coloca las bombas en el tablero por medio de una
funcion aleatoria de 0-14 El valor de en el arreglo 3 es su valor logico en el programa
de bombas
*/
void colocar_bombas(int minas[][15], int bum)
{
int i, renglon, columna;
for(i = 1; i <= bum; i++)
{
renglon = 0 + rand() % 14;
columna = 0 + rand() % 14;
minas[renglon][columna] = 3;
}
}
void frases_1(int buscar)
{
switch(buscar)
{
case 1: printf("¡Muy bien!\n");
break;
case 2: printf("¡Excelente!\n");
break;
case 3: printf("¡Buen trabajo!\n");
break;
case 4: printf("¡Sigue asi!\n");
break;
}
}
void frases_2(int numero)
{
switch(numero)
{
case 1: printf("¡Muy bien!\n");
break;
case 2: printf("¡Excelente!\n");
break;
case 3: printf("¡Buen trabajo!\n");
break;
case 4: printf("¡Sigue asi!\n");
break;
}
}
void imprimir_tablero(int tablero[][15], int perder)
{
int i, j;
for(i = 0; i <= RENGLON -1; i++) //encabezado
printf("%d ", i);
printf("\n"); //nueva linea
for(i = 0; i <= COLUMNA - 1; i++)
printf("--");
printf("\n");
for(i = 0; i <= RENGLON -1; i++)
{
for(j = 0; j <= COLUMNA - 1; j++){
if(tablero[i][j] == 1)
printf("%d ", tablero[i][j]);
else if((tablero[i][j] == 3) && (perder == -1))
printf("%c ", '*');
else
printf("%c ", '#');
}
printf("| %d", i);
printf("\n");
}
}
GRACIAS!!!!
ResponderEliminarmuchas gracias!!! :)
ResponderEliminarcuales son las variables para la tirada un ejemplo
ResponderEliminarcomo seria el juego de buscaminas en C# solo con condicionales y ciclos (sin arreglos ni matrices)
ResponderEliminarCómo sería si quisiera un nivel personalizado?
ResponderEliminarMUCHAS GRACIAS¡
ResponderEliminar