Пятнашки — популярная головоломка, придуманная в 1878 году Ноем Чепмэном. Представляет собой набор одинаковых квадратных костяшек с нанесёнными числами, заключённых в квадратную коробку. Длина стороны коробки в четыре раза больше длины стороны костяшек для набора из 15 элементов (и в три раза больше для набора в 8 элементов), соответственно в коробке остаётся незаполненным одно квадратное поле. Цель игры — перемещая костяшки по коробке добиться упорядочивания их по номерам, желательно сделав как можно меньше перемещений.
Исходник:
% The idea for this program is given by
% Zornica Angelova from University of Sofia
?-
set(hole(100,100)),
window(_,_,win_func(_),"The Puzzle Fifteen",200,150,350,200).
win_func(init):-
button(_,_,btn_mix_L(_),"Light Mix",200,25,110,25),
button(_,_,btn_mix_M(_),"Midle Mix",200,75,110,25),
button(_,_,btn_mix_H(_),"Hard Mix",200,125,110,25),
for(I, 0, 14),
button(_,_,btn_func(_), print(I+1), 25+25 * (I mod 4), 25+25 * (I//4),25,25),
fail.
btn_func(press):-
position(_,X,Y),
hole(A,B),
(abs(X-A)=:=25, Y=B;
abs(Y-B)=:=25, X=A),
position(_,A,B),
set(hole(X,Y)),
fail.
btn_mix_L(press):- mix(10).
btn_mix_M(press):- mix(30).
btn_mix_H(press):- mix(100).
mix(Mix):-
for(I, 1, Mix),
wait(0.05),
hole(A,B),
(I mod 2 =:= 0 ->
X is A +50*random(2)- 25, Y is B;
Y is B +50*random(2)- 25, X is A),
press_button(_, X, Y),
fail.
• |