[ Foro de C++ ]

juego torre de hanoi sin recursividad

29-Oct-2020 03:18
Invitado (frida )
0 Respuestas

tengo que hacer un juego de las torres de hanoi sin usar recursividad
tengo esto, pero ya no se como seguir




#include <iostream>

using namespace std;

int iniciarJuego(int torreA[], int torreB[], int torreC[], int cimaA, int n);
void mostrarTorres(int torreA[], int torreB[], int torreC[], int n);
void mostrarCima(int cimaA, int cimaB, int cimaC);
void desapilar(int origen[], int destino[], int cimaOrg, int cimaDes, int n);
void apilar(int origen[], int destino[], int cimaOrg, int cimaDes, int n);



int main()
{
cout<<endl<<" T O R R E  D E  H A N O I "<<endl<<endl;
int n = 0;
cout<<" ¿cuantos nuveles quieres que tenga la torre? ";
cin>>n;

int torreA[n];
int cimaA = -1;
int torreB[n];
int cimaB = -1;
int torreC[n];
int cimaC = -1;

int origen = 0;
int destino = 0;


cimaA = iniciarJuego(torreA, torreB, torreC, cimaA, n);
mostrarTorres(torreA, torreB, torreC, n);
mostrarCima(cimaA, cimaB, cimaC);

cout<<endl<<endl<<"Empecemos...\n Selecciona tu torre principal:\n 1. Torre A\n 2. Torre B\n 3. Torre C"<<endl;
cout<<"Tu opcion es: ";
cin>>origen;



for(int x = n; x>= 2^n-1; x--){
int c1= 2^n-1, c2= 2^n-1, c3=n, cont=1, pri, ant=0;

while (c1>=0 || c2>=0){

if(cont%2==1){

switch(origen)
{
case 1:
cout<<"\n Selecciona tu torre destino:\n 2. Torre B\n 3. Torre C"<<endl;
cout<<"Tu opcion es: ";
cin>>destino;

if(destino == 2 || destino == 3){

if(destino == 2){
cout<<endl<<"Movimiento de torre "<< origen << " a torre "<< destino <<endl;
desapilar(torreA, torreB, cimaA, cimaB, n);
apilar(torreA, torreB, cimaA, cimaB, n);
}else{
cout<<endl<<"Movimiento de torre "<< origen << " a torre "<< destino <<endl;
desapilar(torreA, torreC, cimaA, cimaC, n);
apilar(torreA, torreC, cimaA, cimaC, n);
}
}
else{
cout<<"\n Torre destino no valido"<<endl;
}
break;

case 2:
cout<<"\n Selecciona tu torre destino:\n 1. Torre A\n 3. Torre C"<<endl;
cout<<"Tu opcion es: ";
cin>>destino;

if(destino == 1 || destino == 3){

if(destino == 1){
cout<<endl<<"Movimiento de torre "<< origen << " a torre "<< destino <<endl;
desapilar(torreB, torreA, cimaB, cimaA, n);
apilar(torreB, torreA, cimaB, cimaB, n);
}else{
cout<<endl<<"Movimiento de torre "<< origen << " a torre "<< destino <<endl;
desapilar(torreB, torreC, cimaB, cimaC, n);
apilar(torreB, torreC, cimaB, cimaC, n);
}
}
else{
cout<<"\n Torre destino no valido"<<endl;
}
break;

case 3:
cout<<"\n Selecciona tu torre destino:\n 1. Torre A\n 2. Torre B"<<endl;
cout<<"Tu opcion es: ";
cin>>destino;

if(destino == 1 || destino == 2){
if(destino == 2){
cout<<endl<<"Movimiento de torre "<< origen << " a torre "<< destino <<endl;
desapilar(torreC, torreB, cimaC, cimaB, n);
apilar(torreC, torreB, cimaC, cimaB, n);
}else{
cout<<endl<<"Movimiento de torre "<< origen << " a torre "<< destino <<endl;
desapilar(torreC, torreA, cimaC, cimaA, n);
apilar(torreC, torreA, cimaC, cimaA, n);
}
}
else{
cout<<"\n Torre destino no valido"<<endl;
}
break;

default:
cout<<"\n Torre origen no valido"<<endl;
break;
}
} else{



}
}
}





return 0;
}

int iniciarJuego(int torreA[], int torreB[], int torreC[], int cimaA, int n)
{
for(int i = 0; i<n; i ++)
{
torreA[i] = n - i;
cimaA ++;

torreB[i] = 0;
torreC[i] = 0;
}

return cimaA;
}

void mostrarTorres(int torreA[], int torreB[], int torreC[], int n)
{
cout<<endl<<"Torre 1: ";
for (int i = 0; i<n; i++)
{
cout<<torreA[i]<<" ";
}

cout<<endl<<"Torre 2: ";
for (int i = 0; i<n; i++)
{
cout<<torreB[i]<<" ";
}

cout<<endl<<"Torre 3: ";
for (int i = 0; i<n; i++)
{
cout<<torreC[i]<<" ";
}
}

void mostrarCima(int cimaA, int cimaB, int cimaC)
{
cout<<endl<<endl<<"Indice cima 1: "<<cimaA;
cout<<endl<<"Indice cima 2: "<<cimaB;
cout<<endl<<"Indice cima 3: "<<cimaC;
}




void desapilar(int origen[], int destino[], int cimaOrg, int cimaDes, int n)
{
if(cimaOrg == -1)
{
cout<<" Movimiento invalido torre vacia";
}else{

cout<<" Se puede desapilar";
apilar(origen, destino, cimaOrg, cimaDes, n);
}
}



void apilar(int origen[], int destino[], int cimaOrg, int cimaDes, int n)
{
if(cimaDes == n-1)
{
cout<<" Movimiento invalido torre llena";
}else{
if(cimaDes == -1)
{
cout<<endl<<" Se puede apilar";
}else{
if(destino[cimaDes] > origen[cimaOrg])
{
cout<<endl<<" Se puede apilar";
}else{
cout<<endl<<" Movimiento invalido no puedes apilar un elemento mayor";
}
}
}
}




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)