Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: dragonlady en 30 Mayo 2015, 14:48 pm



Título: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: dragonlady en 30 Mayo 2015, 14:48 pm
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!!


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: 0xFer en 30 Mayo 2015, 22:03 pm
Pide el tamaño del tablero:

Código
  1.    int tam = 1;
  2.  
  3.    scanf("%i",tam);
  4.  

Luego creas el tablero:

Código
  1. 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


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: dragonlady en 31 Mayo 2015, 00:42 am
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:

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


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: 0xFer en 31 Mayo 2015, 01:30 am
En realidad en tu código no estas iniciando los valores, solo los tratas de imprimir

Código
  1.   int tam = 1;
  2.    printf("ingrese tamanio: ");
  3.    scanf(" %d", &tam);
  4.  
  5.   int i=0,j=0;
  6.  
  7.   int matriz[tam][tam];
  8.  
  9.   memset(matriz,0,sizeof(matriz)); //inicia todos los valores a 0
  10.  
  11.  
  12.   for(i = 0; i < tam; i++){ //imprime todos los valores
  13.       for(j = 0; j < tam; j++)
  14.           printf("%i",matriz[i][j]);
  15.        printf("\n");
  16.  
  17. }


+ para memset
Código
  1. #include <string.h>


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: dragonlady en 31 Mayo 2015, 01:39 am
no me dejan hacer eso, ni siquiera se lo que es memset :O, menos agregarle otra library
Hay otra manera? Perdon la joda :|


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: 0xFer en 31 Mayo 2015, 01:44 am
Parecido a cuando quieres imprimir:


Código
  1. for(i = 0; i < tam; i++){
  2.    for(j = 0; j < tam; j++)
  3.        matriz[i][j] = 0;
  4.    }
  5. }            
  6.  
  7.  

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


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: dragonlady en 31 Mayo 2015, 02:05 am
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 :)


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: 0xFer en 31 Mayo 2015, 02:15 am
Si, tendría que ser %c
Así es.

No dudes en preguntar si tienes más dudas, suerte.


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: dragonlady en 1 Junio 2015, 01:22 am
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:

Código
  1.    int tam = 1;
  2.    printf("ingrese tamanio: ");
  3.    scanf(" %d", &tam);
  4.    char tablero[tam][tam];
  5.  
  6. int i,j;
  7.  
  8.    printf("\n   ");
  9.    for (j=0;j<tam;j++)
  10.        printf("%c ", 'a' + j);
  11.    printf("\n");
  12.  
  13.    for (i=0;i<tam;i++)
  14.        {
  15.  
  16.        printf("%d  |", i);
  17.        for (j=0;j<tam;j++)
  18.        tablero[i][j]=0;
  19.  
  20.        printf(" %c", tablero[i][j]);
  21.        printf("\b|\n");
  22.  
  23.        }
  24.    printf(" \n");
  25.  
  26.  
  27.    for (X=0;X<3;X++)
  28.    {
  29.  
  30.    srand (time(NULL));
  31. do
  32. {
  33. i=rand()%3+1;
  34. j=rand()%3+1;
  35.        }
  36. while(tablero[i][j]==6);
  37.    }

Que puedo estar haciendo mal? Realmente no me doy cuenta


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: 0xFer en 1 Junio 2015, 02:04 am
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:

Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4.  
  5.   int tam = 6;
  6.   char tablero[tam][tam];
  7.  
  8.   int i,j,X; //declaramos la variable X
  9.  
  10.   //Iniciando los valores del tablero a '.', esto tu lo puedes cambiar
  11.   for(i = 0; i < tam;i++)
  12.       for(j = 0; j < tam;j++)
  13.           tablero[i][j] = '.';
  14.  
  15.   //generando las 3 X aleatoriamente        
  16.   srand (time(NULL));    
  17.   int Xnum = 0; //un contador        
  18.   while(Xnum < 3){ //hasta que se generen las 3 Xs
  19.  
  20.       i = rand() % tam;   //el numero aleatorio depende del tamaño del tablero
  21.       j = rand() % tam;
  22.  
  23.       if( tablero[i][j] != 'X'){ //probamos si en esa posicion no existe alguna X
  24.           tablero[i][j] = 'X';   //agregamos una X
  25.           Xnum++; //aumentamos contador para no dibujar mas de 3 Xs
  26.       }    
  27.  
  28.   }
  29.  
  30.   //imprimimos todo
  31.   printf("\n   ");
  32.   for (j=0;j<tam;j++)
  33.       printf("%c ", 'a' + j);
  34.   printf("\n");
  35.  
  36.   for (i=0;i<tam;i++){
  37.  
  38.       printf("%d  |", i);
  39.  
  40.       for (j=0;j<tam;j++){
  41.          printf(" %c", tablero[i][j]);
  42.       }
  43.  
  44.       printf(" \n");
  45.   }
  46. return 0;  
  47.   }


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: dragonlady en 1 Junio 2015, 20:26 pm
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 ):

Código
  1. int main(){
  2.  
  3.   int tam=1;
  4.   char tablero[tam][tam];
  5.  
  6.   printf("Ingrese tamanio (6,8,10,14 o 18): ");
  7.   scanf(" %d", &tam);
  8.  
  9.   int i,j,X; //declaramos la variable X
  10.  
  11.   //Iniciando los valores del tablero a '.', esto tu lo puedes cambiar
  12.   for(i = 0; i < tam;i++)
  13.       for(j = 0; j < tam;j++)
  14.           tablero[i][j] = ' ';
  15.  
  16.   //generando las 3 X aleatoriamente
  17.   srand (time(NULL));
  18.   int Xnum = 0; //un contador
  19.   while(Xnum < 3){ //hasta que se generen las 3 Xs
  20.  
  21.       i = rand() % tam/2;   //el numero aleatorio depende del tamaño del tablero
  22.       j = rand() % tam/2;
  23.  
  24.       if( tablero[i][j] != 'X'){ //probamos si en esa posicion no existe alguna X
  25.           tablero[i][j] = 'X';   //agregamos una X
  26.           Xnum++; //aumentamos contador para no dibujar mas de 3 Xs
  27.       }
  28.  
  29.   }
  30.  
  31.   //imprimimos todo
  32.   printf("\n   ");
  33.   for (j=0;j<tam;j++)
  34.       printf(" %c ", 'a' + j);
  35.   printf("\n");
  36.  
  37.   for (i=0;i<tam;i++){
  38.  
  39.       printf("|%d|", i);
  40.  
  41.       for (j=0;j<tam;j++){
  42.          printf(" %c|", tablero[i][j]);
  43.       }
  44.  
  45.       printf(" \n");
  46.   }


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: 0xFer en 1 Junio 2015, 20:31 pm
En tu código si la usas

Código
  1. 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


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: dragonlady en 1 Junio 2015, 20:37 pm
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?


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: 0xFer en 1 Junio 2015, 20:45 pm
Pues es que ya no está siendo utilizado, ya lo puedes quitar.


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 ):

Código
  1.   //generando las 3 X aleatoriamente
  2.   srand (time(NULL));
  3.   int Xnum = 0; //un contador
  4.   while(Xnum < 3){ //hasta que se generen las 3 Xs
  5.  
  6.       i = rand() % tam/2;   //el numero aleatorio depende del tamaño del tablero
  7.       j = rand() % tam/2;
  8.  
  9.       if( tablero[i][j] != 'X'){ //probamos si en esa posicion no existe alguna X
  10.           tablero[i][j] = 'X';   //agregamos una X
  11.           Xnum++; //aumentamos contador para no dibujar mas de 3 Xs
  12.       }
  13.  
  14.   }
  15.  

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

Código
  1.  
  2.   srand (time(NULL));
  3.   int Xnum = 0;
  4.   while(Xnum < (tam/2)){ //Presta atención aquí
  5.  
  6.       i = rand() % tam;  
  7.       j = rand() % tam;
  8.  
  9.       if( tablero[i][j] != 'X'){
  10.           tablero[i][j] = 'X';  
  11.           Xnum++;
  12.       }
  13.  
  14.   }
  15.  


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: dragonlady en 1 Junio 2015, 21:01 pm
Siguen sin aparecerme la mitad de tam de X

(https://scontent-gru1-1.xx.fbcdn.net/hphotos-xft1/v/t1.0-9/11392884_10206053110662358_5301828167146530654_n.jpg?oh=0aa0f117cd0f466f6b79b57b283461ba&oe=55EBB624)

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

Código
  1. Xnum++; //aumentamos contador para no dibujar mas de 3 Xs


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: 0xFer en 1 Junio 2015, 22:12 pm
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  :-\


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: dragonlady en 1 Junio 2015, 22:24 pm
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í :|


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: 0xFer en 1 Junio 2015, 22:28 pm
Cuando ejecuto ésto:
Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4.  
  5.   int tam = 8; //cambia este valor
  6.   char tablero[tam][tam];
  7.  
  8.   int i,j;
  9.  
  10.   //Iniciando los valores del tablero a '.', esto tu lo puedes cambiar
  11.   for(i = 0; i < tam;i++)
  12.       for(j = 0; j < tam;j++)
  13.           tablero[i][j] = '.';
  14.  
  15.   //generando las 3 X aleatoriamente        
  16.   srand (time(NULL));    
  17.   int Xnum = 0; //un contador        
  18.   while(Xnum < tam/2 ){ //hasta que se generen las 3 Xs
  19.  
  20.       i = rand() % tam;   //el numero aleatorio depende del tamaño del tablero
  21.       j = rand() % tam;
  22.  
  23.       if( tablero[i][j] != 'X'){ //probamos si en esa posicion no existe alguna X
  24.           tablero[i][j] = 'X';   //agregamos una X
  25.           Xnum++; //aumentamos contador para no dibujar mas de 3 Xs
  26.       }    
  27.  
  28.   }
  29.  
  30.   //imprimimos todo
  31.   printf("\n   ");
  32.   for (j=0;j<tam;j++)
  33.       printf("%c ", 'a' + j);
  34.   printf("\n");
  35.  
  36.   for (i=0;i<tam;i++){
  37.  
  38.       printf("%d  |", i);
  39.  
  40.       for (j=0;j<tam;j++){
  41.          printf(" %c", tablero[i][j]);
  42.       }
  43.  
  44.       printf(" \n");
  45.   }
  46. return 0;  
  47.   }

Me aparece:

Código:
   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


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: dragonlady en 1 Junio 2015, 22:33 pm
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.


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: 0xFer en 1 Junio 2015, 22:38 pm
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


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: dragonlady en 1 Junio 2015, 22:51 pm
Que lástima, tenía muchas ganas de hacer un solo tablero, pero bueno. Tendré que hacer 5 tableros. Uno con cada tamaño. Gracias por toda la ayuda :)


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: 0xFer en 1 Junio 2015, 22:59 pm
jeje, pero no es necesario hacer todos los tableros si el jugador solo quiere jugar con un tablero de 6x6(o cualquier otro tamaño que él quiera), solo tienes que pedir el tamaño del tablero una vez y ya!

Espero no confundirte más.


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: dragonlady en 1 Junio 2015, 23:34 pm
No al contrario, yo estoy confundida y me ayuda lo que sea que me aportes. Pero hay algo ahí que no me está quedado (y si, yo soy más que media lenta), yo traté de hacerlo para pedirle el tamaño, pero no se como inicializar "tam" para luego pedirsela al usuario y despues usar siempre "tam", incluso en los arreglos. De esta forma:

Código
  1.   int tam=1;
  2.   char tablero[tam][tam];
  3.  
  4.   printf("Ingrese tamanio(6,8,10,14 o 18): "); //aqui estoy tratando de pedirle el tamaño
  5.   scanf(" %d", &tam); // y aca usar ese tamaño siempre como tam
  6.  
  7.   int i,j;
  8.  
  9.   //Iniciando los valores del tablero a ' '
  10.   for(i=0;i<tam;i++)
  11.       for(j=0;j<tam;j++)
  12.           tablero[i][j]=' ';
  13.  
  14.   //generando las 3 X aleatoriamente
  15.   srand (time(NULL));
  16.   int Xnum=0; //un contador
  17.   while(Xnum<tam/2){ //hasta que aparezcan la cantidad de X
  18.  
  19.       i=rand()%tam;
  20.       j=rand()%tam;
  21.  
  22.       if( tablero[i][j]!='X'){ //verifica que no haya X en esa posicion
  23.           tablero[i][j]='X';   //dibuja una X
  24.           Xnum++; //++ contador para no dibujar mas de 3 Xs
  25.       }
  26.  
  27.   }
  28.  
  29.   //mostrar bosque
  30.   printf("\n  ");
  31.   for (j=0;j<tam;j++)
  32.       printf(" %c ", 'a' + j);
  33.   printf("\n");
  34.  
  35.   for (i=0;i<tam;i++){
  36.  
  37.       printf(" %d", i);
  38.  
  39.       for (j=0;j<tam;j++){
  40.          printf("| %c", tablero[i][j]);
  41.       }
  42.  
  43.       printf(" \n");
  44.   }


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: 0xFer en 1 Junio 2015, 23:40 pm
Código
  1.   int tam=1;
  2.   char tablero[tam][tam];
  3.  
  4.   printf("Ingrese tamanio(6,8,10,14 o 18): "); //aqui estoy tratando de pedirle el tamaño
  5.   scanf(" %d", &tam); // y aca usar ese tamaño siempre como tam
  6.  
  7.  

El problema está en el orden, debería ser así:

Código
  1.   int tam;  //declaras la variable tam, por ahora no tiene ningun valor  
  2.  
  3.   printf("Ingrese tamanio(6,8,10,14 o 18): "); //La función printf se encarga de imprimir un mensaje
  4.   scanf(" %d", &tam); //La función scanf lee lo que el usuario escribe en la Consola(pantallita negra)
  5.                                     //básicamente lo que haces con esta línea es difinir el valor de tam
  6.                                    //dependiendo de lo que ingrese el jugador
  7.  
  8.  char tablero[tam][tam];  //creas el tablero tamxtam  
  9.  
  10.  


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: dragonlady en 1 Junio 2015, 23:45 pm
!!! Por favor pero si era una bobada, que distracción y falta de agilidad con esto, ya le iré agarrando la mano. Ahora si funciona de 10! Bueno voy a seguir avanzando que esto tiene para rato :)


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: 0xFer en 1 Junio 2015, 23:50 pm
Tranquila, me pasaba lo mismo cuando estaba empezando, solo hay que practicar  ;)


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: dragonlady en 4 Junio 2015, 01:54 am
Buenas! Ahora estoy tratando de hacer que los jugadores se muevan o disparen (inician cada uno en una esquina superior e inferior del tablero) y tengo algo así:

Código
  1. void turno_jugador1() //movimientos de jugador 1
  2. {
  3.     int accion, m,t; // mover o tirar
  4.     char coordenada_elegida;
  5.     printf("Moverte o tirar flecha? (m o t)");
  6.     scanf("%d",&accion);
  7.  
  8.        if (accion==m)
  9.        {
  10.            printf("Elige coordenada: ");
  11.            scanf(" %c", &coordenada_elegida);
  12.  
  13.            if(tablero[i][j]!='X')
  14.            {
  15.                tablero[i][j]==' ';
  16.                tablero[i][j]=='1';
  17.            }
  18.                else if (accion==t)
  19.                {
  20.                    printf("Hasta donde va a disparar el flechazo? (maximo 5 lugares)"); //las flechas se disparan 5 lugares y en los cuatro sentidos, arriba, abajo y costados)
  21.                }
  22.     }
  23. }

Pero creo que no puedo empezar bien a jugar porque no me está saliendo colocar a los jugadores en donde van desde el principio, quise hacer esto:

Código
  1. //mostrar jugadores 1 y 2
  2.    if( tablero[0][j]=' ')
  3.        {
  4.            tablero[0][j]='1';
  5.        }
  6.  
  7.    if( tablero[tam][i]!=' ')
  8.        {
  9.           tablero[tam][i]='1';
  10.        }

Que estará mal :| Ni me aparecen en el tablero



Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: 0xFer en 4 Junio 2015, 03:52 am
1.- En tu metodo turno_jugador1 veo que declaraste 3 variables para saber si el jugador quiere mover o disparar, pero estas utilizando dos de esas variables sin haberlas inicializado(me refiero a la variable m y t), debes saber que estas variables contienen basura, o sea que no te sirven.

2.-Cuando tratas que el jugador ingrese una acción, te olvidas que la variable que utilizas para pedir la acción(me refiero a int accion) es una variable de tipo entera y tú le pides al jugador que ingrese una variable de tipo char:

Código
  1. printf("Moverte o tirar flecha? (m o t)"); //m y t son caracteres por tanto son de tipo char
  2.  

3.-Fijate en esto:
Código
  1.    if (accion==m)
  2.       {
  3.       /*Tienes más código aqui*/  
  4.        else if (accion==t) //Este condicional tiene que estar afuera ***
  5.            {
  6.  
  7.            }
  8.    }
  9.    //*** Tiene que estar aquí.
  10.  

4.-Declaras una variable que se llama coordenada_elegida pero núnca la utilizas, aqui sería conveniente pedir las coordenadas i y j que son los que se utilizan para recorres los arreglos, pero lo puedes cambiar por x,y si te parece más conveniente.

5.-Tienes que tener en cuenta el alcance de las variables, porque en tú metodo turno_jugador1 estas utilizando las variables i y j que fueron definidas en tu metodo main, estas no pueden ser utilizadas dentro de otro metodo que no sea main, tendrías que declararlas de nuevo  en el metodo en el que las quieras utilizar, pero las del metodo main serían diferentes.

6.-El primer elemento de un arreglo es el elemento número 0 del arreglo, o sea que empieza a contar desde 0, tú estas tratando de acceder al elemento número "tam" y eso es un error porque para acceder al último elemento tienes que poner "tam - 1" porque empiza a contar desde 0.


Muestra todo el código...


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: dragonlady en 4 Junio 2015, 13:17 pm
Esto es un poco lo que estoy tratando de hacer, ya le cambié los nombres al tablero que no es más que un bosque donde 2 jugadores se tienen que eliminar:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. //prototipos
  6. void menu();
  7. int ingrese_opcion();
  8. char jugar();
  9. void reglas();
  10. void bosques();
  11. void error();
  12. void pausa();
  13. void mover_jugadores();
  14. void flechazos();
  15. void ultima_jugada();
  16.  
  17. int main()
  18. {
  19.     int opcion;
  20.  
  21.        do
  22.        {
  23.            menu();
  24.            opcion=ingrese_opcion();
  25.            switch (opcion)
  26.            {
  27.               case 1:
  28.                   jugar();
  29.                   break;
  30.               case 2:
  31.                   reglas();
  32.                   break;
  33.  
  34.                default:
  35.                   error();
  36.            }
  37.        }
  38.        while (opcion!=2);
  39.    return 0;
  40. }
  41.  
  42. void menu()
  43. {
  44.    printf("______ARQUEROS EN EL BOSQUE_______\n");
  45.    printf("____________OOOOOO________________\n");
  46.    printf("_________OOOOOOOOOOOOO____________\n");
  47.    printf("_____OOOOOOOOOOOOOOOOOOOO_________\n");
  48.    printf("___OOOOOOOOOOOOOOOOOOOOOOOO_______\n");
  49.    printf("___OOOOOOOOOOOOOOOOOOOOOOOO_______\n");
  50.    printf("_____OOOOOOOOOOOOOOOOOOOO_________\n");
  51.    printf("______OOOOOOOOOOOOOOOOOO__________\n");
  52.    printf("_________OOOOOOOOOOOO_____________\n");
  53.    printf("__<----____OOOOOOOO_______________\n");
  54.    printf("_____________OOOO_________________\n");
  55.    printf("_____________OOOO_______---->_____\n");
  56.    printf("_____________OOOO_________________\n");
  57.    printf("_____________OOOO_________________\n");
  58.    printf("\n");
  59.    printf("MENU PRINCIPAL\n");
  60.    printf("><><><><><><><\n");
  61.    printf("Ingrese una de las opciones: \n");
  62.    printf("1. Jugar\n");
  63.    printf("2.Ver reglas\n");
  64.    printf("\n");
  65. }
  66.  
  67. int ingrese_opcion()
  68. {
  69.    int opcion;
  70.    scanf(" %d",&opcion);
  71.    return opcion;
  72. }
  73.  
  74. char jugar()
  75. {
  76.    system("cls");
  77.    bosques();
  78.    pausa();
  79.    return bosques;
  80. }
  81.  
  82. void reglas() //aca muestro las reglas. tiene que poder volver al menu anterior
  83. {
  84.    system("cls");
  85.    printf("El juego consiste en eliminar al arquero del extremo opuesto. \n");
  86.    printf("Cada turno puede elegir moverse una casilla en sentido horizontal o vertical o lanzar un flechazo. \n");
  87.    printf("Los flechazos se mueven en linea recta, maximo cinco lugares.\n");
  88.    printf("Ni los jugadores ni los flechazos pueden atravezar los arboles(X)");
  89.    printf(" Al recibir un flechazo el jugador pierde el round, las partidas se componen de 3 round y las gana el que gane 2 de ellos.\n");
  90.    printf("Jugador primero sera identificado como 1 y jugador segundo como 2.\n");
  91.    printf("\n");
  92.    pausa();
  93.  
  94. }
  95.  
  96. void bosques()
  97. {
  98.   int tam=1;
  99.  
  100.   printf("Ingrese tamanio(6,8,10,14 o 18): ");
  101.   scanf(" %d", &tam);
  102.  
  103.   char bosque[tam][tam];
  104.  
  105.   int i,j;
  106.  
  107.   //Iniciando los valores del bosque a ' '
  108.   for(i=0;i<tam;i++)
  109.       for(j=0;j<tam;j++)
  110.           bosque[i][j]=' ';
  111.  
  112.     //mostrar jugadores 1 y 2
  113.    if( bosque[0][j]=' ')
  114.        {
  115.            bosque[0][j]='1';
  116.        }
  117.  
  118.    if( bosque[tam][i]!=' ')
  119.        {
  120.           bosque[tam][i]='1';
  121.        }
  122.  
  123.   //generando las 3 X aleatoriamente
  124.   srand (time(NULL));
  125.   int Xnum=0; //contador
  126.   while(Xnum<tam/2){ //hasta que aparezcan la cantidad de X
  127.  
  128.       i=rand()%tam;
  129.       j=rand()%tam;
  130.  
  131.       if( bosque[i][j]!='X'){ //verifica que no haya X en esa posicion
  132.           bosque[i][j]='X';   //dibuja una X
  133.           Xnum++; //para no dibujar mas X de las que deben ser
  134.       }
  135.  
  136.   }
  137.  
  138.   //mostrar bosque
  139.   printf("\n  ");
  140.  
  141.   for (j=0;j<tam;j++) //filas alfabeticas
  142.       printf("  %c", 'a'+j);
  143.   printf("\n");
  144.  
  145.   for (i=0;i<tam;i++) //columnas numeradas
  146.    {
  147.       printf(" %d", i);
  148.  
  149.       for (j=0;j<tam;j++)
  150.        {
  151.          printf("| %c", bosque[i][j]);
  152.        }
  153.       printf("| \n");
  154.     }
  155.  
  156. }
  157.  
  158. void error()
  159. {
  160.    printf("El tamaño elegido no es correcto.\n");
  161.    pausa();
  162. }
  163.  
  164. void pausa()
  165. {
  166.    char p;
  167.    printf ("Presiona cualquier tecla y enter para volver al menu");
  168.    scanf (" %c",&p);
  169. }
  170.  
  171. void mover_jugadores()
  172. {
  173.        int jugador, jugadas, turno;
  174.    printf("Elige quien empieza (jugador 1 o 2): ");
  175.  
  176.    switch(jugadas)
  177.    {
  178.        case 1:
  179.           jugador=1;
  180.           turno=0;
  181.               do
  182.                {
  183.                    turno++;
  184.                    if (jugador)
  185.                    {
  186.                        turno_jugador1();
  187.                    }
  188.                        else
  189.                            turno_jugador2();
  190.  
  191.                }
  192.           while ((!ganador())&&(turno<=3));
  193.    }
  194. }
  195.  
  196. void turno_jugador1() //movimientos de jugador 1
  197. {
  198.     int accion,
  199.     char m=0;
  200.     char t=0; // mover o tirar
  201.     char coordenada_elegida;
  202.     printf("Moverte o tirar flecha? (m o t)");
  203.     scanf("%d",&accion);
  204.  
  205.        if (accion==m)
  206.        {
  207.            printf("Elige coordenada: ");
  208.            scanf(" %c", &coordenada_elegida);
  209.  
  210.            if(bosque[i][j]!='X')
  211.            {
  212.                bosque[i][j]==' ';
  213.                bosque[i][j]=='1';
  214.            }
  215.                else if (accion==T)
  216.                {
  217.                    printf("Hasta donde va a disparar el flechazo? (maximo 5 lugares)");
  218.                }
  219.     }
  220.     bosques();
  221. }
  222.  
  223. void turno_jugador2() //movimientos de jugador 1
  224. {
  225.     int accion,
  226.     char m=0;
  227.     char t=0; // mover o tirar
  228.     char coordenada_elegida;
  229.     printf("Moverte o tirar flecha? (m o t)");
  230.     scanf("%d",&accion);
  231.  
  232.        if (accion==m)
  233.        {
  234.            printf("Elige coordenada: ");
  235.            scanf(" %c", &coordenada_elegida);
  236.  
  237.            if(bosque[i][j]!='X')
  238.            {
  239.                bosque[i][j]==' ';
  240.                bosque[i][j]=='1';
  241.            }
  242.                else if (accion==T)
  243.                {
  244.                    printf("Hasta donde va a disparar el flechazo? (maximo 5 lugares)");
  245.                }
  246.     }
  247.     bosques();
  248. }
  249.  
  250. int ganador()
  251. {
  252.   return ganador;
  253. }

(se que hay muchas cosas que no "coinciden" porque no se las he cambiado aun, como prototipos, etc.)
Ahí cambié el tipo de las variables y las inicializé. Ahora estoy tratando de entender bien como puedo hacer para que el jugador me ingrese una coordenada y yo tomar esa coordenada como una cadena de caracteres supongo y usarlas para que avance. O sino disparar, y entonces desde su posicion se disparen los flechazos. Voy a seguir intentando


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: 0xFer en 4 Junio 2015, 19:06 pm
Código
  1.  
  2. do
  3.       {
  4.           menu();
  5.           opcion=ingrese_opcion();
  6.           switch (opcion)
  7.           {
  8.              case 1:
  9.                  jugar();
  10.                  break;
  11.              case 2:
  12.                  reglas();
  13.                  break;
  14.  
  15.               default:
  16.                  error();
  17.           }
  18.       }
  19.       while (opcion!=2);
       
       
Aqui deberías de agregar una tercera opción que sea para salir del programa, entonces cambias ese 2 de while(opcion != 2) por 3. Ese
2 está mal porque si el usuario quiere ver las reglas entonces el programa termina.
Código
  1. char jugar()
  2. {
  3.   system("cls");
  4.   bosques();
  5.   pausa();
  6.   return bosques;
  7. }

No puedes retornas bosques, porque el metodo bosques es un tipo void y tu metodo jugar es de tipo char, también está de más ese return, si lo
quitas sería mejor.
Código
  1.    if( bosque[0][j]=' ')
  2.       {
  3.           bosque[0][j]='1';
  4.       }
  5.  
  6.   if( bosque[tam][i]!=' ')
  7.       {
  8.          bosque[tam][i]='1';
  9.       }
       
Los condicionales if no son necesarios puesto que ya sabemos que en esa posición hay un ' ', cambia eso por:
Código
  1. bosque[0][0]='1'; // Esquina superior izquierda
  2. bosque[tam-1][tam-1]='2'; //Esquina inferior derecha
  3.  
Luego para que no se genere una X en esas posiciones:
Código
  1. if( bosque[i][j]!='X' && bosque[i][j]!='1' && && bosque[i][j]!='2'){ //verifica que no haya X en esa posicion
  2.  
  3. }

Ahora para pedir una acción:
Código
  1. char accion; //fijate que esto es un char
  2. printf("Moverte o tirar flecha? (m o t)");
  3. scanf("%c",accion); //presta atencion, estamos pidiendo un carácter no un número
  4.  
  5. //Luego para saber lo que ha ingresado
  6.  
  7. if(accion == 'm'){
  8.    /*Mover al jugador*/
  9. }
  10. else if(accion == 't'){
  11.    /*Tirar flechazo*/
  12. }else{
  13.    printf("Accion incorrecta \n");
  14. }
  15.  
Ahora para elegir una coordenada primero tienes que entender cómo se dibuja el bosque, pongamos que dibujas un posque de 4x4:
Código:
             j
     0    1    2    3

  0  1    2    3    4

  1  5    6    7    8

  2  9    10   11   12
 
  3  13   14   15   16
 
 
Así es como se dibuja, esto es por la manera en la que lo estas dibujando con el ciclo for, pero eso se puede cambiar(de momento dejemoslo así).

Ahora fijate si quisieras saber en qué indices del bosque se encuentra el número 10, entonces para i es 2 y para j es 1, entonces accedemos así:

bosque[2][1];  //Esto tiene un valor de 10 por lo que te mostré arriba(la tabla).

Bien esto solo muestra cómo puedes acceder a los valores del bosque mediante sus indices, ahora pongamos que el personaje está en la posicion:
i = 0, j = 0, y se quiere mover a la posicion i = 0 j = 1 (o sea que avance una posicion a la derecha), entonces simplemente movemos
el carácter que esté en la posicion inicial a la final de esta manera:
Código
  1. int o_i,o_j; //coordenadas origen
  2. int d_i,d_j; //coordenadas destino
  3.  
  4. printf("Ingresa coordenada i origen - >");
  5. scanf("%i \n",o_i);
  6. printf("Ingresa coordenada j origen - >");
  7. scanf("%i \n",o_j);
  8. /*Supongamos que el jugador ingresó: o_i  = 0, o_j = 0*/
  9.  
  10. printf("Ingresa coordenada i destino - >");
  11. scanf("%i \n",d_i);
  12. printf("Ingresa coordenada j destino - >");
  13. scanf("%i \n",d_j);
  14. /*Supongamos que el jugador ingresó: o_i  = 0, o_j = 1*/
  15.  
  16. //Entonces lo movemos así:
  17. bosque[o_i][o_j] = ' '; //hacemos que en la posicion origen no haya nada
  18. bosque[d_i][d_j] = '1'; //Movemos el jugador a la posicion destino  
  19.  
Con un poco de magia podemos traducir las coordenadas i y j a las coordenadas que tu estas utilizando en tu programa(1,2,3,4,5;a,b,c,d,e), pero
lo importante ahora es que entiendas lo que he puesto arriba.

Una duda, para cuándo tienes que entregar el juego?,Así si tienes mucho tiempo todavia entonces lo llevamos de poco a poco.


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: dragonlady en 4 Junio 2015, 22:29 pm
Hola! Pensé que me estaba contestando otra persona al principio porque cambias mucho la imagen jaja (Mushishi está genial!).

Entendí si, gracias por explicar tan pacientemente, me cuesta mucho entrar en la lógica del tablero, osea ahora que me lo dices lo entiendo pero irme dando cuenta sola del tema de los índices no iba a pasar :|

El juego lo tengo que entregar hasta el lunes a la medianoche. Pero este fin de semana me lo voy a dedicar entero a eso, para que quede bien.

Algo que está mal me parece es el if que me planteas:

Citar
Luego para que no se genere una X en esas posiciones:
Código

   
Código
  1. if( bosque[i][j]!='X' && bosque[i][j]!='1' && && bosque[i][j]!='2'){ //verifica que no haya X en esa posicion}

Me sale un error que se espera un identificador antes del &&, supongo que por poner 2 && juntos.

Voy a seguir tratando de ir arreglandolo con lo que me has planteado y cuando tenga más lo subo.

Gracias :)


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: 0xFer en 5 Junio 2015, 01:21 am
Ah no me dí cuenta que puse 2 & de más.  :P


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: dragonlady en 5 Junio 2015, 13:44 pm
Buenas, hastá acá fui tratando de hacer, aunque hasta que corrija los errores no me lo deja probar (no se si porque estoy en Linux -estoy en clase-, porque en windows me lo deja probar)

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. //prototipos
  6. void menu();
  7. int ingrese_opcion();
  8. char jugar();
  9. void reglas();
  10. void bosques();
  11. void error();
  12. void pausa();
  13. void turno_jugador1();
  14. void turno_jugador2();
  15. void flechazos();
  16. int ganador();
  17. char fin_juego();
  18.  
  19.  
  20. int main()
  21. {
  22.     int opcion;
  23.  
  24.        do
  25.        {
  26.            menu();
  27.            opcion=ingrese_opcion();
  28.            switch (opcion)
  29.            {
  30.               case 1:
  31.                   jugar();
  32.                   break;
  33.               case 2:
  34.                   reglas();
  35.                   break;
  36.               case 3:
  37.                    fin_juego();
  38.  
  39.                default:
  40.                   error();
  41.            }
  42.        }
  43.        while (opcion!=3);
  44.    return 0;
  45. }
  46.  
  47. void menu()
  48. {
  49.    printf("______ARQUEROS EN EL BOSQUE_______\n");
  50.    printf("____________OOOOOO________________\n");
  51.    printf("_________OOOOOOOOOOOOO____________\n");
  52.    printf("_____OOOOOOOOOOOOOOOOOOOO_________\n");
  53.    printf("___OOOOOOOOOOOOOOOOOOOOOOOO_______\n");
  54.    printf("___OOOOOOOOOOOOOOOOOOOOOOOO_______\n");
  55.    printf("_____OOOOOOOOOOOOOOOOOOOO_________\n");
  56.    printf("______OOOOOOOOOOOOOOOOOO__________\n");
  57.    printf("_________OOOOOOOOOOOO_____________\n");
  58.    printf("__<----____OOOOOOOO_______________\n");
  59.    printf("_____________OOOO_________________\n");
  60.    printf("_____________OOOO_______---->_____\n");
  61.    printf("_____________OOOO_________________\n");
  62.    printf("_____________OOOO_________________\n");
  63.    printf("\n");
  64.    printf("MENU PRINCIPAL\n");
  65.    printf("><><><><><><><\n");
  66.    printf("Ingrese una de las opciones: \n");
  67.    printf("1. Jugar\n");
  68.    printf("2.Ver reglas\n");
  69.    printf("\n");
  70. }
  71.  
  72. int ingrese_opcion()
  73. {
  74.    int opcion;
  75.    scanf(" %d",&opcion);
  76.    return opcion;
  77. }
  78.  
  79. char jugar()
  80. {
  81.    system("clear");
  82.    bosques();
  83.    pausa();
  84.  
  85.    return 0;
  86. }
  87.  
  88. void reglas() //aca muestro las reglas. tiene que poder volver al menu anterior
  89. {
  90.    system("clear");
  91.    printf("El juego consiste en eliminar al arquero del extremo opuesto. \n");
  92.    printf("Cada turno puede elegir moverse una casilla en sentido horizontal o vertical o lanzar un flechazo. \n");
  93.    printf("Los flechazos se mueven en linea recta, maximo cinco lugares.\n");
  94.    printf("Ni los jugadores ni los flechazos pueden atravezar los arboles(X)");
  95.    printf(" Al recibir un flechazo el jugador pierde el round, las partidas se componen de 3 round y las gana el que gane 2 de ellos.\n");
  96.    printf("Jugador primero sera identificado como 1 y jugador segundo como 2.\n");
  97.    printf("\n");
  98.    pausa();
  99.  
  100. }
  101.  
  102. void bosques()
  103. {
  104.   int tam=1;
  105.  
  106.   printf("Ingrese tamanio(6,8,10,14 o 18): ");
  107.   scanf(" %d", &tam);
  108.  
  109.   char bosque[tam][tam];
  110.  
  111.   //mostrar jugadores 1 y 2
  112.        bosque[0][0]='1';
  113.        bosque[tam-1][tam-1]='2';
  114.  
  115.   int i,j;
  116.  
  117.   //Iniciando los valores del bosque a ' '
  118.   for(i=0;i<tam;i++)
  119.       for(j=0;j<tam;j++)
  120.           bosque[i][j]=' ';
  121.  
  122.  
  123.  
  124.   //generando las 3 X aleatoriamente
  125.   srand (time(NULL));
  126.   int Xnum=0; //contador
  127.   while(Xnum<tam/2)//hasta que aparezcan la cantidad de X
  128.  
  129.    {
  130.       i=rand()%tam;
  131.       j=rand()%tam;
  132.  
  133.    if(bosque[i][j]!='X' && bosque[i][j]!='1' && bosque[i][j]!='2')//verifica que no haya X en esa posicion
  134.       {
  135.           bosque[i][j]='X';   //dibuja una X
  136.           Xnum++; //para no dibujar mas X de las que deben ser
  137.       }
  138.  
  139.   }
  140.  
  141.   //mostrar bosque
  142.   printf("\n  ");
  143.  
  144.   for (j=0;j<tam;j++) //filas alfabeticas
  145.       printf("  %c", 'a'+j);
  146.   printf("\n");
  147.  
  148.   for (i=0;i<tam;i++) //columnas numeradas
  149.    {
  150.       printf(" %d", i);
  151.  
  152.       for (j=0;j<tam;j++)
  153.        {
  154.          printf("| %c", bosque[i][j]);
  155.        }
  156.       printf("| \n");
  157.     }
  158.  
  159. }
  160.  
  161. void error()
  162. {
  163.    printf("El tamaño elegido no es correcto.\n");
  164.    pausa();
  165. }
  166.  
  167. void pausa()
  168. {
  169.    char p;
  170.    printf ("Presiona cualquier tecla y enter para volver al menu");
  171.    scanf (" %c",&p);
  172. }
  173.  
  174. void mover_jugadores()
  175. {
  176.        int jugador, jugadas, turno;
  177.    printf("Elige quien empieza (jugador 1 o 2): ");
  178.  
  179.    switch(jugadas)
  180.    {
  181.        case 1:
  182.          jugador=1;
  183.          turno=0;
  184.               do
  185.                {
  186.                    turno++;
  187.                    if (jugador)
  188.                    {
  189.                        turno_jugador1();
  190.                    }
  191.                        else
  192.                            turno_jugador2();
  193.  
  194.                }
  195.           while ((!ganador())&&(turno<=3));
  196.    }
  197. }
  198.  
  199. void turno_jugador1() //movimientos de jugador 1
  200. {
  201.    char accion;
  202.  
  203.    printf("Moverte o tirar flecha? (m o t)");
  204.    scanf(" %c", &accion);
  205.  
  206.    //para saber lo que ha ingresado
  207.    if(accion == 'm')
  208.    {
  209.         //moverse
  210.        int o_i,o_j; //coordenadas origen
  211.        int d_i,d_j; //coordenadas destino
  212.  
  213.  
  214.  
  215.        printf("Ingresa coordenada i origen: ");
  216.        scanf("%d \n", &o_i);
  217.        printf("Ingresa coordenada j origen: ");
  218.        scanf("%d \n", &o_j);
  219.        /*x ej el jugador ingresó: o_i  = 0, o_j = 0*/
  220.  
  221.        printf("Ingresa coordenada i destino: ");
  222.        scanf("%d \n", &d_i);
  223.        printf("Ingresa coordenada j destino: ");
  224.        scanf("%d \n", &d_j);
  225.        /*x ej el jugador ingresó: o_i  = 0, o_j = 1*/
  226.  
  227.        //Entonces:
  228.        bosque[o_i][o_j]= ' '; //hacemos que en la posicion origen no haya nada
  229.        bosque[d_i][d_j]= '1'; //Movemos el jugador a la posicion destino
  230.  
  231.    }
  232.        else if(accion == 't')
  233.        {
  234.            do
  235.            {
  236.               bosque[d_i][d_j]='t';
  237.            }
  238.                while(bosque[d_i][d_j]!='X');
  239.  
  240.        }
  241.            else
  242.            {
  243.                printf("Accion incorrecta \n");
  244.            }
  245.  
  246.     bosques();
  247. }
  248.  
  249. void turno_jugador2() //movimientos de jugador 1
  250. {
  251.  
  252.    char accion;
  253.  
  254.    printf("Moverte o tirar flecha? (m o t)");
  255.    scanf(" %c", &accion);
  256.  
  257.    //para saber lo que ha ingresado
  258.    if(accion == 'm')
  259.    {
  260.         //moverse
  261.        int o_i,o_j; //coordenadas origen
  262.        int d_i,d_j; //coordenadas destino
  263.  
  264.  
  265.  
  266.        printf("Ingresa coordenada i origen: ");
  267.        scanf("%d \n", &o_i);
  268.        printf("Ingresa coordenada j origen: ");
  269.        scanf("%d \n", &o_j);
  270.        /*x ej el jugador ingresó: o_i  = 0, o_j = 0*/
  271.  
  272.        printf("Ingresa coordenada i destino: ");
  273.        scanf("%d \n", &d_i);
  274.        printf("Ingresa coordenada j destino: ");
  275.        scanf("%d \n", &d_j);
  276.        /*x ej el jugador ingresó: o_i  = 0, o_j = 1*/
  277.  
  278.        //Entonces:
  279.        bosque[o_i][o_j]= ' '; //hacemos que en la posicion origen no haya nada
  280.        bosque[d_i][d_j]= '2'; //Movemos el jugador a la posicion destino
  281.  
  282.    }
  283.        else if(accion == 't')
  284.        {
  285.            do
  286.            {
  287.               bosque[d_i][d_j]='t';
  288.            }
  289.                while(bosque[d_i][d_j]!='X');
  290.  
  291.        }
  292.            else
  293.            {
  294.                printf("Accion incorrecta \n");
  295.            }
  296.  
  297.     bosques();
  298. }
  299.  
  300.  
  301. int ganador()
  302. {
  303.   jugar();
  304.   return 0;
  305. }
  306.  
  307.  
  308. char fin_juego()
  309. {
  310.   char salir;
  311.  
  312.   do
  313.   {
  314.      printf("Desea salir del programa (s/n)?:");
  315.      scanf(" %c", &salir);
  316.   }
  317.        while((salir != 's') || (salir != 'S'));
  318.  
  319.   return 0;
  320. }
  321.  

Y los errores:

228|error: ‘bosque’ no se declaró aquí (primer uso en esta función)|
228|nota: cada identificador sin declarar se reporta sólo una vez para cada función en el que aparece|
236|error: ‘d_i’ no se declaró aquí (primer uso en esta función)|
236|error: ‘d_j’ no se declaró aquí (primer uso en esta función)|
279|error: ‘bosque’ no se declaró aquí (primer uso en esta función)|
287|error: ‘d_i’ no se declaró aquí (primer uso en esta función)|
287|error: ‘d_j’ no se declaró aquí (primer uso en esta función)|
||=== Build finished: 7 errors, 0 warnings ===|


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: dragonlady en 5 Junio 2015, 14:41 pm
Malas noticias, mi profesor me rezongó que hiciera un solo bosque por un tema que la variable bosque la tenia que hacer global y char bosque[tam][tam] no me la permitia usar global (aun definiendo tam=1 globalmente)
asique me hizo hacer 5 bosques:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. //prototipos
  6. void menu();
  7. int ingrese_opcion();
  8. void mover_jugadores();
  9. void jugar();
  10. void reglas();
  11. void arboles();
  12. void mostrar_bosques();
  13. void bosque_1();
  14. void bosque_2();
  15. void bosque_3();
  16. void bosque_4();
  17. void bosque_5();
  18. void pausa();
  19. void turno_jugador1();
  20. void turno_jugador2();
  21. void flechazos();
  22. int ganador();
  23. char fin_juego();
  24.  
  25. //variables globales
  26. char bosque[1][1];
  27. int opcion;
  28. int jugadas;
  29.  
  30. int main()
  31. {
  32.     do
  33.        {
  34.            menu();
  35.            opcion=ingrese_opcion();
  36.            switch (opcion)
  37.            {
  38.               case 1:
  39.                   jugar();
  40.                   getchar();
  41.                   break;
  42.               case 2:
  43.                   reglas();
  44.                   break;
  45.               case 3:
  46.                    fin_juego();
  47.  
  48.  
  49.  
  50.            }
  51.        }
  52.        while (opcion!=3);
  53.    return 0;
  54. }
  55.  
  56. void menu()
  57. {
  58.    printf("______ARQUEROS EN EL BOSQUE_______\n");
  59.    printf("____________OOOOOO________________\n");
  60.    printf("_________OOOOOOOOOOOOO____________\n");
  61.    printf("_____OOOOOOOOOOOOOOOOOOOO_________\n");
  62.    printf("___OOOOOOOOOOOOOOOOOOOOOOOO_______\n");
  63.    printf("___OOOOOOOOOOOOOOOOOOOOOOOO_______\n");
  64.    printf("_____OOOOOOOOOOOOOOOOOOOO_________\n");
  65.    printf("______OOOOOOOOOOOOOOOOOO__________\n");
  66.    printf("_________OOOOOOOOOOOO_____________\n");
  67.    printf("__<----____OOOOOOOO_______________\n");
  68.    printf("_____________OOOO_________________\n");
  69.    printf("_____________OOOO_______---->_____\n");
  70.    printf("_____________OOOO_________________\n");
  71.    printf("_____________OOOO_________________\n");
  72.    printf("\n");
  73.    printf("MENU PRINCIPAL\n");
  74.    printf("><><><><><><><\n");
  75.    printf("Ingrese una de las opciones: \n");
  76.    printf("1. Jugar\n");
  77.    printf("2.Ver reglas\n");
  78.    printf("\n");
  79. }
  80.  
  81. int ingrese_opcion()
  82. {
  83.    int opcion;
  84.    scanf(" %d",&opcion);
  85.    return opcion;
  86. }
  87.  
  88. void jugar()
  89. {
  90.    system("clear");
  91.  
  92.    do
  93.    {
  94.  
  95.    int elije_bosque;
  96.    printf("*        Ingresa una opcion:        *\n\n");
  97.    printf("*        1- Bosque de 6 x 6         *\n");
  98.    printf("*        2- Bosque de 8 x 8         *\n");
  99.    printf("*        3- Bosque de 10 x 10       *\n");
  100.    printf("*        4- Bosque de 14 x 14       *\n");
  101.    printf("*        5- Bosque de 18 x 18       *\n");
  102.    scanf(" %d", &elije_bosque);
  103.  
  104.    system("clear");
  105.        switch (opcion)
  106.            {
  107.               case 1:
  108.                   bosque_1();
  109.                   break;
  110.               case 2:
  111.                   bosque_2();
  112.                   break;
  113.               case 3:
  114.                    bosque_3();
  115.                    break;
  116.                case 4:
  117.                   bosque_4();
  118.                   break;
  119.               case 5:
  120.                   bosque_5();
  121.                   break;
  122.  
  123.               default:
  124.                   fin_juego();
  125.            }
  126.  
  127.    }
  128.    while (opcion!=5);
  129.  
  130.    mover_jugadores();
  131.  
  132. }
  133.  
  134. void reglas() //aca muestro las reglas. tiene que poder volver al menu anterior
  135. {
  136.    system("clear");
  137.    printf("El juego consiste en eliminar al arquero del extremo opuesto. \n");
  138.    printf("Cada turno puede elegir moverse una casilla en sentido horizontal o vertical o lanzar un flechazo. \n");
  139.    printf("Los flechazos se mueven en linea recta, maximo cinco lugares.\n");
  140.    printf("Ni los jugadores ni los flechazos pueden atravezar los arboles(X)");
  141.    printf(" Al recibir un flechazo el jugador pierde el round, las partidas se componen de 3 round y las gana el que gane 2 de ellos.\n");
  142.    printf("Jugador primero sera identificado como 1 y jugador segundo como 2.\n");
  143.    printf("\n");
  144.    pausa();
  145.  
  146. }
  147.  
  148. void arboles(int a)
  149. {
  150.   //generando las 3 X aleatoriamente
  151.   srand (time(NULL));
  152.  
  153.   int Xnum=0; //contador
  154.   int i, j;
  155.   a=0;
  156.  
  157.   while(Xnum<a/2)//hasta que aparezcan la cantidad de X
  158.    {
  159.       i=rand()%a;
  160.       j=rand()%a;
  161.  
  162.    if(bosque[i][j]==' ')//verifica que no haya X en esa posicion
  163.       {
  164.           bosque[i][j]='X';   //dibuja una X
  165.           Xnum++; //para no dibujar mas X de las que deben ser
  166.       }
  167.  
  168.   }
  169.  
  170. }
  171.  
  172. void mostrar_bosques(int tam)
  173. {
  174.    int i,j;
  175.    //mostrar bosque
  176.   printf("\n  ");
  177.  
  178.   for (j=0;j<tam;j++) //filas alfabeticas
  179.       printf("  %c", 'a'+j);
  180.   printf("\n");
  181.  
  182.   for (i=0;i<tam;i++) //columnas numeradas
  183.    {
  184.       printf(" %d", i);
  185.  
  186.       for (j=0;j<tam;j++)
  187.        {
  188.          printf("| %c", bosque[i][j]);
  189.        }
  190.       printf("| \n");
  191.     }
  192. }
  193.  
  194.  
  195. void bosque_1()
  196. {
  197.    system("clear");
  198.  
  199.   int i,j;
  200.  
  201.   //Iniciando los valores del bosque a ' '
  202.   for(i=0;i<6;i++)
  203.       for(j=0;j<6;j++)
  204.           bosque[i][j]=' ';
  205.  
  206. //mostrar jugadores 1 y 2
  207.        bosque[0][0]='1';
  208.        bosque[5][5]='2';
  209. }
  210.  
  211. void bosque_2()
  212. {
  213.    system("clear");
  214.  
  215.   //mostrar jugadores 1 y 2
  216.        bosque[0][0]='1';
  217.        bosque[7][7]='2';
  218.  
  219.   int i,j;
  220.  
  221.   //Iniciando los valores del bosque a ' '
  222.   for(i=0;i<8;i++)
  223.       for(j=0;j<8;j++)
  224.           bosque[i][j]=' ';
  225. }
  226.  
  227. void bosque_3()
  228. {
  229.    system("clear");
  230.  
  231.   //mostrar jugadores 1 y 2
  232.        bosque[0][0]='1';
  233.        bosque[9][9]='2';
  234.  
  235.   int i,j;
  236.  
  237.   //Iniciando los valores del bosque a ' '
  238.   for(i=0;i<10;i++)
  239.       for(j=0;j<10;j++)
  240.           bosque[i][j]=' ';
  241. }
  242.  
  243. void bosque_4()
  244. {
  245.    system("clear");
  246.  
  247.   //mostrar jugadores 1 y 2
  248.        bosque[0][0]='1';
  249.        bosque[13][13]='2';
  250.  
  251.   int i,j;
  252.  
  253.   //Iniciando los valores del bosque a ' '
  254.   for(i=0;i<14;i++)
  255.       for(j=0;j<14;j++)
  256.           bosque[i][j]=' ';
  257. }
  258.  
  259. void bosque_5()
  260. {
  261.    system("clear");
  262.  
  263.   //mostrar jugadores 1 y 2
  264.        bosque[0][0]='1';
  265.        bosque[17][17]='2';
  266.  
  267.   int i,j;
  268.  
  269.   //Iniciando los valores del bosque a ' '
  270.   for(i=0;i<18;i++)
  271.       for(j=0;j<18;j++)
  272.           bosque[i][j]=' ';
  273. }
  274.  
  275. void pausa()
  276. {
  277.    char p;
  278.    printf ("Presiona cualquier tecla y enter para volver al menu");
  279.    scanf (" %c",&p);
  280. }
  281.  
  282. void mover_jugadores()
  283. {
  284.    int jugador;
  285.    int turno;
  286.  
  287.    printf("Elige quien empieza (jugador 1 o 2): ");
  288.  
  289.    switch(jugadas)
  290.    {
  291.        case 1:
  292.          jugador=1;
  293.          turno=0;
  294.               do
  295.                {
  296.                    turno++;
  297.                    if (jugador)
  298.                    {
  299.                        turno_jugador1();
  300.                    }
  301.                        else
  302.                            turno_jugador2();
  303.  
  304.                }
  305.           while ((!ganador())&&(turno<=3));
  306.    }
  307. }
  308.  
  309. void turno_jugador1() //movimientos de jugador 1
  310. {
  311.    char accion;
  312.  
  313.     //moverse
  314.    int o_i,o_j; //coordenadas origen
  315.    int d_i,d_j; //coordenadas destino
  316.  
  317.    printf("Moverte o tirar flecha? (m o t)");
  318.    scanf(" %c", &accion);
  319.  
  320.    //para saber lo que ha ingresado
  321.    if(accion == 'm')
  322.    {
  323.  
  324.        printf("Ingresa coordenada i origen: ");
  325.        scanf("%d \n", &o_i);
  326.        printf("Ingresa coordenada j origen: ");
  327.        scanf("%d \n", &o_j);
  328.        /*x ej el jugador ingresó: o_i  = 0, o_j = 0*/
  329.  
  330.        printf("Ingresa coordenada i destino: ");
  331.        scanf("%d \n", &d_i);
  332.        printf("Ingresa coordenada j destino: ");
  333.        scanf("%d \n", &d_j);
  334.        /*x ej el jugador ingresó: o_i  = 0, o_j = 1*/
  335.  
  336.        //Entonces:
  337.        bosque[o_i][o_j]= ' '; //que en la posicion origen no haya nada
  338.        bosque[d_i][d_j]= '1'; //Mover el jugador a la posicion destino
  339.  
  340.    }
  341.        else if(accion == 't')
  342.        {
  343.  
  344.            do
  345.            {
  346.               bosque[d_i][d_j]='t';
  347.            }
  348.                while(bosque[d_i][d_j]!='X');
  349.  
  350.        if (bosque[d_i][d_j]=='2')
  351.        {
  352.  
  353.        }
  354.  
  355.        }
  356.            else
  357.            {
  358.                printf("Accion incorrecta \n");
  359.            }
  360. }
  361.  
  362. void turno_jugador2() //movimientos de jugador 1
  363. {
  364.  
  365.    char accion;
  366.    //moverse
  367.    int o_i,o_j; //coordenadas origen
  368.    int d_i,d_j; //coordenadas destino
  369.  
  370.    printf("Moverte o tirar flecha? (m o t)");
  371.    scanf(" %c", &accion);
  372.  
  373.    //para saber lo que ha ingresado
  374.    if(accion == 'm')
  375.    {
  376.        printf("Ingresa coordenada i origen: ");
  377.        scanf("%d \n", &o_i);
  378.        printf("Ingresa coordenada j origen: ");
  379.        scanf("%d \n", &o_j);
  380.        /*x ej el jugador ingresó: o_i  = 0, o_j = 0*/
  381.  
  382.        printf("Ingresa coordenada i destino: ");
  383.        scanf("%d \n", &d_i);
  384.        printf("Ingresa coordenada j destino: ");
  385.        scanf("%d \n", &d_j);
  386.        /*x ej el jugador ingresó: o_i  = 0, o_j = 1*/
  387.  
  388.        //Entonces:
  389.        bosque[o_i][o_j]= ' '; //hacemos que en la posicion origen no haya nada
  390.        bosque[d_i][d_j]= '2'; //Movemos el jugador a la posicion destino
  391.  
  392.    }
  393.        else if(accion == 't')
  394.        {
  395.            do
  396.            {
  397.               bosque[d_i][d_j]='t';
  398.            }
  399.                while(bosque[d_i][d_j]!='X');
  400.  
  401.        }
  402.            else
  403.            {
  404.                printf("Accion incorrecta \n");
  405.            }
  406.  
  407. }
  408.  
  409.  
  410. int ganador()
  411. {
  412.   jugar();
  413.   return 0;
  414. }
  415.  
  416.  
  417. char fin_juego()
  418. {
  419.   char salir;
  420.  
  421.   do
  422.   {
  423.      printf("Desea salir del programa (s/n)?:");
  424.      scanf(" %c", &salir);
  425.   }
  426.        while((salir != 's') || (salir != 'S'));
  427.  
  428.   return 0;
  429. }
  430.  

Yo se que el profesor nos enseñó que las matrices tienen que ser fijas (por lo menos este 1er año) pero me enlió peor :|


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: 0xFer en 6 Junio 2015, 01:43 am
jeje perdona la demora pero vi tu mensaje 6 horas depués de que lo publicaste.

mm, la verdad es que será muy difícil que te diga cómo corregir lo que ya tienes, asi que te doy un nitro:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. /*Prototipos*/
  6. void menu();
  7. void reglas();
  8. void fin_juego();
  9.  
  10. void Select_Bosque();
  11. void Iniciar_Bosque();
  12. void Actualizar_Juego();
  13. void Bucle_Juego();
  14.  
  15. void Mov_Attack(int);
  16.  
  17. /*Variables globales*/
  18. char bosque6x6[6][6];
  19. char bosque8x8[8][8];
  20. char bosque10x10[10][10];
  21. char bosque14x14[14][14];
  22. char bosque18x18[18][18];
  23.  
  24. int opcion = 0;
  25. int tam_bosque = 0;
  26.  
  27. int main()
  28. {
  29.    while(opcion != 3)
  30.    {  
  31.        menu();
  32.        scanf("%d",&opcion);
  33.  
  34.        switch(opcion){
  35.            case 1: Select_Bosque(); break;
  36.            case 2: reglas();        break;
  37.            case 3: fin_juego();     break;
  38.        }
  39.  
  40.     }
  41.  
  42.   return 0;
  43. }
  44.  
  45. void menu()
  46. {
  47.   printf("______ARQUEROS EN EL BOSQUE_______\n");
  48.   printf("____________OOOOOO________________\n");
  49.   printf("_________OOOOOOOOOOOOO____________\n");
  50.   printf("_____OOOOOOOOOOOOOOOOOOOO_________\n");
  51.   printf("___OOOOOOOOOOOOOOOOOOOOOOOO_______\n");
  52.   printf("___OOOOOOOOOOOOOOOOOOOOOOOO_______\n");
  53.   printf("_____OOOOOOOOOOOOOOOOOOOO_________\n");
  54.   printf("______OOOOOOOOOOOOOOOOOO__________\n");
  55.   printf("_________OOOOOOOOOOOO_____________\n");
  56.   printf("__<----____OOOOOOOO_______________\n");
  57.   printf("_____________OOOO_________________\n");
  58.   printf("_____________OOOO_______---->_____\n");
  59.   printf("_____________OOOO_________________\n");
  60.   printf("_____________OOOO_________________\n");
  61.   printf("\n");
  62.   printf("MENU PRINCIPAL\n");
  63.   printf("><><><><><><><\n");
  64.   printf("Ingrese una de las opciones: \n");
  65.   printf("1. Jugar\n");
  66.   printf("2.Ver reglas\n");
  67.   printf("3.Salir del juego\n");
  68.   printf("\n");
  69. }
  70.  
  71. void reglas() //aca muestro las reglas. tiene que poder volver al menu anterior
  72. {
  73.   system("clear");
  74.   printf("El juego consiste en eliminar al arquero del extremo opuesto. \n");
  75.   printf("Cada turno puede elegir moverse una casilla en sentido horizontal o vertical o lanzar un flechazo. \n");
  76.   printf("Los flechazos se mueven en linea recta, maximo cinco lugares.\n");
  77.   printf("Ni los jugadores ni los flechazos pueden atravezar los arboles(X)");
  78.   printf(" Al recibir un flechazo el jugador pierde el round, las partidas se componen de 3 round y las gana el que gane 2 de ellos.\n");
  79.   printf("Jugador primero sera identificado como 1 y jugador segundo como 2.\n");
  80.   printf("\n");
  81.   char p;
  82.   printf ("Presiona cualquier tecla y enter para volver al menu ");
  83.   scanf (" %c",&p);
  84. }
  85.  
  86. void fin_juego()
  87. {
  88.    system("clear");
  89.    printf("\n\n\n\t\t!!GRACIAS POR JUGAR!!!\n\n\n");
  90. }
  91.  
  92. void Select_Bosque()
  93. {
  94.  
  95.   system("clear");
  96.   int elije_bosque;
  97.   printf("*        Ingresa una opcion:        *\n\n");
  98.   printf("*        1- Bosque de 6 x 6         *\n");
  99.   printf("*        2- Bosque de 8 x 8         *\n");
  100.   printf("*        3- Bosque de 10 x 10       *\n");
  101.   printf("*        4- Bosque de 14 x 14       *\n");
  102.   printf("*        5- Bosque de 18 x 18       *\n");
  103.   scanf(" %d", &elije_bosque);
  104.  
  105.   system("clear");
  106.  
  107.   switch(elije_bosque){
  108.       case 1: tam_bosque = 6;
  109.               Iniciar_Bosque();
  110.               Bucle_Juego();  
  111.               break;
  112.       case 2: tam_bosque = 8;
  113.               Iniciar_Bosque();
  114.               Bucle_Juego();  
  115.               break;
  116.       case 3: tam_bosque = 10;
  117.               Iniciar_Bosque();
  118.               Bucle_Juego();
  119.               break;
  120.       case 4: tam_bosque = 14;
  121.               Iniciar_Bosque();
  122.               Bucle_Juego();
  123.               break;
  124.       case 5: tam_bosque = 18;
  125.               Iniciar_Bosque();
  126.               Bucle_Juego();
  127.               break;
  128.   }
  129.  
  130. }
  131. /*Ponemos los valores iniciales para el bosque*/
  132. void Iniciar_Bosque()
  133. {
  134.    srand (time(NULL));
  135.  
  136.    int Xnum = 0;
  137.    int i, j;
  138.  
  139.    if(tam_bosque == 6)
  140.    {
  141.        for(i = 0; i < tam_bosque;i++)
  142.            for(j = 0; j < tam_bosque;j++)
  143.                bosque6x6[i][j] = ' ';
  144.  
  145.        bosque6x6[0][0] = '1';
  146.        bosque6x6[5][5] = '2';
  147.  
  148.        while(Xnum < tam_bosque/2 )
  149.        {
  150.            i = (rand() % tam_bosque);
  151.            j = (rand() % tam_bosque);
  152.  
  153.            if(bosque6x6[i][j] == ' ')
  154.            {
  155.                bosque6x6[i][j] = 'X';
  156.                Xnum++;
  157.            }
  158.  
  159.        }    
  160.    }
  161.  
  162.    else if(tam_bosque == 8)
  163.    {
  164.        for(i = 0; i < tam_bosque;i++)
  165.            for(j = 0; j < tam_bosque;j++)
  166.                bosque8x8[i][j] = ' ';
  167.  
  168.        bosque8x8[0][0] = '1';
  169.        bosque8x8[7][7] = '2';
  170.  
  171.        while(Xnum < tam_bosque/2 )
  172.        {
  173.            i = rand() % tam_bosque;
  174.            j = rand() % tam_bosque;
  175.  
  176.            if(bosque8x8[i][j] == ' ')
  177.            {
  178.                bosque8x8[i][j] = 'X';
  179.                Xnum++;
  180.            }
  181.  
  182.        }    
  183.    }
  184.    else if(tam_bosque == 10)
  185.    {
  186.        for(i = 0; i < tam_bosque;i++)
  187.            for(j = 0; j < tam_bosque;j++)
  188.                bosque10x10[i][j] = ' ';
  189.  
  190.        bosque10x10[0][0] = '1';
  191.        bosque10x10[9][9] = '2';
  192.  
  193.        while(Xnum < tam_bosque/2 )
  194.        {
  195.            i = rand() % tam_bosque;
  196.            j = rand() % tam_bosque;
  197.  
  198.            if(bosque10x10[i][j] == ' ')
  199.            {
  200.                bosque10x10[i][j] = 'X';
  201.                Xnum++;
  202.            }
  203.  
  204.        }    
  205.    }
  206.    else if(tam_bosque == 14)
  207.    {
  208.        for(i = 0; i < tam_bosque;i++)
  209.            for(j = 0; j < tam_bosque;j++)
  210.                bosque14x14[i][j] = ' ';
  211.  
  212.        bosque14x14[0][0] = '1';
  213.        bosque14x14[13][13] = '2';
  214.  
  215.        while(Xnum < tam_bosque/2 )
  216.        {
  217.            i = rand() % tam_bosque;
  218.            j = rand() % tam_bosque;
  219.  
  220.            if(bosque14x14[i][j] == ' ')
  221.            {
  222.                bosque14x14[i][j] = 'X';
  223.                Xnum++;
  224.            }
  225.  
  226.        }    
  227.    }
  228.    else if(tam_bosque == 18)
  229.    {
  230.        for(i = 0; i < tam_bosque;i++)
  231.            for(j = 0; j < tam_bosque;j++)
  232.                bosque18x18[i][j] = ' ';
  233.  
  234.        bosque18x18[0][0] = '1';
  235.        bosque18x18[17][17] = '2';
  236.  
  237.        while(Xnum < tam_bosque/2 )
  238.        {
  239.            i = rand() % tam_bosque;
  240.            j = rand() % tam_bosque;
  241.  
  242.            if(bosque18x18[i][j] == ' ')
  243.            {
  244.                bosque18x18[i][j] = 'X';
  245.                Xnum++;
  246.            }
  247.  
  248.        }    
  249.    }
  250.  
  251. }
  252. /*Dibuja cuando sea necesario*/
  253. void Actualizar_Juego()
  254. {
  255.    system("clear");
  256.  
  257.    if( tam_bosque == 6)
  258.    {
  259.        int i,j;
  260.        printf("\n  ");
  261.  
  262.        for (j = 0; j < tam_bosque;j++) //filas alfabeticas
  263.            printf("  %c", 'a'+j);
  264.        printf("\n");
  265.  
  266.        for (i = 0;i < tam_bosque;i++) //columnas numeradas
  267.        {
  268.            printf(" %2d", i);
  269.  
  270.            for (j = 0;j < tam_bosque;j++)
  271.            {
  272.                printf("| %c", bosque6x6[i][j]);
  273.            }
  274.            printf("| \n");
  275.        }
  276.    }
  277.    else if( tam_bosque == 8)
  278.    {
  279.        int i,j;
  280.        printf("\n  ");
  281.  
  282.        for (j = 0;j < tam_bosque;j++) //filas alfabeticas
  283.            printf("  %c", 'a'+j);
  284.        printf("\n");
  285.  
  286.        for (i = 0;i < tam_bosque;i++) //columnas numeradas
  287.        {
  288.            printf(" %2d", i);
  289.  
  290.            for (j = 0;j < tam_bosque;j++)
  291.            {
  292.                printf("| %c", bosque8x8[i][j]);
  293.            }
  294.            printf("| \n");
  295.        }
  296.    }
  297.    else if( tam_bosque == 10)
  298.    {
  299.        int i,j;
  300.        printf("\n  ");
  301.  
  302.        for (j = 0;j < tam_bosque;j++) //filas alfabeticas
  303.            printf("  %c", 'a'+j);
  304.        printf("\n");
  305.  
  306.        for (i = 0;i < tam_bosque;i++) //columnas numeradas
  307.        {
  308.            printf(" %2d", i);
  309.  
  310.            for (j = 0;j < tam_bosque;j++)
  311.            {
  312.                printf("| %c", bosque10x10[i][j]);
  313.            }
  314.            printf("| \n");
  315.        }
  316.    }
  317.    else if( tam_bosque == 14)
  318.    {
  319.        int i,j;
  320.        printf("\n  ");
  321.  
  322.        for (j = 0;j < tam_bosque;j++) //filas alfabeticas
  323.            printf("  %c", 'a'+j);
  324.        printf("\n");
  325.  
  326.        for (i = 0;i < tam_bosque;i++) //columnas numeradas
  327.        {
  328.            printf(" %2d", i);
  329.  
  330.            for (j = 0;j < tam_bosque;j++)
  331.            {
  332.                printf("| %c", bosque14x14[i][j]);
  333.            }
  334.            printf("| \n");
  335.        }
  336.    }
  337.    else if( tam_bosque == 18)
  338.    {
  339.        int i,j;
  340.        printf("\n  ");
  341.  
  342.        for (j = 0;j < tam_bosque;j++) //filas alfabeticas
  343.            printf("  %c", 'a'+j);
  344.        printf("\n");
  345.  
  346.        for (i = 0;i < tam_bosque;i++) //columnas numeradas
  347.        {
  348.            printf(" %2d", i);
  349.  
  350.            for (j = 0;j < tam_bosque;j++)
  351.            {
  352.                printf("| %c", bosque18x18[i][j]);
  353.            }
  354.            printf("| \n");
  355.        }
  356.    }
  357.  
  358. }
  359.  
  360. /****BUCLE DEL JUEGO****/
  361. void Bucle_Juego()
  362. {
  363.    int ganador = 0;
  364.    int turno = 1; //empieza jugador 1
  365.  
  366.    while(ganador == 0){ //que se repita mientras no haya ningun ganador
  367.  
  368.        Actualizar_Juego(); //Actualiza el juego
  369.  
  370.        Mov_Attack(turno); //mueve o ataca  
  371.  
  372.        /*Falta un codigo para comprobar si alguien ya ha ganado*/
  373.  
  374.        /*Cambiando los turnos*/
  375.        if(turno == 1)
  376.            turno = 2;
  377.        else
  378.            turno = 1;
  379.    }
  380.  
  381.    /*cuando se termine el bucle comprobamos quien ha ganado*/
  382.    if(ganador == 1){
  383.        printf("Ha Ganado el jugador 1");
  384.    }
  385.    else if(ganador == 2)
  386.        printf("Ha Ganado el jugador 2");
  387.  
  388. }
  389.  
  390. void Mov_Attack(int turno)
  391. {
  392.    char imagen_jugador; //para dibujar un '1' o un '2' dependiendo del turno
  393.  
  394.    if(turno == 1)
  395.    {
  396.        imagen_jugador = '1';
  397.        printf("Es el turno del jugador 1\n");
  398.    }
  399.    else
  400.    {
  401.        imagen_jugador = '2';
  402.        printf("Es el turno del jugador 2\n");
  403.    }  
  404.  
  405.   char accion;
  406.  
  407.    //moverse
  408.   int o_i,d_i; //coordenadas origen(enteros)
  409.   char o_j,d_j;  //coordenadas destino(letras)
  410.  
  411.   printf("Moverte o tirar flecha? (m o t)");
  412.   scanf(" %c", &accion);
  413.  
  414.   //para saber lo que ha ingresado
  415.   if(accion == 'm')
  416.   {
  417.       printf("Ingresa coordenada vertical origen(numero): ");
  418.       scanf(" %d", &o_i); //pedimos un entero
  419.       printf("Ingresa coordenada horizontal origen(letra): ");
  420.       scanf(" %c", &o_j); //depimos un char
  421.  
  422.       printf("Ingresa coordenada vertical destino(numero): ");
  423.       scanf(" %d", &d_i); //pedimos un entero
  424.       printf("Ingresa coordenada horizontal destino(letra): ");
  425.       scanf(" %c", &d_j); //pedimos un char
  426.  
  427.       /*Dependiendo del tamaño del bosque*/
  428.       if( tam_bosque == 6)
  429.       {
  430.           bosque6x6[o_i][o_j - 97]= ' ';
  431.           bosque6x6[d_i][d_j - 97]= imagen_jugador;
  432.       }
  433.       else if( tam_bosque == 8)
  434.       {
  435.           bosque8x8[o_i][o_j - 97]= ' ';
  436.           bosque8x8[d_i][d_j - 97]= imagen_jugador;
  437.       }
  438.       else if( tam_bosque == 10)
  439.       {
  440.           bosque10x10[o_i][o_j - 97]= ' ';
  441.           bosque10x10[d_i][d_j - 97]= imagen_jugador;
  442.       }
  443.       else if( tam_bosque == 14)
  444.       {
  445.           bosque14x14[o_i][o_j - 97]= ' ';
  446.           bosque14x14[d_i][d_j - 97]= imagen_jugador;
  447.       }
  448.       else if( tam_bosque == 18)
  449.       {
  450.           bosque18x18[o_i][o_j - 97]= ' ';
  451.           bosque18x18[d_i][d_j - 97]= imagen_jugador;
  452.       }
  453.  
  454.   }
  455.   else if(accion == 't')
  456.   {
  457.       /*ALGORITMO PARA TIRAR FLECHAZO*/
  458.   }
  459.   else
  460.   {
  461.        printf("Accion incorrecta \n");
  462.   }
  463.  
  464. }
  465.  
  466.  


solo falta hacer el algoritmo para tirar flechas


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: dragonlady en 6 Junio 2015, 02:28 am
Gracias por toda la ayuda la verdad, que el día de hoy había sido muy desalentador, después de todo lo que había hecho me hicieron cambiar casi todo.
Voy a revisar todo bien, entender y ahí agarrar para terminarlo.
Se que había quedado muy a medias, lo fuí subiendo a medida que estaba en clase, estaba desesperando porque se me armó un lio tremendo, consulté unas cosas pero fue peor jaja Así que tengo varias versiones del juego a medio terminar.

Gracias por la ayuda, de nuevo. Cuando lo termine, muestro el resultado :)


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: 0xFer en 6 Junio 2015, 02:40 am
De nada, para eso estamos.


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: dragonlady en 6 Junio 2015, 02:43 am
Una pregunta de curiosidad, para que usas %i? es funcional remplazarlo por %d? Solo uso regularmente %d, %c y %f. Y lo googlié y pareciera que es lo mismo usar i q d?


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: 0xFer en 6 Junio 2015, 02:56 am
Con el printf no hay diferencias, pero si con scanf, el %d es para decimal, el %i funcional igual además de soportar números hexadecimanles y octales, cuando utilizas el %i creo que hay más código de por medio en el ejecutable(no estoy seguro), asi que lo correcto es utilizar el %d si sabes de ante mano que estas trabajando solo con enteros.

jaja yo siempre suelo utilizar el %i pero no es correcto, es mejor utilizar el %d, siempre y cuando no estes trabajando con hexa u octal.


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: dragonlady en 8 Junio 2015, 19:39 pm
Hola, yo de nuevo. Tengo 2 dudas,

Esta parte la quise cambiar para poder elegir quien empieza:

Código
  1. void mover_tirarflecha(int turno)
  2. {
  3.    char imagen_jugador; //dibuja 1' o '2' dependiendo del turno
  4.  
  5.    printf("Que jugador empieza?: ");
  6.    scanf(" %d", turno);
  7.  
  8.    if(turno == 1)
  9.    {
  10.        imagen_jugador = '1';
  11.        printf("Es el turno del jugador 1\n");
  12.    }
  13.    else
  14.    {
  15.        imagen_jugador = '2';
  16.        printf("Es el turno del jugador 2\n");
  17.    }
  18.  

Pero me dice un error  |warning: format '%d' expects argument of type 'int *', but argument 2 has type 'int' [-Wformat]|

Denitivamente tengo problemas con los parámetros :|

Y después estoy tratando de hacer los flechazos:

Código
  1. else if(accion == 't') //para disparar flecha. Se mueven arriba,abajo,izq,derecha
  2.   {
  3.       if (tam_bosque==6)
  4.       {
  5.           int limite=0, arriba=0, abajo=0, izq=0, derecha=0;
  6.           int i=d_i;
  7.           int j=d_j;
  8.  
  9.           while((limite<5) && (arriba<6) && (bosque6x6!='X'))//para arriba
  10.           {
  11.               if (bosque6x6[i][j]=='2')
  12.                  {
  13.                        arriba++;
  14.                        j++;
  15.                        printf("GAME OVER: Jugador 2");
  16.                  }
  17.                        else printf("Fallaste!\n");
  18.  

Bueno y así con abajo, derecha e izquierda. Acá el error es: warning: comparison between pointer and integer [enabled by default]|


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: Regexp en 8 Junio 2015, 19:55 pm
Hola, yo de nuevo. Tengo 2 dudas,

Esta parte la quise cambiar para poder elegir quien empieza:

Código
  1. void mover_tirarflecha(int turno)
  2. {
  3. // [...]
  4.   scanf(" %d", turno);
  5. // [...]
  6.  

Bueno y así con abajo, derecha e izquierda. Acá el error es: warning: comparison between pointer and integer [enabled by default]|


De repente entre tanto código no te has dado cuenta, pero lo que te dice es simplemente que se espera una dirección de memoria, no un valor entero, simplemente cambia esa linea por

Código
  1. scanf(" %d", &turno);


Edit


El segundo error es similar, estas comparando una dirección de memoria con un entero en la condición del while

Código
  1. while((limite<5) && (arriba<6) && (bosque6x6!='X'))//para arriba

Dice que compara con entero porque 'X' es convertido automáticamente en su valor en la tabla ASCII. No entiendo muy bien la mecánica del juego, pero creo que lo que quieres es comparar los valores de la matriz bosque6x6. El nombre bosque6x6 apunta al inicio de la matriz. ¿Quizá quieras hacer esta comparación dentro del while y dejar un flag en la condición del mismo?

Código
  1. while( (tus_condicciones) && flag )
  2. {
  3.    // codigo
  4.    if ( (otra_condicion) ) flag = false;
  5.    // mas codigo
  6. }

Saludos


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: 0xFer en 8 Junio 2015, 20:03 pm
Es correcto lo que dice @Regexp, pero ese código no debería de ír ahí, debería estar aquí:

Código
  1. void Bucle_Juego()
  2. {
  3.    int ganador = 0;
  4.    int turno = 1; //empieza jugador 1
  5.  
  6.    while(ganador == 0){ //que se repita mientras no haya ningun ganador
  7.  
  8.        Actualizar_Juego(); //Actualiza el juego
  9.  
  10.        Mov_Attack(turno); //mueve o ataca  
  11.  
  12.        /*Falta un codigo para comprobar si alguien ya ha ganado*/
  13.  
  14.        /*Cambiando los turnos*/
  15.        if(turno == 1)
  16.            turno = 2;
  17.        else
  18.            turno = 1;
  19.    }
  20.  
  21.    /*cuando se termine el bucle comprobamos quien ha ganado*/
  22.    if(ganador == 1){
  23.        printf("Ha Ganado el jugador 1");
  24.    }
  25.    else if(ganador == 2)
  26.        printf("Ha Ganado el jugador 2");
  27.  
  28. }

justo antes de entrar al bucle del juego(el while(ganador == 0)), fíjate que he declarado una variable llamada turno y la he iniciado a 1.

Ahora el segundo error creo que está en bosque6x6!='X', ya que bosque6x6 es un arreglo pero no puedes comparar un arreglo directamente con un 'X' tienes que acceder a los indices del arreglo, así como ya has hecho muchas veces, ejemplo:
bosque6x6[0][3], solo entonces podrás hacer ese tipo de comparaciones.

Nota: Un arreglo también es un puntero, como dice @Regexp; es una dirección de memória.



Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: dragonlady en 9 Junio 2015, 00:06 am
Hola! Gracias por contestar a ambos. Se me pasan detalles por despistada y apurada.

Continuando con la parte de los ataques, respecto a lo que me comentaste, lo entiendo pero un compañero me mostraba como a el si le funcionaba usando matrices [j] asi como las puse yo :O Y lo que sería imposible es que no es fijo, no puedo poner por ejemplo
  • [3] como me indicabas, ya que uso i y j porque pueden estar en cualquier lado los arboles, son random.
Le hice algunas modificaciones pero lo gracioso es que directamente cuando el jugador indica la opcion de disparar, se va al else directamente, siempre en un "Fallaste!" que no termina,


Código
  1. if (tam_bosque==6)
  2.       {
  3.           int limite=0, arriba=0, abajo=0, izq=0, derecha=0;
  4.           int i=d_i;
  5.           int j=d_j;
  6.  
  7.           while((limite<5) && (arriba<6) && (bosque6x6[i][j]!='X'))//para arriba
  8.           {
  9.               if (bosque6x6[i][j]=='2')
  10.                  {
  11.                        arriba++;
  12.                        j++;
  13.                        printf("GAME OVER: Jugador 2");
  14.                  }
  15.                        else printf("Fallaste!\n");
  16.  
  17.           }
  18.  
  19.           while((limite<5) && (abajo<6) && (bosque6x6[i][j]!='X'))//para abajo
  20.  
  21.           {
  22.               if (bosque6x6[i][j]=='2')
  23.                  {
  24.                        abajo++;
  25.                        j--;
  26.                        printf("GAME OVER: Jugador 2");
  27.                  }
  28.                        else printf("Fallaste!\n");
  29.           }
  30.  
  31.           while((limite<5) && (izq<6) && (bosque6x6[i][j]!='X'))//para la izquierda
  32.           {
  33.               if (bosque6x6[i][j]=='2')
  34.                    {
  35.                        izq++;
  36.                        i--;
  37.                        printf("GAME OVER: Jugador 2");
  38.                  }
  39.                        else printf("Fallaste!\n");
  40.  
  41.           }
  42.  
  43.           while((limite<5) && (derecha<6) && (bosque6x6[i][j]!='X'))//para la derecha
  44.           {
  45.               if (bosque6x6[i][j]=='2')
  46.                  {
  47.                        derecha++;
  48.                        i++;
  49.                        printf("GAME OVER: Jugador 2");
  50.                  }
  51.                        else printf("Fallaste!\n");
  52.           }
  53.  
  54.  
  55.       }


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: 0xFer en 9 Junio 2015, 00:14 am
Publica todo el código de lo contrario tengo que hacer muchas deducciones  :-\, lo de los arreglos solo te lo mostré como un ejemplo no necesariamente tiene que ser [ 0 ] [ 3 ]

publica al menos la parte de if(accion == 'm'){ /*El código de aquí*/ }


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: dragonlady en 9 Junio 2015, 00:17 am
Entendí si, que fue un ejemplo, yo digo ya que son numeros, no veo como podria usarlo para algo que cambia siempre en el tablero

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. //Prototipos
  6. void menu();
  7. void reglas();
  8. void fin_juego();
  9. void Elegir_Bosque();
  10. void Iniciar_Bosque();
  11. void Actualizar_Juego();
  12. void Bucle_Juego();
  13. void mover_tirarflecha(int);
  14.  
  15. //Variables globales
  16. char bosque6x6[6][6];
  17. char bosque8x8[8][8];
  18. char bosque10x10[10][10];
  19. char bosque14x14[14][14];
  20. char bosque18x18[18][18];
  21.  
  22. int opcion=0;
  23. int tam_bosque=0;
  24.  
  25. int main()
  26. {
  27.    while(opcion!=3)
  28.    {
  29.        menu();
  30.        scanf("%d",&opcion);
  31.        switch(opcion)
  32.        {
  33.            case 1: Elegir_Bosque();
  34.                    break;
  35.            case 2: reglas();
  36.                    break;
  37.            case 3: fin_juego();
  38.                    break;
  39.        }
  40.     }
  41.   return 0;
  42. }
  43.  
  44. void menu()
  45. {
  46.   printf("     ______ARQUEROS EN EL BOSQUE_______\n");
  47.   printf("     ____________OOOOOO________________\n");
  48.   printf("     _________OOOOOOOOOOOOO____________\n");
  49.   printf("     _____OOOOOOOOOOOOOOOOOOOO_________\n");
  50.   printf("     ___OOOOOOOOOOOOOOOOOOOOOOOO_______\n");
  51.   printf("     ___OOOOOOOOOOOOOOOOOOOOOOOO_______\n");
  52.   printf("     _____OOOOOOOOOOOOOOOOOOOO_________\n");
  53.   printf("     ______OOOOOOOOOOOOOOOOOO__________\n");
  54.   printf("     _________OOOOOOOOOOOO_____________\n");
  55.   printf("     __<----____OOOOOOOO_______________\n");
  56.   printf("     _____________OOOO_________________\n");
  57.   printf("     _____________OOOO_______---->_____\n");
  58.   printf("     _____________OOOO_________________\n");
  59.   printf("     _____________OOOO_________________\n");
  60.   printf("\n");
  61.   printf("     MENU PRINCIPAL\n");
  62.   printf("     ><><><><><><><\n");
  63.   printf("     Ingrese una de las opciones: \n");
  64.   printf("     1. Jugar\n");
  65.   printf("     2.Ver reglas\n");
  66.   printf("     3.Salir del juego\n");
  67.   printf("\n");
  68. }
  69.  
  70. void reglas() //aca muestro las reglas. tiene que poder volver al menu anterior
  71. {
  72.   system("cls");
  73.   printf("El juego consiste en eliminar al arquero del extremo opuesto. \n");
  74.   printf("Cada turno puede elegir moverse una casilla o lanzar un flechazo. \n");
  75.   printf("Los flechazos se mueven en linea recta, maximo cinco lugares.\n");
  76.   printf("Ni los jugadores ni los flechazos pueden atravezar los arboles(X)");
  77.   printf(" Al recibir un flechazo el jugador pierde el round, las partidas se componen de 3 round y las gana el que gane 2 de ellos.\n");
  78.   printf("Jugador primero sera identificado como 1 y jugador segundo como 2.\n");
  79.   printf("\n\n");
  80.   char p;
  81.   printf (">>Presiona cualquier tecla y enter para volver al menu ");
  82.   scanf (" %c",&p);
  83. }
  84.  
  85. void fin_juego()
  86. {
  87.    system("cls");
  88.    printf("\n\n\n\t\t\t* GRACIAS POR JUGAR! *\n\n\n");
  89.    printf("\t\t\t  Sabrina Cabrera.\n \t\t\t  Programacion.\n \t\t\t  Tecnologo 2015\n\n");
  90. }
  91.  
  92. void Elegir_Bosque()
  93. {
  94.   system("cls");
  95.   int elige_bosque;
  96.   printf("     >        Ingresa una opcion:        <\n\n");
  97.   printf("     >        1- Bosque de 6 x 6         <\n");
  98.   printf("     >        2- Bosque de 8 x 8         <\n");
  99.   printf("     >        3- Bosque de 10 x 10       <\n");
  100.   printf("     >        4- Bosque de 14 x 14       <\n");
  101.   printf("     >        5- Bosque de 18 x 18       <\n");
  102.   scanf(" %d", &elige_bosque);
  103.  
  104.   system("cls");
  105.  
  106.   switch(elige_bosque)
  107.   {
  108.       case 1: tam_bosque = 6;
  109.               Iniciar_Bosque();
  110.               Bucle_Juego();
  111.               break;
  112.       case 2: tam_bosque = 8;
  113.               Iniciar_Bosque();
  114.               Bucle_Juego();
  115.               break;
  116.       case 3: tam_bosque = 10;
  117.               Iniciar_Bosque();
  118.               Bucle_Juego();
  119.               break;
  120.       case 4: tam_bosque = 14;
  121.               Iniciar_Bosque();
  122.               Bucle_Juego();
  123.               break;
  124.       case 5: tam_bosque = 18;
  125.               Iniciar_Bosque();
  126.               Bucle_Juego();
  127.               break;
  128.   }
  129.  
  130. }
  131. //valores iniciales para el bosque
  132. void Iniciar_Bosque()
  133. {
  134.    srand (time(NULL));
  135.  
  136.    int Xnum=0;
  137.    int i, j;
  138.  
  139.    if(tam_bosque == 6)
  140.    {
  141.        for(i = 0; i < tam_bosque;i++)
  142.            for(j = 0; j < tam_bosque;j++)
  143.                bosque6x6[i][j] = ' ';
  144.  
  145.        bosque6x6[0][0] = '1';
  146.        bosque6x6[5][5] = '2';
  147.  
  148.  
  149.        while(Xnum < tam_bosque/2 )
  150.  
  151.        {
  152.            i = (rand() % tam_bosque);
  153.            j = (rand() % tam_bosque);
  154.  
  155.            if(bosque6x6[i][j] == ' ')
  156.            {
  157.                bosque6x6[i][j] = 'X';
  158.                Xnum++;
  159.            }
  160.  
  161.        }
  162.    }
  163.  
  164.    else if(tam_bosque == 8)
  165.    {
  166.        for(i = 0; i < tam_bosque;i++)
  167.            for(j = 0; j < tam_bosque;j++)
  168.                bosque8x8[i][j] = ' ';
  169.  
  170.        bosque8x8[0][0] = '1';
  171.        bosque8x8[7][7] = '2';
  172.  
  173.        while(Xnum < tam_bosque/2 )
  174.        {
  175.            i = rand() % tam_bosque;
  176.            j = rand() % tam_bosque;
  177.  
  178.            if(bosque8x8[i][j] == ' ')
  179.            {
  180.                bosque8x8[i][j] = 'X';
  181.                Xnum++;
  182.            }
  183.  
  184.        }
  185.    }
  186.    else if(tam_bosque == 10)
  187.    {
  188.        for(i = 0; i < tam_bosque;i++)
  189.            for(j = 0; j < tam_bosque;j++)
  190.                bosque10x10[i][j] = ' ';
  191.  
  192.        bosque10x10[0][0] = '1';
  193.        bosque10x10[9][9] = '2';
  194.  
  195.        while(Xnum < tam_bosque/2 )
  196.        {
  197.            i = rand() % tam_bosque;
  198.            j = rand() % tam_bosque;
  199.  
  200.            if(bosque10x10[i][j] == ' ')
  201.            {
  202.                bosque10x10[i][j] = 'X';
  203.                Xnum++;
  204.            }
  205.  
  206.        }
  207.    }
  208.    else if(tam_bosque == 14)
  209.    {
  210.        for(i = 0; i < tam_bosque;i++)
  211.            for(j = 0; j < tam_bosque;j++)
  212.                bosque14x14[i][j] = ' ';
  213.  
  214.        bosque14x14[0][0] = '1';
  215.        bosque14x14[13][13] = '2';
  216.  
  217.        while(Xnum < tam_bosque/2 )
  218.        {
  219.            i = rand() % tam_bosque;
  220.            j = rand() % tam_bosque;
  221.  
  222.            if(bosque14x14[i][j] == ' ')
  223.            {
  224.                bosque14x14[i][j] = 'X';
  225.                Xnum++;
  226.            }
  227.  
  228.        }
  229.    }
  230.    else if(tam_bosque == 18)
  231.    {
  232.        for(i = 0; i < tam_bosque;i++)
  233.            for(j = 0; j < tam_bosque;j++)
  234.                bosque18x18[i][j] = ' ';
  235.  
  236.        bosque18x18[0][0] = '1';
  237.        bosque18x18[17][17] = '2';
  238.  
  239.        while(Xnum < tam_bosque/2 )
  240.        {
  241.            i = rand() % tam_bosque;
  242.            j = rand() % tam_bosque;
  243.  
  244.            if(bosque18x18[i][j] == ' ')
  245.            {
  246.                bosque18x18[i][j] = 'X';
  247.                Xnum++;
  248.            }
  249.  
  250.        }
  251.    }
  252.  
  253. }
  254. //dibuja cuando sea necesario
  255. void Actualizar_Juego()
  256. {
  257.    system("cls");
  258.  
  259.    if(tam_bosque == 6)
  260.    {
  261.        int i,j;
  262.        printf("\n  ");
  263.  
  264.        for (j = 0; j < tam_bosque;j++) //filas alfabeticas
  265.            printf("  %c", 'a'+j);
  266.        printf("\n");
  267.  
  268.        for (i = 0;i < tam_bosque;i++) //columnas numeradas
  269.        {
  270.            printf(" %2d", i);
  271.  
  272.            for (j = 0;j < tam_bosque;j++)
  273.            {
  274.                printf("| %c", bosque6x6[i][j]);
  275.            }
  276.            printf("| \n");
  277.        }
  278.    }
  279.    else if( tam_bosque == 8)
  280.    {
  281.        int i,j;
  282.        printf("\n  ");
  283.  
  284.        for (j = 0;j < tam_bosque;j++) //filas alfabeticas
  285.            printf("  %c", 'a'+j);
  286.        printf("\n");
  287.  
  288.        for (i = 0;i < tam_bosque;i++) //columnas numeradas
  289.        {
  290.            printf(" %2d", i);
  291.  
  292.            for (j = 0;j < tam_bosque;j++)
  293.            {
  294.                printf("| %c", bosque8x8[i][j]);
  295.            }
  296.            printf("| \n");
  297.        }
  298.    }
  299.    else if( tam_bosque == 10)
  300.    {
  301.        int i,j;
  302.        printf("\n  ");
  303.  
  304.        for (j = 0;j < tam_bosque;j++) //filas alfabeticas
  305.            printf("  %c", 'a'+j);
  306.        printf("\n");
  307.  
  308.        for (i = 0;i < tam_bosque;i++) //columnas numeradas
  309.        {
  310.            printf(" %2d", i);
  311.  
  312.            for (j = 0;j < tam_bosque;j++)
  313.            {
  314.                printf("| %c", bosque10x10[i][j]);
  315.            }
  316.            printf("| \n");
  317.        }
  318.    }
  319.    else if( tam_bosque == 14)
  320.    {
  321.        int i,j;
  322.        printf("\n  ");
  323.  
  324.        for (j = 0;j < tam_bosque;j++) //filas alfabeticas
  325.            printf("  %c", 'a'+j);
  326.        printf("\n");
  327.  
  328.        for (i = 0;i < tam_bosque;i++) //columnas numeradas
  329.        {
  330.            printf(" %2d", i);
  331.  
  332.            for (j = 0;j < tam_bosque;j++)fin_juego()
  333.            {
  334.                printf("| %c", bosque14x14[i][j]);
  335.            }
  336.            printf("| \n");
  337.        }
  338.    }
  339.    else if( tam_bosque == 18)
  340.    {
  341.        int i,j;
  342.        printf("\n  ");
  343.  
  344.        for (j = 0;j < tam_bosque;j++) //filas alfabeticas
  345.            printf("  %c", 'a'+j);
  346.        printf("\n");
  347.  
  348.        for (i = 0;i < tam_bosque;i++) //columnas numeradas
  349.        {
  350.            printf(" %2d", i);
  351.  
  352.            for (j = 0;j < tam_bosque;j++)
  353.            {
  354.                printf("| %c", bosque18x18[i][j]);
  355.            }
  356.            printf("| \n");
  357.        }
  358.    }
  359.  
  360. }
  361.  
  362. //a jugar!!
  363. void Bucle_Juego()
  364. {
  365.    int ganador=0;
  366.    int turno=0;
  367.  
  368.    printf("Que jugador empieza?: ");
  369.    scanf(" %d", &turno);
  370.  
  371.    do
  372.    {
  373.        while(ganador == 0)//que se repita mientras no haya ningun ganador
  374.        {
  375.            Actualizar_Juego(); //Actualiza el juego
  376.            mover_tirarflecha(turno); //mueve o ataca
  377.  
  378.            //Falta comprobar si alguno ya ganó
  379.  
  380.            //Cambiando los turnos
  381.            if(turno == 1)
  382.            {
  383.                turno = 2;
  384.            }
  385.                else
  386.                    turno = 1;
  387.        }
  388.  
  389.        //cuando se termine el bucle comprueba quien ha ganado
  390.        if(ganador == 1)
  391.            {
  392.                printf("Ha Ganado el jugador 1");
  393.            }
  394.                else if(ganador == 2)
  395.                    printf("Ha Ganado el jugador 2");
  396.  
  397.        ganador++;
  398.    }
  399.     while (ganador < 3);
  400.  
  401.     //para que pregunte si quiere salir o seguir jugando
  402.     /*char respuesta;
  403.      int s=0,n=1;
  404.      printf("Quiere jugar de nuevo? (s/n): ");
  405.      scanf(" %c", &respuesta);
  406.  
  407.     if (respuesta==s)
  408.     {
  409.  
  410.     }
  411.         else if (respuesta==n)
  412.             fin_juego();*/
  413.  
  414. }
  415.  
  416. void mover_tirarflecha(int turno)
  417. {
  418.    char imagen_jugador; //dibuja 1' o '2' dependiendo del turno
  419.  
  420.    if(turno == 1)
  421.    {
  422.        imagen_jugador = '1';
  423.        printf("Es el turno del jugador 1\n");
  424.    }
  425.    else
  426.    {
  427.        imagen_jugador = '2';
  428.        printf("Es el turno del jugador 2\n");
  429.    }
  430.  
  431.   char accion;
  432.  
  433.    //moverse
  434.   int o_i,d_i; //coordenadas origen
  435.   char o_j,d_j;  //coordenadas destino
  436.  
  437.   printf("Moverte o tirar flecha? (m o t)");
  438.   scanf(" %c", &accion);
  439.  
  440.   //para saber lo que ha ingresado
  441.   if(accion == 'm')
  442.   {
  443.       printf("\nIngrese Coordenadas origen (ej. 0-a) "); //origen
  444.       scanf("%d-%c", &o_i,&o_j);
  445.  
  446.       printf("\nIngrese Coordenadas destino (1 lugar) "); //destino
  447.       scanf("%d-%c", &d_i,&d_j);
  448.  
  449.  
  450.       /*Dependiendo del tamaño del bosque*/
  451.       if( tam_bosque == 6)
  452.       {
  453.           //para que se mueva 1 solo lugar
  454.           /*if ((bosque6x6[d_i+1][d_j])&&(bosque6x6[d_i][d_j+1])&&(bosque6x6[d_i-1][d_j])&&(bosque6x6[d_i][d_j-1]))*/
  455.           {
  456.                bosque6x6[o_i][o_j - 97]= ' '; //queda vacio donde estaba
  457.                bosque6x6[d_i][d_j - 97]= imagen_jugador; //a donde lo mueve mientras esté el espacio vacio
  458.           }
  459.       }
  460.       else if( tam_bosque == 8)
  461.       {
  462.           bosque8x8[o_i][o_j - 97]= ' ';
  463.           bosque8x8[d_i][d_j - 97]= imagen_jugador;
  464.       }
  465.       else if( tam_bosque == 10)
  466.       {
  467.           bosque10x10[o_i][o_j - 97]= ' ';
  468.           bosque10x10[d_i][d_j - 97]= imagen_jugador;
  469.       }
  470.       else if( tam_bosque == 14)
  471.       {
  472.           bosque14x14[o_i][o_j - 97]= ' ';
  473.           bosque14x14[d_i][d_j - 97]= imagen_jugador;
  474.       }
  475.       else if( tam_bosque == 18)
  476.       {
  477.           bosque18x18[o_i][o_j - 97]= ' ';
  478.           bosque18x18[d_i][d_j - 97]= imagen_jugador;
  479.       }
  480.  
  481.   }
  482.  else if(accion == 't') //para disparar flecha. Se mueven arriba,abajo,izq,derecha
  483.   {
  484.       //para el bosque x6
  485.       if (tam_bosque==6)
  486.       {
  487.           int limite=0, arriba=0, abajo=0, izq=0, derecha=0;
  488.           int i=d_i;
  489.           int j=d_j;
  490.  
  491.           while((limite<5) && (arriba<6) && (bosque6x6[i][j]!='X'))//para arriba
  492.           {
  493.               if (bosque6x6[i][j]=='2')
  494.                  {
  495.                        arriba++;
  496.                        j++;
  497.                        printf("GAME OVER: Jugador 2");
  498.                  }
  499.                        else printf("Fallaste!\n");
  500.  
  501.           }
  502.  
  503.           while((limite<5) && (abajo<6) && (bosque6x6[i][j]!='X'))//para abajo
  504.  
  505.           {
  506.               if (bosque6x6[i][j]=='2')
  507.                  {
  508.                        abajo++;
  509.                        j--;
  510.                        printf("GAME OVER: Jugador 2");
  511.                  }
  512.                        else printf("Fallaste!\n");
  513.           }
  514.  
  515.           while((limite<5) && (izq<6) && (bosque6x6[i][j]!='X'))//para la izquierda
  516.           {
  517.               if (bosque6x6[i][j]=='2')
  518.                    {
  519.                        izq++;
  520.                        i--;
  521.                        printf("GAME OVER: Jugador 2");
  522.                  }
  523.                        else printf("Fallaste!\n");
  524.  
  525.           }
  526.  
  527.           while((limite<5) && (derecha<6) && (bosque6x6[i][j]!='X'))//para la derecha
  528.           {
  529.               if (bosque6x6[i][j]=='2')
  530.                  {
  531.                        derecha++;
  532.                        i++;
  533.                        printf("GAME OVER: Jugador 2");
  534.                  }
  535.                        else printf("Fallaste!\n");
  536.           }
  537.  
  538.  
  539.       }/*
  540.  
  541.         //para el bosque x8
  542.        if (tam_bosque==8)
  543.        {
  544.            int limite=0, arriba=0, abajo=0, izq=0, derecha=0;
  545.            int i=d_i;
  546.            int j=d_j;
  547.  
  548.            while((limite<7) && (arriba<8) && (bosque6x6[i][j]!='X'))//para arriba
  549.            {
  550.                if (bosque8x8[i][j]=='2')
  551.                   {
  552.                         arriba++;
  553.                         j++;
  554.                         printf("GAME OVER: Jugador 2");
  555.                   }
  556.                         else printf("Fallaste!\n");
  557.  
  558.            }
  559.  
  560.            while((limite<7) && (abajo<8) && (bosque8x8[i][j]!='X'))//para abajo
  561.  
  562.            {
  563.                if (bosque8x8[i][j]=='2')
  564.                   {
  565.                         abajo++;
  566.                         j--;
  567.                         printf("GAME OVER: Jugador 2");
  568.                   }
  569.                         else printf("Fallaste!\n");
  570.            }
  571.  
  572.            while((limite<7) && (izq<8) && (bosque8x8[i][j]!='X'))//para la izquierda
  573.            {
  574.                if (bosque8x8[i][j]=='2')
  575.                     {
  576.                         izq++;
  577.                         i--;
  578.                         printf("GAME OVER: Jugador 2");
  579.                   }
  580.                         else printf("Fallaste!\n");
  581.  
  582.            }
  583.  
  584.            while((limite<7) && (derecha<8) && (bosque8x8[i][j]!='X'))//para la derecha
  585.            {
  586.                if (bosque8x8[i][j]=='2')
  587.                   {
  588.                         derecha++;
  589.                         i++;
  590.                         printf("GAME OVER: Jugador 2");
  591.                   }
  592.                         else printf("Fallaste!\n");
  593.            }
  594.  
  595.  
  596.        }
  597.  
  598.         //para el bosque x10
  599.        if (tam_bosque==10)
  600.        {
  601.            int limite=0, arriba=0, abajo=0, izq=0, derecha=0;
  602.            int i=d_i;
  603.            int j=d_j;
  604.  
  605.            while((limite<9) && (arriba<10) && (bosque10x10[i][j]!='X'))//para arriba
  606.            {
  607.                if (bosque10x10[i][j]=='2')
  608.                   {
  609.                         arriba++;
  610.                         j++;
  611.                         printf("GAME OVER: Jugador 2");
  612.                   }
  613.                         else printf("Fallaste!\n");
  614.  
  615.            }
  616.  
  617.            while((limite<9) && (abajo<10) && (bosque10x10[i][j]!='X'))//para abajo
  618.  
  619.            {
  620.                if (bosque10x10[i][j]=='2')
  621.                   {
  622.                         abajo++;
  623.                         j--;
  624.                         printf("GAME OVER: Jugador 2");
  625.                   }
  626.                         else printf("Fallaste!\n");
  627.            }
  628.  
  629.            while((limite<9) && (izq<10) && (bosque10x10[i][j]!='X'))//para la izquierda
  630.            {
  631.                if (bosque10x10[i][j]=='2')
  632.                     {
  633.                         izq++;
  634.                         i--;
  635.                         printf("GAME OVER: Jugador 2");
  636.                   }
  637.                         else printf("Fallaste!\n");
  638.  
  639.            }
  640.  
  641.            while((limite<9) && (derecha<10) && (bosque10x10[i][j]!='X'))//para la derecha
  642.            {
  643.                if (bosque10x10[i][j]=='2')
  644.                   {
  645.                         derecha++;
  646.                         i++;
  647.                         printf("GAME OVER: Jugador 2");
  648.                   }
  649.                         else printf("Fallaste!\n");
  650.            }
  651.  
  652.  
  653.        }
  654.  
  655.         //para el bosque x14
  656.        if (tam_bosque==14)
  657.        {
  658.            int limite=0, arriba=0, abajo=0, izq=0, derecha=0;
  659.            int i=d_i;
  660.            int j=d_j;
  661.  
  662.            while((limite<13) && (arriba<14) && (bosque14x14[i][j]!='X'))//para arriba
  663.            {
  664.                if (bosque14x14[i][j]=='2')
  665.                   {
  666.                         arriba++;
  667.                         j++;
  668.                         printf("GAME OVER: Jugador 2");
  669.                   }
  670.                         else printf("Fallaste!\n");
  671.  
  672.            }
  673.  
  674.            while((limite<13) && (abajo<14) && (bosque14x14[i][j]!='X'))//para abajo
  675.            {
  676.                if (bosque14x14[i][j]=='2')
  677.                   {
  678.                         abajo++;
  679.                         j--;
  680.                         printf("GAME OVER: Jugador 2");
  681.                   }
  682.                         else printf("Fallaste!\n");
  683.            }
  684.  
  685.            while((limite<13) && (izq<14) && (bosque6x6[i][j]!='X'))//para la izquierda
  686.            {
  687.                if (bosque6x6[i][j]=='2')
  688.                     {
  689.                         izq++;
  690.                         i--;
  691.                         printf("GAME OVER: Jugador 2");
  692.                   }
  693.                         else printf("Fallaste!\n");
  694.  
  695.            }
  696.  
  697.            while((limite<13) && (derecha<14) && (bosque14x14[i][j]!='X'))//para la derecha
  698.            {
  699.                if (bosque6x6[i][j]=='2')
  700.                   {
  701.                         derecha++;
  702.                         i++;
  703.                         printf("GAME OVER: Jugador 2");
  704.                   }
  705.                         else printf("Fallaste!\n");
  706.            }
  707.  
  708.  
  709.        }
  710.  
  711.         //para el bosque x18
  712.        if (tam_bosque==6)
  713.        {
  714.            int limite=0, arriba=0, abajo=0, izq=0, derecha=0;
  715.            int i=d_i;
  716.            int j=d_j;
  717.  
  718.            while((limite<17) && (arriba<18) && (bosque18x18[i][j]!='X'))//para arriba
  719.            {
  720.                if (bosque18x18[i][j]=='2')
  721.                   {
  722.                         arriba++;
  723.                         j++;
  724.                         printf("GAME OVER: Jugador 2");
  725.                   }
  726.                         else printf("Fallaste!\n");
  727.  
  728.            }
  729.  
  730.            while((limite<17) && (abajo<18) && (bosque18x18[i][j]!='X'))//para abajo
  731.  
  732.            {
  733.                if (bosque18x18[i][j]=='2')
  734.                   {
  735.                         abajo++;
  736.                         j--;
  737.                         printf("GAME OVER: Jugador 2");
  738.                   }
  739.                         else printf("Fallaste!\n");
  740.            }
  741.  
  742.            while((limite<17) && (izq<18) && (bosque18x18[i][j]!='X'))//para la izquierda
  743.            {
  744.                if (bosque18x18[i][j]=='2')
  745.                     {
  746.                         izq++;
  747.                         i--;
  748.                         printf("GAME OVER: Jugador 2");
  749.                   }
  750.                         else printf("Fallaste!\n");
  751.  
  752.            }
  753.  
  754.            while((limite<17) && (derecha<18) && (bosque18x18[i][j]!='X'))//para la derecha
  755.            {
  756.                if (bosque6x6[i][j]=='2')
  757.                   {
  758.                         derecha++;
  759.                         i++;
  760.                         printf("GAME OVER: Jugador 2");
  761.                   }
  762.                         else printf("Fallaste!\n");
  763.            }
  764.  
  765.  
  766.        }*/
  767.   }
  768. }
  769.  


Título: Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
Publicado por: 0xFer en 9 Junio 2015, 00:28 am
no has iniciado el valor de d_i y d_j contienen basura, tienes que pedirlos con scanf, acuerdate que lo pides pero cuando el jugador quiere mover no cuando quiere atacar.

Edito:

Mira las siguientes lineas, solo tendrías que comprobar mediante otro metodo si se ha ingresado una Acción válida, o sea si se estan cumpliendo las reglas del juego:

Código
  1. else if(accion == 't'){
  2.    bool AccionValida = false;
  3.  
  4.    while(AccionValida == false)
  5.    {
  6.        printf("Ingresa coordenada destino d_i");
  7.        scanf(" %i",d_i);
  8.        printf("Ingresa coordenada destino d_j");
  9.        scanf(" %c",d_j);
  10.  
  11.        /*Creas un metodo para comprobar si ha realizado un movimiento legal, esto es, si no se ha salido del
  12.         tablero, si no ha disparado a más de 5 posiciones o si ha disparado a travez de un arbol*/
  13.        AccionValida = ComprobarAccion(o_i,o_j,d_i,d_j);
  14.  
  15.        if(AccionValida == false)
  16.            printf("Accion Invalida(Rompiste alguna regla del juego); Intenta de nuevo\n");
  17.    }
  18.  
  19.    /*Las siguientes lineas de código se ejecutaran siempre y cuando se haya ingresado una accion válida: */
  20.  
  21.    if(turno == 1)
  22.    /*En caso de que sea turno del jugador 1*/
  23.        if( tableroXxX[d_i][d_j - 97 ] == '2' )
  24.        {
  25.            ganador = 1;
  26.        }
  27.        else
  28.        {
  29.            printf("Has fallado");
  30.        }
  31.     else if(turno == 2)
  32.     /*En caso de que sea turno del jugador 2*/
  33.        if( tableroXxX[d_i][d_j - 97 ] == '1' )
  34.        {
  35.            ganador = 2;
  36.        }
  37.        else
  38.        {
  39.            printf("Has fallado");
  40.        }
  41.  
  42.     }
  43. }

fijate en ComprobarAccion(o_i,o_j,d_i,d_j);, es una funcion con 4 parámetros, necesitas a parte de pedir las coordenadas de destino, también necesitas pedir las coordenadas de origen para que puedas saber si se ha realizado un movimiento legal, acuerdate que solo pides las coordenadas cuando el jugador se quiere mover, pero no lo haces cuando el jugador quiere atacar.