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

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

0 Miembros y 1 Visitante están viendo este tema.

dragonlady

Buenos días gente, tengo un juego para hacer en C que me está dando dolor de cabeza y una de las cosas que más me complica es que tengo que dibujar un tablero, pero que puede ser solamente de tamaño (cuadrado) 6, 8, 10, 14 o 18 (tamaño que el jugador elige). Y la verdad que no se como hacer eso.

Había intentando hacer 5 tableros distintos, pero me enlió más, entonces me gustaría saber si alguien tiene una manera de que se pueda hacer esto.

Solo puedo usar C, nada de C++ ni funciones muy avanzadas.

Si alguien sabe como, les agradezco la ayuda desde ya,

Gracias!!

0xFer

Pide el tamaño del tablero:


    int tam = 1;

    scanf("%i",tam);
   


Luego creas el tablero:

int tablero[tam][tam];

Luego tienes que usar for para modificar o imprimir los valores del tablero

No se si es lo que querias.

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

dragonlady

Muchisimas gracias! Era una bobada pero realmente no me daba cuenta, es que este trabajito me tiene muy trancada. Ahora, el problema que tengo es que el tablero me tira basura, inicializé todo pero no se si es algo más que pasa...
Pego el código:

int tam = 1;
    printf("ingrese tamanio: ");
    scanf(" %d", &tam);

   int i=0,j=0;

   int matriz[tam][tam];

    printf("\n   ");
    for (j=0;j<tam;j++)//cuento columnas
        printf("%d ", j);
    printf("\n");

    for (i=0;i<tam;i++)
        {
        printf("%c | ", 'a' + i);
        for (j=0;j<tam;j++)

        printf(" %c", matriz[i][j]);
        printf("\b|\n");
        }

0xFer

En realidad en tu código no estas iniciando los valores, solo los tratas de imprimir


   int tam = 1;
   printf("ingrese tamanio: ");
   scanf(" %d", &tam);

  int i=0,j=0;

  int matriz[tam][tam];
 
  memset(matriz,0,sizeof(matriz)); //inicia todos los valores a 0
 

  for(i = 0; i < tam; i++){ //imprime todos los valores
      for(j = 0; j < tam; j++)
          printf("%i",matriz[i][j]);
       printf("\n");
 
}



+ para memset
#include <string.h>
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

dragonlady

no me dejan hacer eso, ni siquiera se lo que es memset :O, menos agregarle otra library
Hay otra manera? Perdon la joda :|

0xFer

Parecido a cuando quieres imprimir:



for(i = 0; i < tam; i++){
    for(j = 0; j < tam; j++)
        matriz[i][j] = 0;
    }
}           



No se si te sirva mucho un tablero que imprima solo números, asi que puedes cambiar ese int por un char y podras imprimir letras u otro tipo de caracteres
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

dragonlady

Ahí lo arreglé, había hecho el  matriz[j] = 0; pero no lo habia puesto donde debía
Si, tendría que ser %c porque le tengo que poner objetos aleatorios(como el buscaminas) y un jugador empieza en la punta arriba a la izquierda y el otro en la punta derecha abajo, asi que tendré que usar letras.

Mil gracias por la ayuda :)

0xFer

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

dragonlady

Gracias por la ayuda, de nuevo.

Ahora tengo el tablero estoy tratando de ingresar unas X que tienen que aparecer aleatoriamente en el. (por ejemplo en un tablero de 6x6 tienen que aparecer 3 X, que aparte no pueden jamas aparecer en las pociciones q tapen las entradas de los jugadores, por ejemplo no pueden aparecer X así

......................................
J1 .  X   .        .       .       .
......................................
X .      .        .       .   X   .
......................................
    .      .        .   X  .    J2 .
......................................

y bueno, estoy probando el código que hice del tablero con la funcion randomica y no me funciona. Le ingreso un valor de 6 por ejemplo y me tendrian que aparecer 3 X aleatoriamente pero no sucede.
Pego mi código:


    int tam = 1;
    printf("ingrese tamanio: ");
    scanf(" %d", &tam);
    char tablero[tam][tam];

int i,j;

    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++)
        tablero[i][j]=0;

        printf(" %c", tablero[i][j]);
        printf("\b|\n");

        }
    printf(" \n");

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

    srand (time(NULL));
do
{
i=rand()%3+1;
j=rand()%3+1;
        }
while(tablero[i][j]==6);
    }


Que puedo estar haciendo mal? Realmente no me doy cuenta

0xFer

No te aparece ninguna X porque no has declarado la variable X y porque cuando tratas de generar las "X" aleatoriamente te olvidas de volver a imprimir tu arreglo, además la forma en la que generabas las "X"s no es la correcta

Espero que esto te sirva:


#include <stdio.h>

int main(){
 
  int tam = 6;
  char tablero[tam][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;   //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;  
  }
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}