Dibujar e inicializar tablero de posibles distintos tamaños en C [?]

Iniciado por dragonlady, 30 Mayo 2015, 14:48 PM

0 Miembros y 3 Visitantes están viendo este tema.

dragonlady

#10
Pero ahí no se usa X, me da un error de que no se está usando esa variable.
No entiendo para que la declaro?? (Osea, entiendo que la estoy usando y son las X que quiero me aparezcan en el tablero aleatoriamente, pero no veo donde las estoy usando, solo en 'X')

Acá arreglé el código (le puse tam/2, porque las X tienen que ser la mitad del tamaño elegido, pero algo está mal porque si le ingreso un tamaño 10 me tira cualquier numero de X ):

int main(){

   int tam=1;
   char tablero[tam][tam];

   printf("Ingrese tamanio (6,8,10,14 o 18): ");
   scanf(" %d", &tam);

   int i,j,X; //declaramos la variable X

   //Iniciando los valores del tablero a '.', esto tu lo puedes cambiar
   for(i = 0; i < tam;i++)
       for(j = 0; j < tam;j++)
           tablero[i][j] = ' ';

   //generando las 3 X aleatoriamente
   srand (time(NULL));
   int Xnum = 0; //un contador
   while(Xnum < 3){ //hasta que se generen las 3 Xs

       i = rand() % tam/2;   //el numero aleatorio depende del tamaño del tablero
       j = rand() % tam/2;

       if( tablero[i][j] != 'X'){ //probamos si en esa posicion no existe alguna X
           tablero[i][j] = 'X';   //agregamos una X
           Xnum++; //aumentamos contador para no dibujar mas de 3 Xs
       }

   }

   //imprimimos todo
   printf("\n   ");
   for (j=0;j<tam;j++)
       printf(" %c ", 'a' + j);
   printf("\n");

   for (i=0;i<tam;i++){

       printf("|%d|", i);

       for (j=0;j<tam;j++){
          printf(" %c|", tablero[i][j]);
       }

       printf(" \n");
   }

0xFer

En tu código si la usas

for (X=0;X<3;X++)

Tienes que tener en cuenta de que estas usando una variable en ese bucle for, pero el 'X' es un caracter o sea es un valor que puede tomar una variable

No te confundas con la variable X y el caracter 'X' son diferentes, el primero es una variable y el segundo un valor que puede tomar una variable
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

dragonlady

Gracias por contestar! Ahí subí el código con las modificaciones.
Entonces, es un error de compilación? Porque me dice que no uso esa variable al compilar?

0xFer

Pues es que ya no está siendo utilizado, ya lo puedes quitar.

Cita de: dragonlady en  1 Junio 2015, 20:26 PM

Acá arreglé el código (le puse tam/2, porque las X tienen que ser la mitad del tamaño elegido, pero algo está mal porque si le ingreso un tamaño 10 me tira cualquier numero de X ):


  //generando las 3 X aleatoriamente
  srand (time(NULL));
  int Xnum = 0; //un contador
  while(Xnum < 3){ //hasta que se generen las 3 Xs

      i = rand() % tam/2;   //el numero aleatorio depende del tamaño del tablero
      j = rand() % tam/2;

      if( tablero[i][j] != 'X'){ //probamos si en esa posicion no existe alguna X
          tablero[i][j] = 'X';   //agregamos una X
          Xnum++; //aumentamos contador para no dibujar mas de 3 Xs
      }

  }


SI quieres que las 'X's generadas sean la mitad del tamaño del tablero entonces:



  srand (time(NULL));
  int Xnum = 0;
  while(Xnum < (tam/2)){ //Presta atención aquí

      i = rand() % tam;  
      j = rand() % tam;

      if( tablero[i][j] != 'X'){
          tablero[i][j] = 'X';  
          Xnum++;
      }

  }
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

dragonlady

#14
Siguen sin aparecerme la mitad de tam de X



Algo debe suceder en esta parte que no está muy bien o algo porque no está cumpliendo su funcion:

Xnum++; //aumentamos contador para no dibujar mas de 3 Xs

0xFer

pero quieres que aparezca tam/2 veces X en todo el tablero o en cada columna?

No puedes hacer otro juego más fácil de entender?, algo así como un snake  :-\
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

dragonlady

jajaja si!! Realmente está hasta mal redactado la guia del juego que nos dieron (y es obligatorio, no podemos hacer otro), me metí a preguntar porque me quedé sin compañero para hacerlo (era de a 2) pero bueno!

En todo el tablero me tienen que aparecer la mitad de X que el tamaño del mismo.
Si es un tablero de 6x6, tienen que aparecer 3 X, si es uno de 14, 7 X y así :|

0xFer

Cuando ejecuto ésto:

#include <stdio.h>

int main(){
 
  int tam = 8; //cambia este valor
  char tablero[tam][tam];

  int i,j;
 
  //Iniciando los valores del tablero a '.', esto tu lo puedes cambiar
  for(i = 0; i < tam;i++)
      for(j = 0; j < tam;j++)
          tablero[i][j] = '.';
         
  //generando las 3 X aleatoriamente        
  srand (time(NULL));    
  int Xnum = 0; //un contador        
  while(Xnum < tam/2 ){ //hasta que se generen las 3 Xs
 
      i = rand() % tam;   //el numero aleatorio depende del tamaño del tablero
      j = rand() % tam;
     
      if( tablero[i][j] != 'X'){ //probamos si en esa posicion no existe alguna X
          tablero[i][j] = 'X';   //agregamos una X
          Xnum++; //aumentamos contador para no dibujar mas de 3 Xs
      }    
 
  }
 
  //imprimimos todo
  printf("\n   ");
  for (j=0;j<tam;j++)
      printf("%c ", 'a' + j);
  printf("\n");

  for (i=0;i<tam;i++){

      printf("%d  |", i);
     
      for (j=0;j<tam;j++){
         printf(" %c", tablero[i][j]);
      }
     
      printf(" \n");
  }
return 0;  
  }


Me aparece:


  a b c d e f g h
0  | . . . . . . . .
1  | . . . . . . . .
2  | . . . . . . . .
3  | . . X . . . . .
4  | X . X . . . . .
5  | . . . . . . . .
6  | . . . . . . . .
7  | . . X . . . . .

  a b c d e f g h
0  | . . X . . X . .
1  | . . . . X . . .
2  | . . X . . . . .
3  | . . . . . . . .
4  | . . . . . . . .
5  | . . . . . . . .
6  | . . . . . . . .
7  | . . . . . . . .



en un tablero 8x8, prueba con otros valores que sean pares
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

dragonlady

Ahh!!! Entonces es un tema de inicializar tam. Porque yo lo inicializé en 1 (después probé con 0 y me da error igual) ya que le tengo que preguntar al usuario que el me ingrese de que tamaño va a ser el tablero, no es fijo.

0xFer

Puedes definir el tamaño solo una vez(lo define el jugador del juego), después el tablero tendrá ese tamaño hasta que termine el programa, si quieres cambiar el tamaño entonces tendras que saber manejar memoria dinámica.

Un saludo
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}