Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: alpachino98 en 23 Octubre 2017, 13:14 pm



Título: Como salir del bucle (preferiblemente con algun system())
Publicado por: alpachino98 en 23 Octubre 2017, 13:14 pm
Hola buenas.
Mi problema es que estoy haciendo un función en la que se utilizan las teclas W,A,S,D para moverse por un tablero. La cosa viene cuando intento hacer que al pulsar la telca T salga del programa ( como un boton para salir del juego). Seria facil si la funcion en el main no estuviera dentro de un bucle que le obliga a seguir jugando hasta que la condicon de terminar sea verdadera por medio de otra funcion que revisa si ha terminado el juego. Mi idea era poner algun system () como los system ("pause") pero algo que fuera system ("exit") o algo. Sino tendre que cambiar la funcion para que sea un bool o añadir mas parametros y seria tedioso y bastante largo.

Les comparto la funcion por si les sirve de algo ( recuerden que esta dentro de un while). Ignoren todso los case excepto el case T:
Código:
void EditVector (int ** tablero ,int numfil,int numcol) // en nuestro juego te puedes mover usando las teclas W,A,S,D lo cual nos parece mucho mas comodo
{
char d;
int i,j,aux,j2,f,c;
//system("cls");
for(i=0; i<numfil;i++)
for(j=0;j<numcol;j++)
{
if(tablero[i][j]==0)
{
f=i;
c=j;
}
}
cout<<"Su posicion actual es: ";
cout<<f<<"  "<<c<<endl;
cout<<"Utilize las teclas W,A,S,D para mover el espacio por el tablero."<<endl;
cin>>d;
switch (d)
{
case 'w': case 'W':

if (f==0)
{
cout<<"No se puede realizar el movimiento."<<endl;
system("pause");
break;
}
j2=f-1;
aux=tablero[j2][c];
tablero[f][c]=aux;
tablero[j2][c]=0;
break;
case 's': case 'S':
if (f==numcol-1)
{
cout<<"No se puede realizar el movimiento."<<endl;
system("pause");
break;
}
j2=f+1;
aux=tablero[j2][c];
tablero[f][c]=aux;
tablero[j2][c]=0;
break;
case 'a': case 'A':
if (c==0)
{
cout<<"No se puede realizar el movimiento."<<endl;
system("pause");
break;
}
j2=c-1;
aux=tablero[f][j2];
tablero[f][c]=aux;
tablero[f][j2]=0;
break;
case 'd': case 'D':
if (c==numfil-1)
{
cout<<"No se puede realizar el movimiento."<<endl;
system("pause");
break;
}
j2=c+1;
aux=tablero[f][j2];
tablero[f][c]=aux;
tablero[f][j2]=0;
break;
case 't': case 'T':
system("exit");
break;
}

}


Título: Re: Como salir del bucle (preferiblemente con algun system())
Publicado por: Gallu en 23 Octubre 2017, 18:32 pm
La función EditVector esta a nivel del while ??
Si la respuesta es si, pues yo lo que haría es hacer que EditVector devuelva un "indicador juego", un entero o una cadena, algo como :

Código
  1. int CODIGO_SALIDA = 9;
  2.  
  3. int  EditVector (int ** tablero ,int numfil,int numcol) {
  4. .....
  5. .....
  6.  
  7.          case 't': case 'T':
  8. return CODIGO_SALIDA;
  9.  
  10.  
  11.  
  12. ....
  13.  
  14. int indicador;
  15. while(indicador != CODIGO_SALIDA ){
  16.    indicador = EditVector(... ...);
  17. }
  18.  




Título: Re: Como salir del bucle (preferiblemente con algun system())
Publicado por: alpachino98 en 23 Octubre 2017, 19:45 pm
La función EditVector esta a nivel del while ??

La función esta dentro de un do while con dos condiciones bool y la funcion en principio es un void. Lo que me has pasado es un buen metodo para hacerlo  :D Gracias!

Pero al final lo que he hecho ha sido:
Código:
case 't': case 'T':
system("cls");
cout<<"Gracias por jugar.";
exit(0);
break;

Lo dejo aqui por si le sirve a alguien en un futuro. El exit (0) finaliza el programa directamente sin tener que hacer nada mas, muy simple. Aunque me han dicho que el uso de system () no es muy recomendable no se si con esto ocurrirá lo mismo.