Torres de Hanoi

Hola, tengo que hacer un programa que me resuelva el juego de las torres de Hanoi.

Tengo parte del código solo me falta el procedure mueve que es el que realiza el movimiento este es el programa:

Program TorresDeHanoi;
uses crt;
const max = 9;
type torres = array[1..3,1..max] of byte;
var mov : integer;
procedure pintavacio;
begin
textbackground(blue);
textcolor(white);
clrscr; clrscr; write(' ');
write('Movimiento número: ',mov);
textbackground(green );
window (16,3,16,21); clrscr;
window (41,3,41,21); clrscr;
window (66,3,66,21); clrscr;
window (6,22,77,22); clrscr;
textbackground(blue);
end;
procedure pintaTorres(t:torres);
var i,j,inix,iniy,inc : byte;
begin
pintavacio;
textbackground(red);
for i := 1 to 3 do
for j := 1 to max do
if t[i,j] > 0 then begin
inix := 16+25*(i-1)-t[i,j];
iniy := 22-2*j;
inc := t[i,j] * 2 + 1;
window(inix,iniy,inix+inc,iniy);
clrscr;
end;
textbackground(blue);
window(1,1,80,25); gotoxy(1,1);
gotoxy(6,23); write('Pulsa una tecla para continuar...');
readkey;
end;


procedure mueve(var t:torres;ori,fin:byte);
var aux,top : byte;
begin
//Aquí va lo que me falta//
end;


PROCEDURE Hanoi (n,A,B,C : byte;var t:torres);
BEGIN
IF n = 1 THEN mueve(t,A,C)
ELSE BEGIN
Hanoi(n-1,A,C,B,t);
mueve(t,A,C);
Hanoi(n-1,B,A,C,t);
END;
END;
procedure initorres(var t:torres;n:byte);
var i : byte;
begin
for i := 1 to max do
begin
if i <= n then t[1,i] := n+1-i
else t[1,i] := 0;
t[2,i] := 0;
t[3,i] := 0;
end;
end;
var num : byte;
var t : torres;
begin
mov := 0;
clrscr;
write('Dime cuantos discos tienes: '); readln(num);
iniTorres(t,num);
pintatorres(t);
Hanoi(num,1,2,3,t);
end.

Un saludo y gracias.

Añade tu respuesta

Haz clic para o