% Towers of hanoi animation for level 1 graphics (IProlog version)

hanoi(N) :-
	newframe,
	buildtower(N, T, 0),
	move([left, 0, T], [centre, 0, T], [right, 0, []]).

buildtower(0, [], _).
buildtower(N, [N|T], H) :-
	shade(N),
	place(left, H, N),
	N1 is N - 1,
	H1 is H + 1,
	buildtower(N1, T, H1).

move([A, _, []], _, _) :- !.
move([A, Oa, [Ba|Ra]], [B, Ob, [Ba|Rb]], [C, Oc, []]) :-
	Oa1 is Oa + 1,
	Ob1 is Ob + 1,
	move([A, Oa1, Ra], [C, Oc, Ra], [B, Ob, []]),
	set_colour(0),
	place(A, Oa, Ba),
	shade(Ba),
	place(B, Ob, Ba),
	move([C, Oc, Ra], [B, Ob1, Ra], [A, Oa, []]).

place(Pole, Height, Width) :-
	base(Pole, X, Y),
	W is Width * 20,
	X0 is X - W / 2,
	X1 is X + W / 2,
	Y0 is Y + Height * 50,
	Y1 is Y0 + 49,
	rectangle(X0, Y0, X1, Y1).

shade(N) :-
	M is N mod 7 + 1,
	set_colour(M).

base(left, 100, 0).
base(centre, 300, 0).
