• Lunes 13 de Mayo de 2024, 15:28

Autor Tema:  4 En Raya  (Leído 6363 veces)

Arsys

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
4 En Raya
« en: Viernes 23 de Abril de 2004, 20:25 »
0
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.  

The Black Boy

  • Miembro de PLATA
  • *****
  • Mensajes: 1043
  • Nacionalidad: co
    • Ver Perfil
    • http://www.mslatam.com/latam/technet/mva2/Microsite.aspx?alias=JairoDiaz
Re: 4 En Raya
« Respuesta #1 en: Viernes 23 de Abril de 2004, 20:38 »
0
bueno.... jamas habia escuchado de 4 en raya... asi que voy ha echarle un vistazo y te digo ...
El inteligente no es aquel que lo sabe todo
sino aquel que   sabe utilizar lo poco que sabe.


Espacio Personal

si necesitas algo de programacion click aqui, si no esta aqui no existe

Programacion]

Arsys

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: 4 En Raya
« Respuesta #2 en: Viernes 23 de Abril de 2004, 23:26 »
0
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.

Arsys

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: 4 En Raya
« Respuesta #3 en: Martes 27 de Abril de 2004, 10:27 »
0
Ya he conseguido arreglarlo y que funcione  :smartass:

Saludos  :blink:
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

dfsi

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: 4 En Raya
« Respuesta #4 en: Viernes 5 de Noviembre de 2010, 12:47 »
0
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.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: 4 En Raya
« Respuesta #5 en: Viernes 5 de Noviembre de 2010, 13:49 »
0
Cita de: "Arsys"
Mar Abr 27, 2004
:brickwall: