Kamis, 10 November 2011

Membuat ellips yg bisa bergerak dengan strawberry prolog

share



Char adalah sebuah string dengan satu karakter panjang yang hanya merupakan salah satu ditekan. Pengulangan adalah integer yang mengatakan berapa kali hal ini arang ditekan (jika Anda terus tombol ke bawah kemudian Pengulangan dapat lebih besar dari satu). Jika Anda ingin menangkap kunci khusus seperti panah kemudian gunakan key_down pesan.

CharCode adalah bilangan bulat yang sama dengan kode tombol ditekan. Pengulangan adalah integer yang mengatakan berapa kali tombol ini ditekan (jika Anda terus tombol ke bawah kemudian Pengulangan dapat lebih besar dari satu). Lihat juga message_flags.


Listing :

?-
G_X1:=0,
G_X2:=G_X1,
G_Y1:=0,
G_Y2:=G_Y1,
P1:=0,
P2:=0,
window(_,_,win_func(),"Move",500,200,300,300).

win_func(key_down(39,_)):-
(G_X1 < 200 -> G_X2 := G_X1,
G_X1:=G_X1+1), draw2.

win_func(key_down(37,_)):-
(G_X1 < 200 -> G_X2 := G_X1,
G_X1:=G_X1-1), draw2.

win_func(key_down(38,_)):-
(G_Y1 < 300 -> G_Y2 := G_Y1,
G_Y1:=G_Y1-1), draw3.

win_func(key_down(40,_)):-
(G_Y1 < 300 -> G_Y2 := G_Y1,
G_Y1:=G_Y1+1), draw3.

win_func(paint):- draw.
draw:-

P1:=G_X1*3+10,
ellipse(P1,0,P1+10,10),
P2:=G_Y1*3+10,
ellipse(0,P2,10,P2+10).

draw2:-
update_window(_),

P1:=G_X1*3+10,
ellipse(P1,0,P1+10,10).

draw3:-
update_window(_),
P2:=G_Y1*3+10,
ellipse(0,P2,10,P2+10).

Logika :
Dalam program diatas kita akan membuat sebuah titik yang dimana titik-titik (ellipse) tersebut dapat bergerak kesemua arah baik kiri, kanan, atas, dan bawah. Yang kita buat pertama-tama adalah windownya, dimana kita membuat ukuran window yang disesuaikan dengan listing :
window(_,_,win_func(),"Move",500,200,300,300).
Maka akan tampil window yang berukuran seperti perintah diatas





Selanjutnya kita bisa membuat pendeklarasian atau beberapa pembeda  kata kunci agar setiap fungsi yang dibuat mempunyai andil sendiri dalam setiap logikanya :



G_X1:=0,
G_X2:=G_X1,
G_Y1:=0,
G_Y2:=G_Y1,
P1:=0,
P2:=0,


Selanjutnya kita buat fungsi dari tombol-tombol tersebut agar lingkaran yang kita buat dapat bergerak sesuai tuts yang kita tekan ada beberapa charcode yang saya gunakan karena kita akan membuat lingkran tersebut bergerak keatas,kebawah,kekiri, dan kekanan dengan listing dibawah ini :
win_func(key_down(39,_)):-
(G_X1 < 200 -> G_X2 := G_X1,
G_X1:=G_X1+1), draw2.

Kanan
Ini adalah fungsi untuk tuts menggerakan ellipse kearah kanan maka setiap “G_X1:=G_X1+1” atau penjelasannya setiap ditekan dia akan bertambah satu satu kedepan(kekanan)namun saya menggunakan ellipse yang saya tandakan dengan draw2

win_func(key_down(37,_)):-
(G_X1 < 200 -> G_X2 := G_X1,
G_X1:=G_X1-1), draw2.

Kiri
Ini adalah fungsi untuk tuts menggerakan ellipse kearah kanan maka setiap “G_X1:=G_X1-1” atau penjelasannya setiap ditekan dia akan berkurang satu satu kebelakang(kekiri) namun saya menggunakan ellipse yang saya tandakan dengan draw2


win_func(key_down(38,_)):-
(G_Y1 < 300 -> G_Y2 := G_Y1,
G_Y1:=G_Y1-1), draw3.

Atas Ini adalah fungsi untuk tuts menggerakan ellipse kearah kanan maka setiap “G_Y1:=G_Y1-1” atau penjelasannya setiap ditekan dia akan berkurang satu satu keatas namun saya menggunakan ellipse yang saya tandakan dengan draw3 ditambahkan saya menggunakan deklarasi yang kedua bukan yang “G_X1:=G_X1-1” lagi




win_func(key_down(40,_)):-
(G_Y1 < 300 -> G_Y2 := G_Y1,
G_Y1:=G_Y1+1), draw3.

Bawah, Ini adalah fungsi untuk tuts menggerakan ellipse kearah kanan maka setiap “G_Y1:=G_Y1+1” atau penjelasannya setiap ditekan dia akan berkurang satu satu keatas namun saya menggunakan ellipse yang saya tandakan dengan draw3 ditambahkan saya menggunakan deklarasi yang kedua bukan yang “G_X1:=G_X1+1” lagi

win_func(paint):- draw.
draw:-

P1:=G_X1*3+10,
ellipse(P1,0,P1+10,10),
P2:=G_Y1*3+10,
ellipse(0,P2,10,P2+10).                                        


Diatas adalah lising yang saya gunakan untuk membuat ellipse, seperti yang saya jelaskan diatas saya menggunakan 2 ellipse yang berbeda agar bisa terlihat jelas pergerakannya
draw2:-
update_window(_),

P1:=G_X1*3+10,
ellipse(P1,0,P1+10,10).

draw3:-
update_window(_),
P2:=G_Y1*3+10,
ellipse(0,P2,10,P2+10).

Selanjutnya listing diatas menjelaskan bahwa setiap tuts yang ditekan akan berpindah atau bergeser untuk iu agar menampilkan kembali setiap ellipse tersebut kita gunakan perintah update agar setiap tust yang ditekan dia akan mengupdate titik tersebut sebanyak tekanan pada tuts .
Sekian penjelasan saya semoga dapat dipahami terimakasih.


tampilan akhir  :







1 komentar: