DZone Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world

Snippets has posted 5883 posts at DZone. View Full User Profile

Go Game

09.22.2006
| 1512 views |
  • submit to reddit
        Algun juego que alguna ves realice... llamado go, pero que ya no recuerdo.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int menu(){

    int select=0;
    do{
        printf("Menu:\n");
        printf("1. Score\n");
        printf("2. Jugar\n");
        printf("3. Salir\n");
        printf("Entre la opcion:\n");
        scanf("%i",&select);
    }while(!(select>0 && select<4));
  
    return select;    
}

void mostrar_score(int puntaje){
     //Si puntaje <0 entonces no agrega jugador
     //Sino puede agregarlo
}

void jugada_maquina(int **tablero, int f, int c){
	 int i,j;
	 do{
	 	 i=rand()%f;
	 	 j=rand()%c;
	 } while (!tablero[i][j]==0);
	 tablero[i][j]=2;	 
}

void mostrar_tablero(int **tablero,int f, int c){
	 int i,j;
	 for (i=0;i<f;i++){
	 	 for (j=0;j<c;j++){

		 	 switch(tablero[i][j]){
		   	 			 case 0: printf("*");break;
			 			 case 1: printf("X");break;
						 case 2: printf("O");break;			 					   
		     }
	     }	
		 printf("\n");
     }	 	 
}
         

int evaluar(int **tablero,int f,int c){
	int i,j;
	int cambio=0;
	int tablas=1;
   	int gana=0;
	do{
	   cambio=0;
		for (i=0;i<f;i++){
			for (j=0;j<c;j++){
				if(tablero[i][j]==3){
					if (i-1>0)
					   if (tablero[i-1][j]==1)
					   	  tablero[i-1][j]=3,cambio=1;
					if (i+1<f)
					   if (tablero[i+1][j]==1)
					   	  tablero[i+1][j]=3,cambio=1;
					if (j-1>0)
					   if (tablero[i][j-1]==1)
					   	  tablero[i][j-1]=3,cambio=1;
					if (i+1<c)
					   if (tablero[i][j+1]==1)
					   	  tablero[i][j+1]=3,cambio=1;											 
			    } else if (tablero[i][j]==1){
					if (i-1>0)
					   if (tablero[i-1][j]==0)
					   	  tablero[i][j]=3,cambio=1;
					if (i+1<f)
					   if (tablero[i+1][j]==0)
					   	  tablero[i][j]=3,cambio=1;
					if (j-1>0)
					   if (tablero[i][j-1]==0)
					   	  tablero[i][j]=3,cambio=1;
					if (i+1<c)
					   if (tablero[i][j+1]==0)
					   	  tablero[i][j]=3,cambio=1;				  	   
			    }
			}	
		}
	}while(cambio);

		for (i=0;i<f;i++){
			for (j=0;j<c;j++){
				if (tablero[i][j]==1)
				   gana=1;
			}
		}
	   for (i=0;i<f;i++){
		  for (j=0;j<c;j++){
			if(tablero[i][j]==3)
			  tablero[i][j]=1;
		  }
	   }		   			 

		if (gana==1){
		   return 2;
        }

   	gana=0;	
	do{
	   cambio=0;
		for (i=0;i<f;i++){
			for (j=0;j<c;j++){
				if(tablero[i][j]==4){
					if (i-1>0)
					   if (tablero[i-1][j]==2)
					   	  tablero[i-1][j]=4,cambio=1;
					if (i+1<f)
					   if (tablero[i+1][j]==2)
					   	  tablero[i+1][j]=4,cambio=1;
					if (j-1>0)
					   if (tablero[i][j-1]==2)
					   	  tablero[i][j-1]=4,cambio=1;
					if (i+1<c)
					   if (tablero[i][j+1]==2)
					   	  tablero[i][j+1]=4,cambio=1;											 
			    } else if (tablero[i][j]==2){
					if (i-1>0)
					   if (tablero[i-1][j]==0)
					   	  tablero[i][j]=4,cambio=1;
					if (i+1<f)
					   if (tablero[i+1][j]==0)
					   	  tablero[i][j]=4,cambio=1;
					if (j-1>0)
					   if (tablero[i][j-1]==0)
					   	  tablero[i][j]=4,cambio=1;
					if (i+1<c)
					   if (tablero[i][j+1]==0)
					   	  tablero[i][j]=4,cambio=1;				  	   
			    }
			}	
		}
	}while(cambio);	

		for (i=0;i<f;i++){
			for (j=0;j<c;j++){
				if (tablero[i][j]==2)
				   gana=1;
			}
		}
	   for (i=0;i<f;i++){
		  for (j=0;j<c;j++){
			if(tablero[i][j]==4)
			  tablero[i][j]=2;
		  }
	   }		   			 
		if (gana==1){
		   return 1;
        }


	
   for (i=0;i<f;i++){
	  for (j=0;j<c;j++){
		if(tablero[i][j]==0)
		  tablas=0;
        }
	}		   	
	
	if (tablas==1)
	   return 4;		 

	return 0;	
}


int jugar(){
    int i,j,f,c;
    int **tablero;
    int puntaje=0;
    
    printf ("Entre el numero de filas y columnas del tablero:\n");
    scanf("%i%i",&f,&c);

    tablero = (int**)malloc(f*sizeof(int*));
    for (i=0;i<f;i++){
        tablero[i]= (int*)malloc(c*sizeof(int)); 
        for (j=0;j<c;j++){
			tablero[i][j]=0;	
		 }
    }
    
    
    do{
        int ni,nj;
       
        mostrar_tablero(tablero,f,c);
        do{
           printf("Entre el numero de la coordenada:\n");
           scanf("%i%i",&ni,&nj);
           if (ni==0 && nj==0){
              printf("Desea Salir (s/n)\n");
              if(getch()=='s'){
			      for (i=0;i<f;i++){
			          free(tablero[i]);
			      }
				  free(tablero);
                  return -1;
			  } else continue;
           }    
           ni--;nj--;
		   if(!(ni>=0 && ni<f && nj>=0 && nj<c)){
		   		   printf("La coordenana esta fuera de los limites\n");
		   		   continue;
		   }
		   if (tablero[ni][nj]!=0){
		   	  		printf("La coordenada colocada esta ocupada\n");	   
		   	  		continue;
		   }
		   break;
        }while (1);
        
        tablero[ni][nj]=1;
        if(evaluar(tablero,f,c)==0){
		        jugada_maquina(tablero,f,c);
        }else {
	    //gano el humano
	    }        
        puntaje=evaluar(tablero,f,c);
        printf("puntaje: %i\n",puntaje);
    }while(puntaje==0);
    
    for (i=0;i<f;i++){
        free(tablero[i]);
    }
    free(tablero);
   
}

int main(){
    int salir=0;
    do{

        switch (menu()){
               case 1: 
                    mostrar_score(-1);
                    break;
               case 2:
                    mostrar_score(jugar());
                    break;
               case 3:
                    salir=1;    
                    break;
        }
    }while(!salir);

    printf("Gracias por utilizar el programa");
    
    return 0;
}