SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Arsys en Viernes 23 de Abril de 2004, 20:25

Título: 4 En Raya
Publicado por: Arsys en Viernes 23 de Abril de 2004, 20:25
Estoy haciendo un programa que funcione como el típico 4 en raya de toda la vida.
Pero una de las funciones  (en concreto la de mirarDiagD), no me funciona correctamente, y por mucho que miro y remiro no encuentro donde puede estar el error, ya que es similar a la de mirarDiagI pero esta si que funciona bien. Me falla solo al ejecutarse, se compila perfectamente.



A ver si alguien me puede echar una mano y se le ocurre donde puede estar el fallo.

Código: Text
  1.  
  2. #include <stdio.h>
  3.  
  4. int enraya(int tab[][7], int j);
  5. int mirarhoriz(int tab[][7], int f, int c, int j);
  6. int mirarvert(int tab[][7], int f, int c, int j);
  7. int mirardiagI(int tab[][7], int f, int c, int j);
  8. int mirardiagD(int tab[][7], int f, int c, int j);
  9. int esta_lleno(int tab[][7]);
  10. void vaciar_tablero(int tab[][7]);
  11. int pintar_tablero(int tab[][7]);
  12. void poner_ficha(int tab[][7], int j);
  13.  
  14. void main(void)
  15. {
  16.     int tablero[6][7];
  17.     int jugar;
  18.     int x;
  19.     int jugador;
  20.     
  21.     jugar=1;
  22.     
  23.     while(jugar==1)
  24.     {
  25.         //vaciamos el tablero
  26.         vaciar_tablero(tablero);
  27.         jugador=1;
  28.         //pintamos el tablero
  29.         pintar_tablero(tablero);
  30.         
  31.         //si el tablero no está lleno ni hay 4 en raya se continúa la partida
  32.         while((!enraya(tablero,jugador)) && (!esta_lleno(tablero)))
  33.         {
  34.             poner_ficha(tablero,jugador);
  35.             if(jugador==1)jugador=2;
  36.             else jugador=1;
  37.             pintar_tablero(tablero);
  38.         }
  39.         
  40.         //si hay 4 en raya se dice quien ganó y se pregunta si se quiere continuar jugando
  41.         if(enraya(tablero,jugador))
  42.         {
  43.             if(jugador==1)printf("gano 2");
  44.             else printf("gano 1");
  45.         }
  46.         else printf("\nempate");
  47.         printf("\notra?(s/n)");
  48.         scanf("%c", &x);
  49.         if(x=='n')jugar=0;
  50.     }
  51. }
  52.  
  53. //función para comprobar si hay 4 en raya
  54. int enraya(int tab[][7], int j)
  55. {
  56.     int f;
  57.     int c;
  58.     int atopado;
  59.     atopado=0;
  60.     f=0;
  61.     
  62.     while((atopado==0) || (f<=5))
  63.     {
  64.         c=0;
  65.         while((atopado==0) && (c<=6))
  66.         {
  67.                 atopado=(mirarhoriz(tab,f,c,j) ||
  68.                 mirarvert(tab,f,c,j) || mirardiagI(tab,f,c,j)
  69.                 || mirardiagD(tab,f,c,j));
  70.                 c++;
  71.         }
  72.         f++;
  73.     }
  74.     return atopado;
  75. }
  76.  
  77. //función para comprobar si hay 4 en raya en horizontal
  78. int mirarhoriz(int tab[][7], int f, int c, int j)
  79. {
  80.     int atopado=0;
  81.     if(c<4)
  82.     {
  83.         if((tab[f][c]==j) && (tab[f][c+1]==j) && (tab[f][c+2]==j) &&
  84.         (tab[f][c+3]==j))atopado=1;
  85.         else atopado=0;
  86.     }
  87.     else atopado=0;
  88.     return atopado;
  89. }
  90.  
  91. //función para comprobar si hay 4 en raya en vertical
  92. int mirarvert(int tab[][7], int f, int c, int j)
  93. {
  94.     int atopado=0;
  95.     if(f<3)
  96.     {
  97.         if((tab[f][c]==j) && (tab[f+1][c]==j) && (tab[f+2][c]==j) &&
  98.         (tab[f+3][c]==j))atopado=1;
  99.         else atopado=0;
  100.         return atopado;
  101.     }
  102. }
  103.  
  104.  
  105. //función para comprobar si hay 4 en raya en diagonal izquierda
  106. int mirardiagI(int tab[][7], int f, int c, int j)
  107. {
  108.     int atopado=0;
  109.     if((c>2) && (f<3))
  110.     {
  111.         if((tab[f][c]==j) && (tab[f+1][c-1]==j) && (tab[f+2][c-2]==j) &&
  112.         (tab[f+3][c-3]==j))atopado=1;
  113.         else atopado=0;
  114.     }
  115.     else atopado=0;
  116.     return atopado;
  117. }
  118.  
  119. //función para comprobar si hay 4 en raya en diagonal derecha (esta es la que falla)
  120. int mirardiagD(int tab[][7], int f, int c, int j)
  121. {
  122.     int atopado=0;
  123.     if((c>4) && (f<3))
  124.     {
  125.         if((tab[f][c]==j) && (tab[f+1][c+1]==j) && (tab[f+2][c+2]==j) &&
  126.         (tab[f+3][c+3]==j))atopado=1;
  127.         else atopado=0;
  128.     }
  129.     else atopado=0;
  130.     printf("%d", atopado);
  131.     return atopado;
  132. }
  133.  
  134. //función para vaciar el tablero al principio de la partida
  135. void vaciar_tablero(int tab[][7])
  136. {
  137.     int c;
  138.     int f=0;
  139.     
  140.     while(f<=5)
  141.     {
  142.         c=0;
  143.         while(c<=6)
  144.         {
  145.              tab[f][c]=0;  
  146.              c++;
  147.         }
  148.         f++;
  149.     }
  150. }
  151.  
  152. //función para pintar el tablero en pantalla
  153. int pintar_tablero(int tab[][7])
  154. {
  155.     int f;
  156.     int c;
  157.     f=0;
  158.     
  159.     printf("\n");
  160.     while(f<=5)
  161.     {
  162.         c=0;
  163.         while(c<=6)
  164.         {
  165.                 if(tab[f][c]!=0)
  166.                 {
  167.                     if(tab[f][c]==1)printf("A");
  168.                     else printf("B");
  169.                 }
  170.                 else printf("O");
  171.                 c++;
  172.         }
  173.         f++;
  174.         printf("\n");
  175.     }
  176. }
  177.  
  178. //función para comprobar si el tablero está lleno
  179. int esta_lleno(int tab[][7])
  180. {
  181.     int lleno=1;
  182.     int f=0;
  183.     int c;
  184.     
  185.     while((f<=5) && (lleno))
  186.     {
  187.         c=0;
  188.         while((c<=6) && (lleno))
  189.         {
  190.             if(tab[f][c]==0)lleno=0;
  191.             c++;
  192.         }
  193.         f++;
  194.     }
  195.     return lleno;
  196. }          
  197.  
  198. //función para poner fichas
  199. void poner_ficha(int tab[][7], int j)
  200. {
  201.     int c, f=5, jugada, turno=0;
  202.     
  203.     printf("\nJugador %d, introduzca columna: ", j);
  204.     scanf("%d", &jugada);
  205.     
  206.     while(turno==0)
  207.     {
  208.         if(f>=0)
  209.         {
  210.             if(tab[f][jugada-1]==0)
  211.             {
  212.                 tab[f][jugada-1]=j;
  213.                 turno=1;
  214.             }
  215.         }
  216.         f--;
  217.     }
  218. }        
  219.  
  220.  
Título: Re: 4 En Raya
Publicado por: The Black Boy en Viernes 23 de Abril de 2004, 20:38
bueno.... jamas habia escuchado de 4 en raya... asi que voy ha echarle un vistazo y te digo ...
Título: Re: 4 En Raya
Publicado por: Arsys en Viernes 23 de Abril de 2004, 23:26
Pues es un juego muy conocido aquí, es una tableta vertical de 6 filas por 7 columnas donde se van metiendo las fichas, y el que consigue 4 en raya es el que gana.
Título: Re: 4 En Raya
Publicado por: Arsys en Martes 27 de Abril de 2004, 10:27
Ya he conseguido arreglarlo y que funcione  :smartass:

Saludos  :blink:
Título: Re: 4 En Raya
Publicado por: dfsi en Viernes 5 de Noviembre de 2010, 12:47
cuando le doy a compilar me sale esto:

0000000
0000000
0000000
0000000
0000000
0000000
000000000000000000000000000000000000000000gano 2
otra?(s/n)

no funciona tio. y si le das s se quda igual.
Título: Re: 4 En Raya
Publicado por: m0skit0 en Viernes 5 de Noviembre de 2010, 13:49
Cita de: "Arsys"
Mar Abr 27, 2004
:brickwall: