Bienvenido

Bienvenido
Disfruta el contenido

viernes, 19 de diciembre de 2014

Programacion en C Juego de buscaminas


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"); 
          
     }
    
        
    
}


















6 comentarios: