Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Hacer juego 3 en raya a base de éste código?

Estas en el tema de Hacer juego 3 en raya a base de éste código? en el foro de C/C++ en Foros del Web. Tengo un problema con esto, es mi primer programa extenso con más de 50 lineas de código y los ejemplos de internet son bastante confusos ...
  #1 (permalink)  
Antiguo 06/01/2012, 10:58
Avatar de nanotime  
Fecha de Ingreso: noviembre-2011
Ubicación: Cd. Guayana
Mensajes: 145
Antigüedad: 13 años
Puntos: 6
Pregunta Hacer juego 3 en raya a base de éste código?

Tengo un problema con esto, es mi primer programa extenso con más de 50 lineas de código y los ejemplos de internet son bastante confusos para mi, muchísimo.

Encontré hace un tiempo uno que no usaba ni siquiera arreglos (matrices) y trato de hacerlo de nuevo pero no comprendo o no me logro idear una manera para esto.

Nota: había creado un tema hace ya un tiempo pero nunca lo respondieron, una sola persona me ayudó pero el sabia Java u.u

Código C++:
Ver original
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. using namespace std;
  5. // Para Linux:
  6. #define C "+" // Cruce
  7. #define H "-" // Horizontal
  8. #define V "|" // Vertical
  9. // Para Windows:
  10. // #define C "\xCE" // Cruce
  11. // #define H "\xCD" // Horizontal
  12. // #define V "\xBA" // Vertical
  13. char a1=' ',a2=' ',a3=' ',b1=' ',b2=' ',b3=' ',c1=' ',c2=' ',c3=' ',turno,again;
  14. string ficha=" ";
  15. int win=-1,jug,i=0;
  16. void tablero();
  17. void tablero(){
  18. system("clear");
  19. cout    << "\t\t\t    1     2      3"<< endl
  20. << "\t\t\t       " << V << "      " << V << "      " << endl
  21. << "\t\t\tA   " << a1 << "  " << V << "  " << a2 << "   " << V << "  " << a3 << "   " << endl
  22. << "\t\t\t       " << V << "      " << V << "      " << endl
  23. << "\t\t\t  " << H << H << H << H << H << C << H << H << H << H << H << H << C << H << H << H << H << H << endl
  24. << "\t\t\t       " << V << "      " << V << "      " << endl
  25. << "\t\t\tB   " << b1 << "  " << V << "  " << b2 << "   " << V << "  " << b3 << "   " << endl
  26. << "\t\t\t       " << V << "      " << V << "      " << endl
  27. << "\t\t\t  " << H << H << H << H << H << C << H << H << H << H << H << H << C << H << H << H << H << H << endl
  28. << "\t\t\t       " << V << "      " << V << "      " << endl
  29. << "\t\t\tC   " << c1 << "  " << V << "  " << c2 << "   " << V << "  " << c3 << "   " << endl
  30. << "\t\t\t       " << V << "      " << V << "      " << endl << endl;
  31.         }
  32. int main(){
  33. while (1){
  34.     if(i%2==0){ jug=1; turno='X'; }
  35.     if(i%2==1){ jug=2; turno='O'; }
  36.     tablero();
  37.         if ((a1!=' ')&&(a2!=' ')&&(a3!=' ')&&(b1!=' ')&&(b2!=' ')&&(b3!=' ')&&(c1!=' ')&&(c2!=' ')&&(c3!=' ')) win=0;
  38.         if ((a1!=' ')&&(a1==a2)&&(a1==a3)) win=1;
  39.         if ((a1!=' ')&&(a1==b1)&&(a1==c1)) win=1;
  40.         if ((a1!=' ')&&(a1==b2)&&(a1==c3)) win=1;
  41.         if ((b1!=' ')&&(b1==b2)&&(b1==b3)) win=1;
  42.         if ((c1!=' ')&&(c1==c2)&&(c1==c3)) win=1;
  43.         if ((a2!=' ')&&(a2==b2)&&(a2==c2)) win=1;
  44.         if ((a3!=' ')&&(a3==b3)&&(a3==c3)) win=1;
  45.         if ((c1!=' ')&&(c1==b2)&&(c1==a3)) win=1;
  46.         if (win==0) cout << "\t\tEmpate.\n\n";
  47.         if (win==1) cout << "\t\tGanó el jugador " << jug << " (" << turno << "), ¡felicidades!\n\n";
  48.         if ((win==0)||(win==1)){
  49.     cout << "\t\t¿Desea volver a jugar? [S\\N] - ";
  50.     cin >> again;
  51. while((again!='s')&&(again!='S')&&(again!='n')&&(again!='N')){
  52.     cout << "ERROR: Responda sólo con S(Sí) o N(No)...\n\n"
  53.     "\t\t¿Desea volver a jugar? [S\\N]";
  54.     cin >> again;
  55. }
  56. switch(again){
  57.     case 's':case 'S':
  58.     a1=' ',a2=' ',a3=' ',b1=' ',b2=' ',b3=' ',c1=' ',c2=' ',c3=' ',win=-1,i=0;
  59.     tablero();
  60. break;
  61.     case 'n':case 'N':
  62. return 0;
  63. break;
  64. }
  65. }
  66. cout << "\t\tTurno del jugador " << jug << " ("<< turno << ") ...\n\n"
  67. "\t\t¿Dónde desea colocar su ficha? - ";
  68. cin >> ficha;
  69. if (ficha==" ");
  70.     else if (((ficha=="a1")||(ficha=="A1"))&&(a1==' ')) a1=turno;
  71.     else if (((ficha=="a2")||(ficha=="A2"))&&(a2==' ')) a2=turno;
  72.     else if (((ficha=="a3")||(ficha=="A3"))&&(a3==' ')) a3=turno;
  73.     else if (((ficha=="b1")||(ficha=="B1"))&&(b1==' ')) b1=turno;
  74.     else if (((ficha=="b2")||(ficha=="B2"))&&(b2==' ')) b2=turno;
  75.     else if (((ficha=="b3")||(ficha=="B3"))&&(b3==' ')) b3=turno;
  76.     else if (((ficha=="c1")||(ficha=="C1"))&&(c1==' ')) c1=turno;
  77.     else if (((ficha=="c2")||(ficha=="C2"))&&(c2==' ')) c2=turno;
  78.     else if (((ficha=="c3")||(ficha=="C3"))&&(c3==' ')) c3=turno;
  79. else {
  80.     cout << "\n\t\tERROR: plaza ocupada o inexistente...\n"
  81.     "\t\tPulse 'ENTER' y vuelva a colocar su ficha...";
  82.     cin.get(); cin.get();
  83. i--;
  84. }
  85. i++;
  86. }
  87. }

Ese es el programa que encontré, está genial y funciona, pero no es directamente lo que quiero ni lo que me piden. A mi me piden que lo haga con matrices y ya tengo la idea o la lógica pero no logro plasmarla en código (eso hace la falta de práctica).

Quisiera saber si hay alguna manera de trabajar a base de este programa, cambiando algunas cosas que me parecen algo ineficientes y cumpliendo con lo que el profesor me pide.

Lo primero que quiero hacer es convertir la validación de la victoria en un arreglo (matriz) que sería mejor, aunque no se me ocurre como hacerlo sin terminar alargando más el código.

Mi meta aquí es optimizar este código y amoldarlo a lo que necesito, pero necesito al menos una guía o algunas sugerencias a ver si logro destaparme.

Gracias por adelantado.

Etiquetas: funcion, juego, matriz, programa, raya, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:45.