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
#include <iostream> #include <stdlib.h> #include <string.h> using namespace std; // Para Linux: #define C "+" // Cruce #define H "-" // Horizontal #define V "|" // Vertical // Para Windows: // #define C "\xCE" // Cruce // #define H "\xCD" // Horizontal // #define V "\xBA" // Vertical char a1=' ',a2=' ',a3=' ',b1=' ',b2=' ',b3=' ',c1=' ',c2=' ',c3=' ',turno,again; string ficha=" "; int win=-1,jug,i=0; void tablero(); void tablero(){ cout << "\t\t\t 1 2 3"<< endl << "\t\t\t " << V << " " << V << " " << endl << "\t\t\tA " << a1 << " " << V << " " << a2 << " " << V << " " << a3 << " " << endl << "\t\t\t " << V << " " << V << " " << endl << "\t\t\t " << H << H << H << H << H << C << H << H << H << H << H << H << C << H << H << H << H << H << endl << "\t\t\t " << V << " " << V << " " << endl << "\t\t\tB " << b1 << " " << V << " " << b2 << " " << V << " " << b3 << " " << endl << "\t\t\t " << V << " " << V << " " << endl << "\t\t\t " << H << H << H << H << H << C << H << H << H << H << H << H << C << H << H << H << H << H << endl << "\t\t\t " << V << " " << V << " " << endl << "\t\t\tC " << c1 << " " << V << " " << c2 << " " << V << " " << c3 << " " << endl << "\t\t\t " << V << " " << V << " " << endl << endl; } int main(){ while (1){ if(i%2==0){ jug=1; turno='X'; } if(i%2==1){ jug=2; turno='O'; } tablero(); if ((a1!=' ')&&(a2!=' ')&&(a3!=' ')&&(b1!=' ')&&(b2!=' ')&&(b3!=' ')&&(c1!=' ')&&(c2!=' ')&&(c3!=' ')) win=0; if ((a1!=' ')&&(a1==a2)&&(a1==a3)) win=1; if ((a1!=' ')&&(a1==b1)&&(a1==c1)) win=1; if ((a1!=' ')&&(a1==b2)&&(a1==c3)) win=1; if ((b1!=' ')&&(b1==b2)&&(b1==b3)) win=1; if ((c1!=' ')&&(c1==c2)&&(c1==c3)) win=1; if ((a2!=' ')&&(a2==b2)&&(a2==c2)) win=1; if ((a3!=' ')&&(a3==b3)&&(a3==c3)) win=1; if ((c1!=' ')&&(c1==b2)&&(c1==a3)) win=1; if (win==0) cout << "\t\tEmpate.\n\n"; if (win==1) cout << "\t\tGanó el jugador " << jug << " (" << turno << "), ¡felicidades!\n\n"; if ((win==0)||(win==1)){ cout << "\t\t¿Desea volver a jugar? [S\\N] - "; cin >> again; while((again!='s')&&(again!='S')&&(again!='n')&&(again!='N')){ cout << "ERROR: Responda sólo con S(Sí) o N(No)...\n\n" "\t\t¿Desea volver a jugar? [S\\N]"; cin >> again; } switch(again){ case 's':case 'S': a1=' ',a2=' ',a3=' ',b1=' ',b2=' ',b3=' ',c1=' ',c2=' ',c3=' ',win=-1,i=0; tablero(); break; case 'n':case 'N': return 0; break; } } cout << "\t\tTurno del jugador " << jug << " ("<< turno << ") ...\n\n" "\t\t¿Dónde desea colocar su ficha? - "; cin >> ficha; if (ficha==" "); else if (((ficha=="a1")||(ficha=="A1"))&&(a1==' ')) a1=turno; else if (((ficha=="a2")||(ficha=="A2"))&&(a2==' ')) a2=turno; else if (((ficha=="a3")||(ficha=="A3"))&&(a3==' ')) a3=turno; else if (((ficha=="b1")||(ficha=="B1"))&&(b1==' ')) b1=turno; else if (((ficha=="b2")||(ficha=="B2"))&&(b2==' ')) b2=turno; else if (((ficha=="b3")||(ficha=="B3"))&&(b3==' ')) b3=turno; else if (((ficha=="c1")||(ficha=="C1"))&&(c1==' ')) c1=turno; else if (((ficha=="c2")||(ficha=="C2"))&&(c2==' ')) c2=turno; else if (((ficha=="c3")||(ficha=="C3"))&&(c3==' ')) c3=turno; else { cout << "\n\t\tERROR: plaza ocupada o inexistente...\n" "\t\tPulse 'ENTER' y vuelva a colocar su ficha..."; cin.get(); cin.get(); i--; } i++; } }
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.