Ver Mensaje Individual
  #2 (permalink)  
Antiguo 20/02/2010, 23:08
Avatar de fradve
fradve
 
Fecha de Ingreso: abril-2009
Mensajes: 157
Antigüedad: 15 años, 1 mes
Puntos: 7
Respuesta: no se como solucionar los errores

Son algunos errores, mira por ahi le hice unos aumentos y correcciones a tu código y creo funciona perfectamente:

Código C++:
Ver original
  1. #include <stdio.h>
  2. #define fila 3
  3. #define columna 3
  4.  
  5. // "1" es el jugador humano, "2" el ordenador, "0" significa que esta vacia
  6.  
  7. int tablero [fila][columna], turno, jugadas=0;
  8.  
  9. void jugada_maquina() //pone la ficha del ordenador en un lugar cualquiera, intentando que sea la mejor posicion
  10. {
  11.     int i=0,j=0,id2=2,si=0,ndiaguno=0,ndiagdos=0,ndiaguno1=0,ndiagdos1=0,cfila=0,ccol=0,cfila1=0,ccol1=0;
  12.  
  13.     for(i=0;i<3;i++)
  14.     {
  15.         for(j=0;j<3;j++)
  16.         {
  17.             if(tablero [i][j]==1)
  18.                 cfila++;
  19.             if(tablero [j][i]==1)
  20.                 ccol++;
  21.             if(tablero [i][j]==2)
  22.                 cfila1++;
  23.             if(tablero [j][i]==2)
  24.                 ccol1++;
  25.         }
  26.  
  27.         if(tablero[i][i]==1)
  28.             ndiaguno++;
  29.         if(tablero [i][i+id2]==1)
  30.             ndiagdos++;
  31.         if(tablero[i][i]==2)
  32.             ndiaguno1++;
  33.         if(tablero [i][i+id2]==2)
  34.             ndiagdos1++;
  35.  
  36.         id2=id2-2;
  37.  
  38.         if(cfila==2||cfila1==2)
  39.         {
  40.           if(tablero[i][0]==0)
  41.           {
  42.              tablero[i][0]=2;
  43.              si=1;
  44.           }
  45.           else
  46.           {
  47.                 if(tablero[i][1]==0)
  48.                 {
  49.                     tablero[i][1]=2;
  50.                     si=1;
  51.                 }
  52.                 else
  53.                 {
  54.                     if(tablero[i][2]==0)
  55.                     {
  56.                         tablero[i][2]=2;
  57.                         si=1;
  58.                     }
  59.                 }
  60.           }
  61.         }
  62.  
  63.         if(si==0)
  64.         {
  65.           if(ccol==2||ccol1==2)
  66.           {
  67.                 if(tablero[0][i]==0)
  68.                 {
  69.                     tablero[0][i]=2;
  70.                     si=1;
  71.                 }
  72.                 else
  73.                 {
  74.                     if(tablero[1][i]==0)
  75.                     {
  76.                         tablero[1][i]=2;
  77.                         si=1;
  78.                     }
  79.                     else
  80.                     {
  81.                         if(tablero[2][i]==0)
  82.                         {
  83.                             tablero[2][i]=2;
  84.                             si=1;
  85.                         }
  86.                     }
  87.                 }
  88.           }
  89.         }
  90.  
  91.         if(si==1)
  92.         {
  93.             i=3;
  94.             j=3;
  95.         }
  96.         else
  97.         {
  98.             cfila=0;
  99.             ccol=0;
  100.             cfila1=0;
  101.             ccol1=0;
  102.         }
  103.      }
  104.  
  105.      if(si==0)
  106.      {
  107.         if(ndiaguno==2||ndiaguno1==2)
  108.         {
  109.             if(tablero[0][0]==0)
  110.             {
  111.                 tablero[0][0]=2;
  112.                 si=1;
  113.             }
  114.             else
  115.             {
  116.                 if(tablero[1][1]==0)
  117.                 {
  118.                     tablero[1][1]=2;
  119.                     si=1;
  120.                 }
  121.                 else
  122.                 {
  123.                     if(tablero[2][2]==0)
  124.                     {
  125.                         tablero[2][2]=2;
  126.                         si=1;
  127.                     }
  128.                 }
  129.             }
  130.         }
  131.      }
  132.  
  133.      if(si==0)
  134.      {
  135.         if(ndiagdos==2||ndiagdos1==2)
  136.         {
  137.             if(tablero[0][2]==0)
  138.             {
  139.                 tablero[0][2]=2;
  140.                 si=1;
  141.             }
  142.             else
  143.             {
  144.                 if(tablero[1][1]==0)
  145.                 {
  146.                     tablero[1][1]=2;
  147.                     si=1;
  148.                 }
  149.                 else
  150.                 {
  151.                     if(tablero[2][0]==0)
  152.                     {
  153.                         tablero[2][0]=2;
  154.                         si=1;
  155.                     }
  156.                 }
  157.             }
  158.         }
  159.      }
  160.  
  161.      if(si==0)
  162.      {
  163.         for(i=0; i<3; i++)
  164.             for(j=0; j<3; j++)
  165.                 if(tablero[i][j]==0)
  166.                 {
  167.                     tablero[i][j]=2;
  168.                     i=3;
  169.                     j=3;
  170.                 }
  171.      }
  172. }
  173.  
  174. //Inicializar el tablero todo blanco
  175.  
  176. void inicia_tablero()
  177. {
  178.      int i, j;
  179.  
  180.      for(i=0; i<3; i++)
  181.           for(j=0; j<3; j++)
  182.                 tablero[i] [j] = 0 ;
  183. }
  184.  
  185.  
  186. int jugada_valida(int f, int d) // comprueba si lo que se quiere hacer es valido o no
  187. {
  188.     if(f<3 && d<3 && tablero[f][d]== 0)
  189.         return 1; // jugada valida
  190.     else
  191.         return 0; // jugada invalida
  192. }
  193.  
  194. void jugada_usuario(int f, int d)
  195. {
  196.      if(jugada_valida(f,d)==1)
  197.         tablero[f][d]=1;
  198. }
  199.  
  200. void imprimir()
  201. {
  202.     for(int i=0;i<3;i++)
  203.     {
  204.         printf("\n");
  205.         for(int j=0;j<3;j++)
  206.             if(tablero[i][j]!=0)
  207.                 printf("%d_|",tablero[i][j]);
  208.             else
  209.                 printf(" _|");
  210.     }
  211. }
  212.  
  213.  
  214. int ganar_perder_empatar()
  215. {
  216.  
  217.     int resultado=0,vacios=0,i,j,sumafila=0,sumacolumna=0,sumadiagonal1=0;
  218.     int sumadiagonal2=0; // tiene 0 si gana, 1 si pierde
  219.  
  220.  
  221.     if(tablero[0][0]!=0&&tablero[1][1]!=0&&tablero[2][2]!=0)
  222.         sumadiagonal1=tablero[0][0]+tablero[1][1]+tablero[2][2];
  223.     if(tablero[0][2]!=0&&tablero[1][1]!=0&&tablero[2][0]!=0)
  224.         sumadiagonal2=tablero[0][2]+tablero[1][1]+tablero[2][0];
  225.  
  226.     if(sumadiagonal1==3||sumadiagonal2==3)
  227.         resultado=1;
  228.     else
  229.     {
  230.         if(sumadiagonal1==6||sumadiagonal2==6)
  231.             resultado=2;
  232.         else
  233.         {
  234.             for(i=0;i<3;i++)
  235.             {
  236.                 if(tablero[i][0]!=0&&tablero[i][1]!=0&&tablero[i][2]!=0)
  237.                     sumafila=tablero[i][0]+tablero[i][1]+tablero[i][2];
  238.                 if(tablero[0][i]!=0&&tablero[1][i]!=0&&tablero[2][i]!=0)
  239.                     sumacolumna=tablero[0][i]+tablero[1][i]+tablero[2][i];
  240.  
  241.                 if(sumafila==3||sumacolumna==3)
  242.                 {
  243.                     resultado=1;
  244.                     i=3;
  245.                 }
  246.                 else
  247.                 {
  248.                     if(sumafila==6||sumacolumna==6)
  249.                     {
  250.                         resultado=2;
  251.                         i=3;
  252.                     }
  253.                     else
  254.                         resultado=-1;
  255.                 }
  256.             }
  257.         }
  258.     }
  259.  
  260.     for(i=0;i<3;i++)
  261.         for(j=0;j<3;j++)
  262.             if(tablero[i][j]==0)
  263.                 vacios=1;
  264.  
  265.     if(resultado==-1&&vacios==0)
  266.          resultado=0;
  267.  
  268.     return resultado;
  269. }
  270.  
  271.  
  272.  
  273. int main()
  274. {
  275.     int f, c,resultado;
  276.  
  277.     printf("elije quien empieza: 1. tu 2. cpu \n");
  278.  
  279.     scanf("%d", &turno);
  280.  
  281.  
  282.  
  283.     inicia_tablero();
  284.  
  285.     do
  286.     {
  287.  
  288.         jugadas++;
  289.  
  290.         if(turno==1)
  291.         {
  292.             do
  293.             {
  294.                  printf("\nIngresa la posicion (fila,columna): ");
  295.                  scanf("%d,%d", &f, &c);
  296.  
  297.                  if(jugada_valida(f,c)==0)
  298.                  {
  299.  
  300.                     printf("ahi no puedes");
  301.  
  302.                  }
  303.             }while(jugada_valida(f, c)==0);
  304.             jugada_usuario(f, c);
  305.         }
  306.         else if(turno==2)
  307.         {
  308.             printf("\n\n");
  309.             printf("\nJugada de CPU:\n");
  310.             jugada_maquina();
  311.         }
  312.         imprimir();
  313.  
  314.         resultado=ganar_perder_empatar();
  315.         if(resultado==1)
  316.           printf("\n\nGano Jugador\n");
  317.         else
  318.         {
  319.           if(resultado==2)
  320.              printf("\n\nGano la CPU\n");
  321.           else
  322.             if(resultado==0)
  323.              printf("\n\nPartida Empatada\n");
  324.         }
  325.  
  326.         if(turno==1)
  327.             turno=2;
  328.         else
  329.             turno=1;
  330.     }while(resultado==-1);
  331.     printf("\n\nPulsa una tecla para salir...\n");
  332.     getchar();
  333.     return 0;
  334. }

Pruebalo, Estudialo, trata de entenderlo, y cualquier aclaración me la pides.

Indicacion extra:

las fila y colunmas van desde 0 - 2, es decir:

0,0 | 0,1 | 0,2
1,0 | 1,1 | 1,2
2,0 | 2,1 | 2,2
__________________
En programación hay mil y un formas de hacer lo mismo...