Advertisement
Alevsk

4 en raya

Oct 21st, 2013
3,793
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.25 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. const int n=6;
  6. const int m=8;
  7.  
  8. bool sobranEspaciosLibres(int tablero[n][m])
  9. {
  10.     for(int i = 0; i < 6; i++)
  11.     {
  12.         for(int j = 0; j < 8; j++)
  13.         {
  14.             if(tablero[i][j] == 0)
  15.             {
  16.                 //Sobran espacios donde colocar fechas
  17.                 //cout<<"Hay espacios"<<endl;
  18.                 return true;
  19.             }
  20.         }
  21.     }
  22.  
  23.     //No sobran mas espacios donde colocar fichas, juego empatado
  24.     cout<<"No hay mas espacios: empate"<<endl;
  25.     return false;
  26. }
  27.  
  28. void ImprimirTablero(int tablero[n][m])
  29. {
  30.     for(int i = 0; i < 6; i++)
  31.     {
  32.         for(int j = 0; j < 8; j++)
  33.         {
  34.             if(tablero[i][j] == 1)
  35.             {
  36.                 cout<<" O ";
  37.             }
  38.             else if(tablero[i][j] == 2)
  39.             {
  40.                 cout<<" X ";
  41.             }
  42.             else
  43.             {
  44.                 cout<<" . ";
  45.             }
  46.  
  47.         }
  48.         cout<<endl;
  49.     }
  50. }
  51.  
  52. int ColocarFichaEn(int tablero[n][m], int columna)
  53. {
  54.     for(int i = 0; i < 6; i++)
  55.     {
  56.         if(!(i+1 > 5))
  57.         {
  58.             if(tablero[i][columna] == 0 && tablero[i+1][columna] != 0 )
  59.             {
  60.                 return i;
  61.             }
  62.         }
  63.         else
  64.         {
  65.             //Alcanzo la base del tablero
  66.             if(tablero[i][columna] == 0)
  67.             {
  68.                 return i;
  69.             }
  70.         }
  71.     }
  72.  
  73.     return -1;
  74. }
  75.  
  76. bool columnaATope(int tablero[n][m], int columna)
  77. {
  78.     if(tablero[0][columna] != 0)
  79.     {
  80.         cout<<"No hay espacio para colocar la ficha ahi"<<endl;
  81.         return true;
  82.     }
  83.     return false;
  84. }
  85.  
  86. bool ganador(int tablero[n][m], int fila, int columna, int jugador)
  87. {
  88.     //Vertical
  89.     bool encontrado = false;
  90.     int total = 0;
  91.  
  92.     for(int i = 0; i < n; i++)
  93.     {
  94.         //cout<<"i: "<<i<<endl;
  95.         if(encontrado)
  96.         {
  97.             if(tablero[i][columna] == jugador)
  98.             {
  99.                 total++;
  100.             }
  101.             else
  102.             {
  103.                 encontrado = false;
  104.                 total = 0;
  105.             }
  106.         }
  107.         if(tablero[i][columna] == jugador && !encontrado)
  108.         {
  109.             encontrado = true;
  110.             total++;
  111.         }
  112.  
  113.         //cout<<"total: "<<total<<endl;
  114.         if(total == 4)
  115.         {
  116.             cout<<"El jugador "<<jugador<<" gana!"<<endl;
  117.             return true;
  118.         }
  119.     }
  120.  
  121.     //Horizontal
  122.     encontrado = false;
  123.     total = 0;
  124.  
  125.     for(int i = 0; i < m; i++)
  126.     {
  127.         //cout<<"i: "<<i<<endl;
  128.         if(encontrado)
  129.         {
  130.             if(tablero[fila][i] == jugador)
  131.             {
  132.                 total++;
  133.             }
  134.             else
  135.             {
  136.                 encontrado = false;
  137.                 total = 0;
  138.             }
  139.         }
  140.         if(tablero[fila][i] == jugador && !encontrado)
  141.         {
  142.             encontrado = true;
  143.             total++;
  144.         }
  145.  
  146.         //cout<<"total: "<<total<<endl;
  147.         if(total == 4)
  148.         {
  149.             cout<<"El jugador "<<jugador<<" gana!"<<endl;
  150.             return true;
  151.         }
  152.     }
  153.  
  154.     //Diagonal \
  155.     //Obtener Coordenadas donde inicia la diagonal en base a fila - columna
  156.     int nuevaFila = fila;
  157.     int nuevaColumna = columna;
  158.     encontrado = false;
  159.     total = 0;
  160.  
  161.     //cout<<"Fila: "<<fila<<" Columna: "<<columna<<endl;
  162.  
  163.     while((nuevaFila != 0 || nuevaColumna != 0))
  164.     {
  165.         nuevaFila--;
  166.         nuevaColumna--;
  167.  
  168.         //cout<<"nueva Fila: "<<nuevaFila<<" nueva Columna: "<<nuevaColumna<<endl;
  169.         if(nuevaFila == 0 || nuevaColumna == 0)
  170.         break;
  171.     }
  172.  
  173.     //cout<<"nueva Fila: "<<nuevaFila<<" nueva Columna: "<<nuevaColumna<<endl;
  174.  
  175.     do
  176.     {
  177.         if(nuevaFila >= n)
  178.         break;
  179.  
  180.         //cout<<"nueva Fila: "<<nuevaFila<<" nueva Columna: "<<nuevaColumna<<endl;
  181.         if(encontrado)
  182.         {
  183.             if(tablero[nuevaFila][nuevaColumna] == jugador)
  184.             {
  185.                 total++;
  186.             }
  187.             else
  188.             {
  189.                 encontrado = false;
  190.                 total = 0;
  191.             }
  192.         }
  193.         if(tablero[nuevaFila][nuevaColumna] == jugador && !encontrado)
  194.         {
  195.             encontrado = true;
  196.             total++;
  197.         }
  198.  
  199.         //cout<<"total: "<<total<<endl;
  200.         if(total == 4)
  201.         {
  202.             cout<<"El jugador "<<jugador<<" gana!"<<endl;
  203.             return true;
  204.         }
  205.  
  206.         nuevaFila++;
  207.         nuevaColumna++;
  208.  
  209.     }while(nuevaFila < n);
  210.  
  211.  
  212.  
  213.     //Diagonal /
  214.     nuevaFila = fila;
  215.     nuevaColumna = columna;
  216.     encontrado = false;
  217.     total = 0;
  218.  
  219.     //cout<<"Fila: "<<fila<<" Columna: "<<columna<<endl;
  220.  
  221.     while((nuevaFila != 0 || nuevaColumna != m))
  222.     {
  223.         nuevaFila--;
  224.         nuevaColumna++;
  225.  
  226.         //cout<<"nueva Fila: "<<nuevaFila<<" nueva Columna: "<<nuevaColumna<<endl;
  227.         if(nuevaFila == 0 || nuevaColumna == m)
  228.         break;
  229.     }
  230.  
  231.     //cout<<"nueva Fila: "<<nuevaFila<<" nueva Columna: "<<nuevaColumna<<endl;
  232.  
  233.     do
  234.     {
  235.         //cout<<"nueva Fila: "<<nuevaFila<<" nueva Columna: "<<nuevaColumna<<endl;
  236.         if(nuevaFila >= n)
  237.         break;
  238.  
  239.         //cout<<"nueva Fila: "<<nuevaFila<<" nueva Columna: "<<nuevaColumna<<endl;
  240.         if(encontrado)
  241.         {
  242.             if(tablero[nuevaFila][nuevaColumna] == jugador)
  243.             {
  244.                 total++;
  245.             }
  246.             else
  247.             {
  248.                 encontrado = false;
  249.                 total = 0;
  250.             }
  251.         }
  252.         if(tablero[nuevaFila][nuevaColumna] == jugador && !encontrado)
  253.         {
  254.             encontrado = true;
  255.             total++;
  256.         }
  257.  
  258.         //cout<<"total: "<<total<<endl;
  259.         if(total == 4)
  260.         {
  261.             cout<<"El jugador "<<jugador<<" gana!"<<endl;
  262.             return true;
  263.         }
  264.  
  265.         nuevaFila++;
  266.         nuevaColumna--;
  267.  
  268.     }while(nuevaFila < n);
  269.  
  270.     return false;
  271. }
  272.  
  273. int main()
  274. {
  275.     int matriz[n][m];
  276.  
  277.     //Preparamos el tablero del juego rellenandolo con 0's
  278.     for(int i = 0; i < n; i++)
  279.     {
  280.         for(int j = 0; j < m; j++)
  281.         {
  282.             matriz[i][j] = 0;
  283.             //cout<<matriz[i][j]<<" ";
  284.         }
  285.         //cout<<" "<<endl;
  286.     }
  287.  
  288.     //Logica
  289.     int jugador = 0;
  290.     int ultimo = 0;
  291.     do
  292.     {
  293.         int colocarColumna = -1;
  294.         bool columnaTope = true;
  295.  
  296.         if(ultimo == 1)
  297.         {
  298.             jugador = 2;
  299.         }
  300.         else
  301.         {
  302.             jugador = 1;
  303.         }
  304.  
  305.         do
  306.         {
  307.             cout<<"Turno del jugador "<<jugador<<" - Elije un numero del 1 al 8: "; cin>>colocarColumna; cout<<endl;
  308.             colocarColumna--;
  309.             columnaTope = columnaATope(matriz,colocarColumna);
  310.         }
  311.         while((colocarColumna < 0 || colocarColumna > 7) || columnaTope);
  312.  
  313.         int colocarFila = ColocarFichaEn(matriz,colocarColumna);
  314.         matriz[colocarFila][colocarColumna] = jugador;
  315.         ImprimirTablero(matriz);
  316.  
  317.         //Revisar si hay un 4 en raya
  318.         if(ganador(matriz,colocarFila,colocarColumna,jugador))
  319.         {
  320.             break;
  321.         }
  322.  
  323.         ultimo = jugador;
  324.         jugador++;
  325.     }
  326.     while(sobranEspaciosLibres(matriz));
  327.  
  328.     return 0;
  329. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement