0% found this document useful (0 votes)
38 views

? - (,, ,) (,, ,), , Is, Is, Is, Is, Is, Is, Is, Is, Is, Is, .:-, ,,, .:-, (,, ,) (,, ,), .: - .

This document defines the rules and logic for a Halma board game. It includes definitions for colors, brushes, pens, and windows used to display the game board. Functions are defined for painting game elements like the board, pieces, and dice rolls. Logic is provided for moving pieces based on dice rolls and ending the game when a player reaches 62 points. Interactions like rolling dice, selecting pieces, and making moves are also defined.

Uploaded by

Suke Kesi
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
38 views

? - (,, ,) (,, ,), , Is, Is, Is, Is, Is, Is, Is, Is, Is, Is, .:-, ,,, .:-, (,, ,) (,, ,), .: - .

This document defines the rules and logic for a Halma board game. It includes definitions for colors, brushes, pens, and windows used to display the game board. Functions are defined for painting game elements like the board, pieces, and dice rolls. Logic is provided for moving pieces based on dice rolls and ending the game when a player reaches 62 points. Interactions like rolling dice, selecting pieces, and making moves are also defined.

Uploaded by

Suke Kesi
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 9

?

set(pos([0,0,0,0],[0,0,0,0],2)),
G_Flag=0,
G_Purple is brush(rgb(115,45,170)),
G_Blue is brush(rgb(35,215,240)),
G_Yellow is brush(rgb(255,255,0)),
G_PurpleL is brush(rgb(200,170,235)),
G_BlueL is brush(rgb(177,240,249)),
G_Red is brush(rgb(255,0,0)),
G_White is brush(rgb(255,255,255)),
G_Black is brush(rgb(0,0,0)),
G_Pen is pen(2,rgb(0,0,0)),
G_PenW is pen(2,rgb(255,255,255)),
window( G_Main, _, win_funk(_), "Halma - lempar dadu",
100,100,600,500).
win_funk(init):button( G_Button,_,but_funk(_),"lempar dadu",430,345,90,25),
menu(normal,_,_,menu_window(_),"&New Game"),
menu(normal,_,_,menu_about(_),"&About"),
menu( normal, _, _, menu_help(_), "&Help"),
menu(normal,_,_,menu_exit(_),"&Exit").
menu_window(press):close_window(_),
set(pos([0,0,0,0],[0,0,0,0],2)),
window( G_Main, _, win_funk(_), "Halma - lempar dadu",
100,100,600,500).
menu_about(press):message("About","Permainan halma dikembangkan oleh Sukesi, kelas
3IA10.",i).
menu_help(press) :message("Help","klik kocok dadu hingga muncul angka 6, untuk
dapat mengeluarkan pion dari kandangnya. Klik pion yang ingin
dijalankan.", i).
menu_exit(press):close_window(_).
win_funk(paint):pen(G_Pen),
brush(G_White),
rect(135,135,260,260),
rect(160,10,235,385),
rect(10,160,385,235),
fail.

win_funk(paint):for(I,0,4),
X is 25*I+35,
line(160,X,235,X),
fail.
win_funk(paint):for(I,0,4),
X is 25*I+260,
line(160,X,235,X),
fail.
win_funk(paint):for(I,0,4),
X is 25*I+35,
line(X,160,X,235),
fail.
win_funk(paint):for(I,0,4),
X is 25*I+260,
line(X,160,X,235),
fail.
win_funk(paint):brush(G_Red),
rect(10,10,110,110),
rect(34,184,161,211),
fill_polygon(160,160,197,197,160,235),
fill_polygon(15,243,30,248,15,253),
brush(G_Blue),
rect(10,285,110,385),
rect(184,234,211,361),
fill_polygon(160,235,197,197,235,235),
fill_polygon(243,380,248,365,253,380),
brush(G_Purple),
rect(285,10,385,110),
rect(184,34,211,161),
fill_polygon(160,160,197,197,235,160),
fill_polygon(143,15,148,30,153,15),
brush(G_Yellow),
rect(285,285,385,385),
rect(234,184,361,211),
fill_polygon(235,160,197,197,235,235),
fill_polygon(380,143,365,148,380,153),
pos(_,_,Z),
(G_Flag=0, Z<6 ->

brush(G_Black)
else
brush(G_Blue)
),
round_rect(455,295,495,335,15,15),
brush(G_White),
fail.
win_funk(paint):for(A,0,1),
for(B,0,1),
X is 185+25*A,
Y is 10 + 350*B,
Y1 is Y+25,
line(X,Y,X,Y1),
line(Y,X,Y1,X),
for(I,0,1),
for(J,0,1),
ellipse(275*A+35*I+30,275*B+35*J+30,275*A+35*I+55,275*B+35*J+55)
,
fail.
win_funk(paint):for(I,0,5),
ellipse(185,35+25*I,210,60+25*I),
ellipse(185,210+25*I,210,235+25*I),
ellipse(35+25*I,185,60+25*I,210),
ellipse(210+25*I,185,235+25*I,210),
fail.
win_funk(paint):pos([B0,B1,B2,B3],[R0,R1,R2,R3],Z),
pen(G_PenW),
draw_points(Z),
put_pionka(0,0,B0,[B0,B1,B2,B3]),
put_pionka(1,0,B1,[B0,B1,B2,B3]),
put_pionka(2,0,B2,[B0,B1,B2,B3]),
put_pionka(3,0,B3,[B0,B1,B2,B3]),
put_pionka(0,1,R0,[R0,R1,R2,R3]),
put_pionka(1,1,R1,[R0,R1,R2,R3]),
put_pionka(2,1,R2,[R0,R1,R2,R3]),
put_pionka(3,1,R3,[R0,R1,R2,R3]),
fail.
win_funk(mouse_click(X,Y)):G_Flag=1,
cursor(w),
X1 is 10+25* ((X- 10)//25),
Y1 is 10+25* ((Y- 10)//25),

try_all(P,I),
koordinati(P,1,I,X2,Y2),
abs(X1-X2+6)<12,
abs(Y1-Y2+6)<12,
pos(B,R,Z),
member(R,I,P),
(I=0, Z=6->
S is 1
else (I>0, I+Z=<62->
S is I+Z
else
fail
)),
replace(R2,R,S,P),
play(1,S,I,P,B,R2,Z),
(R2=[62,62,62,62]->
G_Flag:=2,
set(pos(B,R2,Z)),
message("Game Over","selamat! anda pemenangnya",i),
set_text("Halma - Game Over" , G_Main),
fail
),
(S>0, S<57->
S2 is 1+ (S+27) mod 56,
kick(B2,B,S2,0)
else
B2=B
),
(Z<6->
answer(B2,R2)
else
set(pos(B2,R2,Z))
),
G_Flag:=0,
enable_window(G_Button, 1),
set_text("Halma - lempar dadu" , G_Main),
!, fail.
win_funk(mouse_click(X,Y)):beep.
but_funk(press):G_Flag=0,
cursor(w),
enable_window(G_Button, 0),
pos(B,R,_),
Z is 1+random(6),
pen(G_Pen),
brush(G_Blue),

round_rect(455,295,495,335,15,15),
wait(0.6),
brush(G_White),
pen(G_PenW),
draw_points(Z),
(member(R,S,_),(S>0, S+Z=<62;S=0, Z=6)->
set(pos(B,R,Z)),
G_Flag:=1,
set_text("Halma - Pilih pion" , G_Main)
else
answer(B,R),
enable_window(G_Button, 1)
),
!, fail.
but_funk(press):beep.
answer(B,R):wait(1),
Z is 1+random(6),
pen(G_Pen),
brush(G_Black),
round_rect(455,295,495,335,15,15),
wait(0.6),
brush(G_White),
pen(G_PenW),
draw_points(Z),
wait(1),
choose_answer(B,R,Z,I,P,S),
replace(B2,B,S,P),
play(0,S,I,P,R,B2,Z),
(B2=[62,62,62,62]->
G_Flag:=2,
set(pos(B2,R,Z)),
message("Game Over","anda kalah!",s),
set_text("Halma - Game Over" , G_Main),
fail
),
(S>0, S<57->
S2 is 1+ (S+27) mod 56,
kick(R2,R,S2,1)
else
R2=R
),
(Z=6->
answer(B2,R2)
else
set(pos(B2,R2,Z))

).
answer(B,R):G_Flag<2,
G_Flag:=0,
enable_window(G_Button, 1),
set_text("Halma - lempar dadu" , G_Main).
choose_answer(B,R,Z,I,P,S):member(B,I,P),
I>0,
I+Z=<56,
S is I+Z,
S2 is 1+ (S+27) mod 56,
member(R,S2,_).
choose_answer(B,R,6,0,P,1):member(B,0,P).
choose_answer(B,R,Z,I,P,S):member(B,I,P),
I>0, I<57,
count_successes(member(B,I,_))>1,
S is I+Z.
choose_answer(B,R,Z,I,P,S):maximum(I2,X,P2,call(member(B,X,P2), X>0, X<57)),
I2>0,
I=I2,
S is I+Z,
P=G_P_sys.
choose_answer(B,R,Z,I,P,S):member(B,I,P),
I>0,
I+Z=<62,
S is I+Z.
choose_answer(B,R,Z,I,P,S):set(pos(B,R,Z)),
fail.
maximum(R,X,P,Pr):- G_Max_sys:=0, fail.
maximum(R,X,P,Pr):- Pr, X>G_Max_sys, G_Max_sys:=X, G_P_sys:=P,
fail.
maximum(R,X,P,Pr):- R:=G_Max_sys.
kick(L3,L,S,C):member(L,S,P),
replace(L2,L,0,P),
koordinati(P,C,0,X,Y),
pionka(X,Y,C,L,0),
kick(L3,L2,S,C).
kick(L,L,S,C).

play(C,S,I,P,B,R,Z):for(S1,I,S- 1),
koordinati(P,C,S1,X,Y),
pionka(X,Y,C,R,S1),
wait(0.2),
del_pionka(R,B,S1,X,Y,C),
fail.
play(C,S,I,P,B,R,Z):koordinati(P,C,S,X,Y),
pionka(X,Y,C,R,S).
try_all(P,0):-for(P,0,3).
try_all(_,I):-for(I,1,61).
put_pionka(P,C,I,CL):koordinati(P,C,I,X,Y),
pionka(X,Y,C,CL,I).
pionka(X,Y,Br,CL,I):(I>0, count_successes(member(CL,I,_))>1->
Br2 is Br+2,
my_brush(Br2)
else
my_brush(Br)
),
pen(G_Pen),
ellipse(X+3, Y+2,X+23,Y+22),
ellipse(X+8 ,Y+8,X+17,Y+17).
del_pionka(B,R,S,X,Y,C):S>0, member(B,S,_), !,
pionka(X,Y,C,B,S).
del_pionka(B,R,S,X,Y,C):S>0, S<57, S2 is 1+ (S+27) mod 56,
member(R,S2,_), !,
C2 is 1-C,
pionka(X,Y,C2,R,S2).
del_pionka(B,R,S,X,Y,C):brush(G_White),
pen(G_PenW),
ellipse(X+3, Y+2,X+23,Y+22).
my_brush(0):-brush(G_Purple).
my_brush(1):-brush(G_Blue).
my_brush(2):-brush(G_PurpleL).
my_brush(3):-brush(G_BlueL).

koordinati(P,C,0,X,Y):275*C+35* (P // 2)+30.
koordinati(P,C,N,X,Y):N>0, N<57,
(C=0->
koordinati2(N,X,Y)
else
N2 is 1+ (N+27) mod
koordinati2(N2,X,Y)
).
koordinati(_,0,N,X,Y):koordinati(_,1,N,X,Y):-

X is 275* (1-C)+35* (P mod 2)+30, Y is

56,
N>56, X=185, Y is 10 + (N- 56)*25.
N>56, X=185, Y is 360 - (N- 56)*25.

koordinati2(N,X,Y):- N>0, N<7, X=160, Y is N*25- 14.


koordinati2(7,136,136).
koordinati2(N,X,Y):- N>7, N<14, Y=161, X is 335 - N*25.
koordinati2(14,10,186).
koordinati2(N,X,Y):- N>14, N<21, Y=210, X is -365 + N*25.
koordinati2(21,136,235).
koordinati2(N,X,Y):- N>21, N<28, X=160, Y is N*25- 315.
koordinati2(28,185,360).
koordinati2(N,X,Y):- N>28, N<35, X=209, Y is 1085-N*25.
koordinati2(35,234,234).
koordinati2(N,X,Y):- N>35, N<42, Y=210, X is -666 + N*25.
koordinati2(42,359,186).
koordinati2(N,X,Y):- N>42, N<49, Y=161, X is 1434 - N*25.
koordinati2(49,234,137).
koordinati2(N,X,Y):- N>49, N<56, X=209, Y is 1386-N*25.
koordinati2(56,185,11).
draw_points(6) :rect(461,311,469,319),
rect(481,311,489,319),
rect(461,323,469,331),
rect(481,323,489,331),
rect(461,299,469,307),
rect(481,299,489,307).
draw_points(5) :rect(461,323,469,331),
rect(481,323,489,331),
rect(461,299,469,307),
rect(481,299,489,307),
rect(471,311,479,319).
draw_points(4) :rect(461,323,469,331),
rect(481,323,489,331),
rect(461,299,469,307),

rect(481,299,489,307).
draw_points(3) :rect(461,323,469,331),
rect(481,299,489,307),
rect(471,311,479,319).
draw_points(2) :rect(461,323,469,331),
rect(481,299,489,307).
draw_points(1) :rect(471,311,479,319).
member([Element, _, _, _],
member([_, Element, _, _],
member([_, _, Element, _],
member([_, _, _,Element],
replace([Element, A, B, C],
replace([A, Element, B, C],
replace([A, B, Element, C],
replace([A, B, C, Element],

Element,
Element,
Element,
Element,
[_,
[A,
[A,
[A,

A,
_,
B,
B,

0).
1).
2).
3).
B,
B,
_,
C,

C],
C],
C],
_],

Element,
Element,
Element,
Element,

0).
1).
2).
3).

You might also like