Olá companheiros do fórum, tudo bom com vocês?
Estou tentando programar o jogo da Torre de Hanói em C, mas não consigo resolver um problema. O objetivo do jogo é passar os nº 1,2 3 para as outras duas torres, e o nº 1 deve ficar sempre no topo, nunca embaixo do 2 ou 3.
O problema é que quando eu digito o nº 1 para colocar ele na torre 2 ou 3, o mesmo não é marcado no tabuleiro do jogo. O tabuleiro fiz como sendo uma matriz 3x3.
Já tentei de tudo, mas não consigo resolver o problema citado anteriormente. Peço por gentileza, que alguém possa me dar uma luz de como eu poderia resolver o mesmo.
Agradeço desde já pela atenção. Um cordial abraço.
O código do programa em C
#include<stdio.h>
#include<stdlib.h>
int torre[3][3];
int eto,etd;
int linha;
int aux=0;
void torres(){
for(linha=0;linha<3;linha++){//criação das torres do jogo
torre[linha][0]=0;
torre[linha][1]=0;
torre[linha][2]=0;
}
torre[0][0] = 1;
torre[1][0] = 2;
torre[2][0] = 3;
}
void exibirpainel(){
printf("\n\n---------------------BEM VINDO AO TORRE DE HANOI 2.0---------------------");//Criação do menu
printf("\n\nSeu objetivo e passar os discos para as outras torres em ordem crescente");
printf("\n\nO disco 1 deve ficar sempre no topo da torre");
printf("\n\n");
}
void exibirtorres(){//função para exibir as torres durante o jogo
for(linha=0;linha<3;linha++){
printf("%d\t %d\t %d\t\n", torre[linha][0], torre[linha][1], torre[linha][2]);
}
}
void escolha(){//função para escolher as torres
printf("\n\nInforme a torre origem: \n\n(1) - Torre 1 \n(2) - Torre 2 \n(3) - Torre 3 \n\n ");
scanf("%d", &eto);
printf("\n\nInforme a torre destino: \n\n(1) - Torre 1 \n(2) - Torre 2 \n(3) - Torre 3 \n\n ");
scanf("%d",&etd);
if(eto==1){//laço para zerar o disco escolhido na torre de origem
for(linha=0;linha<3;linha++){
if(torre[linha][0]>0){
aux=torre[linha][0];//auxiliar armazena o valor escolhido
torre[linha][0]=0;
torre[linha][etd-1]=aux;//auxiliar marca o valor no tabuleiro
exibirtorres();
escolha();
}
}
}
else if(eto==2){
for(linha=0;linha<3;linha++){
if(torre[linha][1]>0){
aux=torre[linha][1];
torre[linha][1]=0;
torre[linha][etd-1]=aux;
exibirtorres();
escolha();
}
}
}
else if(eto==3){
for(linha=0;linha<3;linha++){
if(torre[linha][2]>0){
aux=torre[linha][2];
torre[linha][2]=0;
torre[linha][etd-1]=aux;
exibirtorres();
escolha();
}
}
}
if(etd==1){//marcar na torre destino
for(linha=2;linha>-1;linha--){
if(torre[linha][0]==0){
torre[linha][0]=aux;
exibirtorres();
escolha();
}
}
}
else if(etd==2){
for(linha=2;linha>-1;linha--){
if(torre[linha][1]==0){
torre[linha][1]=aux;
exibirtorres();
escolha();
}
}
}
else if(etd==3){
for(linha=2;linha>-1;linha--){
if(torre[linha][2]==0){
torre[linha][2]=aux;
exibirtorres();
escolha();
}
}
}
}
int main(){
torres();
exibirpainel();
exibirtorres();
escolha();
return 0;
}