KECERDASAN BUATAN
Kecerdasan Buatan
dimunculkan oleh seorang professor dari Massachusetts Institute of Technology
(MIT) yang bernama John McCarthy pada tahun 1956 pada saat Dart Mouth
Conference yang dihadiri oleh para peneliti AI.
- Definisi
Kecerdasan Buatan
Banyak cara untuk
mendefinisikan Kecerdasan Buatan, diantaranya adalah:
ü Suatu studi yang mengupayakan
bagaimana agar computer berlaku
cerdas.
ü Studi yang membuat
komputer dapat menyelesaikan persoalan yang sulit.
Kecerdasan Buatan (Artificial
Intelligence) adalah Teknologi yang mensimulasikan
kecerdasan manusia, yaitu bagaimana mendefinisikan dan mencoba menyelesaikan
persoalan menggunakan komputer dengan meniru bagaimana manusia menyelesaikan
dengan cepat.
Kecerdasan diciptakan dan dimasukkan ke dalam suatu mesin (komputer) agar dapat melakukan pekerjaan seperti
yang dapat dilakukan manusia. Beberapa macam bidang yang menggunakan
kecerdasan buatan antara lain sistem pakar, permainan komputer (games), logika fuzzy, jaringan
syaraf tiruan dan robotika.
INITIAL STATE
Initial
state dalam game TicTacToe 5x5 ini akan menampilkan arena permainan dengan
papan kotak-kotak yang berdimensi 5x5, dimana terdapat 5 baris dan 5 kolom.
Objek yang akan bermain dalam game ini adalah “user” atau pemain dan komputer
yang telah diberi AI. TicTacToe yang saya buat ini sedikit berbeda dengan
kebanyakan game sejenis yang ada. Pada permainan TicTacToe yang umum biasanya
menggunakan X dan O sebagai simbol dari pemain dan komputer. Sedangkan pada
game yang buat akan sedikit dimodifikasi karena saya menggunakan tema
TinkerBell dengan simbol X dan O yang diganti dengan gambar Kriting dan Wajik
Penggunaan
tema game yang berbeda dari yang umum digunakan dimaksudkan untuk menghilangkan
kejenuhan pada pemainnya. Karena
game ini merupakan salah satu permainan asah otak yang baik diterapkan kepada
anak-anak dalam masa perkembangannya, maka mengganti tema game saya pilih untuk
lebih menarik minat pemainnya.
Didalam
game ini terdapat menu yang terdapat dibagian atas kotak permainan, antara lain
:
- New
Game : jika menu ini di
klik maka menandakan pemain sudah siap untuk memulai permainan, dan
waktu akan berjalan mundur selama 15 detik.
- Help : jika menu ini di klik maka akan ada kotak dialog sebagai penjelasan yang harus dilakukan dalam game ini.
- Exit :
untuk keluar dari permainan.
- Music :
jika menu ini di klik maka akan terdengar backsound saat kita memainkan
game ini.
- Stop : jika menu ini di klik maka backsound saat kita memainkan game ini akan berhenti
Tampilan saat Game dijalankan
Tampilam Awal Game
Tampilan Tanpa New Game
Tampilan New Game
Tampilan Menu Help
Tampilan Waktu Habis
Listing Program
win_deep(0). % You can change this two numbers to make the AI more clever
nolose_deep(0).
?-
G_BG is bitmap_image("latar4.bmp",_),
G_A is bitmap_image("kriting.bmp",_),
G_B is bitmap_image("wajik.bmp",_),
set(pos([[f,f,f,f,f], [f,f,f,f,f], [f,f,f,f,f], [f,f,f,f,f], [f,f,f,f,f]])),
set(lose_flag(false)),
brush(system_color(window)),
window_n( _, _, win_func,"Kriting Wajik", 10, 10, 430, 450,_,_,rgb(0,0,0)),
message("Mulai permainan","untuk memulai permainan klik new game",i).
win_func(init) :-
window_brush(_,rgb(100,250,250)),
menu( normal, _, _, menu_new(_), "&New Game"),
menu( normal, _, _, menu_help(_), "&Help"),
menu( normal, _, _, menu_exit(_), "&Exit"),
menu(normal,_,_,music(_),"&music"),
menu(normal,_,_,stop(_),"&stop").
music(press) :-
execute("sound\\1.exe"),
fail.
stop(press) :-
execute("sound\\d.bat"),
close_window(parent(_)).
menu_new(press) :-
G_Interval:=1,
G_Time:=25,
G_Time2:=1,
G_Timer := set_timer(_, G_Interval, time_func),
set(pos([[f,f,f,f,f],[f,f,f,f,f],[f,f,f,f,f],[f,f,f,f,f],[f,f,f,f,f]])),
set(lose_flag(false)),
update_window(_).
%Deklarasi waktu
time_func(end) :-
G_Time=0, !,
kill_timer(_, G_Timer),
message("waktu habis","maaf waktu anda habis",i),
close_window(_),
execute("sound\\d.bat"),
fail.
time_func(end) :-
G_Time2 :=1,
G_Time2 :=G_Time,
G_Time := G_Time - 1,
color_text(_, rgb(0,0,0)),
font(12,20,"Arial"),
text_out(185,5, "Time Left "+ G_Time),
fail.
time_func(end) :-
G_Time2:=G_Time2 - 1,
fail.
menu_help(press) :-
message("Options","Membuat Garis Lurus Vertical, Horizontal atau Diagonal", i).
menu_exit(press) :-
execute("sound\\d.bat"),
close_window(_).
put_mark(Mark) :-
pos(Current_Pos),
member(Current_Pos, L, Y),
member(L, Mark, X),
X1 is 40 + 60*X, Y1 is 40 + 60*Y, X2 is X1 + 40, Y2 is Y1 +40,
write_mark(Mark, X1, Y1, X2, Y2),
fail.
put_mark(_).
write_mark(x, X1, Y1, X2, Y2) :-
%line(X1, Y1, X2, Y2),
%line(X2, Y1, X1, Y2).
draw_bitmap(X1, Y1, G_B, _, _).
write_mark(o, X1, Y1, X2, Y2) :-
%ellipse(X1, Y1, X2, Y2).
draw_bitmap(X1, Y1, G_A, _, _).
win_func(paint) :-
pen(2, rgb(255, 255, 255)), % grey
draw_bitmap(0, 0, G_BG, _, _),
line(30, 30, 30, 330),
line(30, 330, 330, 330),
line(30, 270, 330, 270),
line(330, 330, 330, 30),
line(330, 30, 30, 30),
line(90, 30, 90, 330),
line(150, 30, 150, 330),
line(210, 30, 210, 330),
line(30, 90, 330, 90),
line(30, 150, 330, 150),
line(30, 210, 330, 210),
line(270,30, 270,330),
pen(4, rgb(255, 128, 192)), % pink
put_mark(x),
pen(4, rgb(0, 128, 255)), % blue
put_mark(o),
fail.
win_func(mouse_click(X, Y)) :-
lose_flag(false),
X>30, Y>30,
X<330, Y<330,
X1 is (X - 30)//60,
Y1 is (Y - 30)//60,
pos(Current_Pos),
member(Current_Pos, L, Y1),
member(L, f, X1),
!,
replace(L2, L, x, X1),
replace(Current_Pos2, Current_Pos, L2, Y1),
set(pos(Current_Pos2)),
not(win_func(paint)),
think(Current_Pos2).
win_func(mouse_click(X, Y)) :-
beep.
think(Pos) :-
victory(x, Pos), !,
set(lose_flag(true)),
beep("sound\\tepuk.wav"),
message("Selamat","Anda Menang", !).
think(Pos) :-
try_to_win(Pos), !.
think(Pos) :-
retractall(last_good_move(_)), try_nolose(Pos).
think(_) :-
last_good_move(Sit2), !,
set(pos(Sit2)),
not(win_func(paint)).
think(Pos) :-
move(o, Pos, Sit2),
nolose(x, Sit2, Deep), !, % Tries to make the lose farther
set(pos(Sit2)),
not(win_func(paint)).
think(Pos) :-
move(o, Pos, Sit2),
set(pos(Sit2)),
not(win_func(paint)).
try_nolose(Pos) :-
move(o, Pos, Sit2),
nolose_deep(Deep),
nolose(x, Sit2, Deep),
set(last_good_move(Sit2)),
random(3)=:=0, !, fail. % this makes the game more interesting
try_to_win(Pos) :-
move(o, Pos, Sit2),
is_it_win(Sit2).
is_it_win(Sit2) :-
victory(o, Sit2),
set(pos(Sit2)),
not(win_func(paint)),
set(lose_flag(true)),
beep("sound\\ketawa.wav"),
message("Maaf","Anda Kalah", s).
is_it_win(Sit2) :-
win_deep(Deep),
win(x, Sit2, Deep),
set(pos(Sit2)),
not(win_func(paint)).
member([Element, _, _, _, _], Element, 0).
member([_, Element, _, _, _], Element, 1).
member([_, _, Element, _, _], Element, 2).
member([_, _, _, Element, _], Element, 3).
member([_, _, _, _, Element], Element, 4).
replace([Element, A, B, C, D], [_, A, B, C, D], Element, 0).
replace([A, Element, B, C, D], [A, _, B, C, D], Element, 1).
replace([A, B, Element, C, D], [A, B, _, C, D], Element, 2).
replace([A, B, C, Element, D], [A, B, C, _, D], Element, 3).
replace([A, B, C, D, Element], [A, B, C, D, _], Element, 4).
victory( Who, [[Who, Who, Who, Who, Who], [_, _, _, _, _], [_, _, _, _, _], [_, _, _, _, _], [_, _, _, _, _]]).
victory( Who, [[_, _, _, _, _], [Who, Who, Who, Who, Who], [_, _, _, _, _], [_, _, _, _, _], [_, _, _, _, _]]).
victory( Who, [[_, _, _, _, _], [_, _, _, _, _], [Who, Who, Who, Who, Who], [_, _, _, _, _], [_, _, _, _, _]]).
victory( Who, [[_, _, _, _, _], [_, _, _, _, _], [_, _, _, _, _], [Who, Who, Who, Who, Who], [_, _, _, _, _]]).
victory( Who, [[_, _, _, _, _], [_, _, _, _, _], [_, _, _, _, _], [_, _, _, _, _], [Who, Who, Who, Who, Who]]).
victory( Who, [[Who, _, _, _, _], [Who, _, _, _, _], [Who, _, _, _, _], [Who, _, _, _, _], [Who, _, _, _, _]]).
victory( Who, [[_, Who, _, _, _], [_, Who, _, _, _], [_, Who, _, _, _], [_, Who, _, _, _], [_, Who, _, _, _]]).
victory( Who, [[_, _, Who, _, _], [_, _, Who, _, _], [_, _, Who, _, _], [_, _, Who, _, _], [_, _, Who, _, _]]).
victory( Who, [[_, _, _, Who, _], [_, _, _, Who, _], [_, _, _, Who, _], [_, _, _, Who, _], [_, _, _, Who, _]]).
victory( Who, [[_, _, _, _, Who], [_, _, _, _, Who], [_, _, _, _, Who], [_, _, _, _, Who], [_, _, _, _, Who]]).
victory( Who, [[Who, _, _, _, _], [_, Who, _, _, _], [_, _, Who, _, _], [_, _, _, Who, _], [_, _, _, _, Who]]).
victory( Who, [[_, _, _, _, Who], [_, _, _, Who, _], [_, _, Who, _, _], [_, Who, _, _, _], [Who, _, _, _, _]]).
victory( Who, [[_, _, _, Who, _], [_, _, Who, _, _], [_, Who, _, _, _], [Who, _, _, _, _], [_, _, _, _, _]]).
victory( Who, [[_, Who, _, _, _], [_, _, Who, _, _], [_, _, _, Who, _], [_, _, _, _, Who], [_, _, _, _, _]]).
victory( Who, [[_, _, _, _, _], [Who, _, _, _, _], [_, Who, _, _, _], [_, _, Who, _, _], [_, _, _, Who, _]]).
victory( Who, [[_, _, _, _, _], [_, _, _, _, Who], [_, _, _, Who, _], [_, _, Who, _, _], [_, Who, _, _, _]]).
win( o, Sit, Deep) :- move(o, Sit, Sit2), win(x, Sit2, Deep).
win( x, Sit, _) :- victory(o, Sit).
win( x, Sit, 0) :- !, fail.
win( x, Sit, Deep) :- Deep1 is Deep - 1, not(nowin( x, Sit, Deep1)).
nowin(x, Sit, _) :- not(move(Sit)). % the last move belongs to O
nowin(x, Sit, Deep) :- move(x, Sit, Sit2), nowin(o, Sit2, Deep).
nowin(o, Sit, _) :- victory(x, Sit).
nowin(o, Sit, Deep) :- not(win(o, Sit, Deep)).
lose( x, Sit, Deep) :- move(x, Sit, Sit2), lose(o, Sit2, Deep).
lose( o, Sit, _) :- victory(x, Sit).
lose( o, Sit, 0) :- !, fail.
lose( o, Sit, Deep) :- Deep1 is Deep - 1, not(nolose( o, Sit, Deep1)).
nolose(o, Sit, Deep) :- move(o, Sit, Sit2), nolose(x, Sit2, Deep).
nolose(x, Sit, _) :- victory(o, Sit).
nolose(x, Sit, _) :- not(move(Sit)). % the last move belongs to O
nolose(x, Sit, Deep) :- not(lose(x, Sit, Deep)).
move(P, Sit, Sit2) :-
member(Sit, L, Y),
member(L, f, X),
replace(L2, L, P, X),
replace(Sit2, Sit, L2, Y).
move(Sit) :-
member(Sit, L, _),
member(L, f, _).
Goal
Tujuan
(goal) untuk menyelesaikan permainan ini adalah membuat sebuah garis lurus yang
terdiri 5 kotak deretan simbol secara vertical, horizontal maupun diagonal.
Terdapat beberapa kondisi yang mungkin
terjadi pada permainan ini, yaitu :
- KONDISI
MENANG
Kondisi menang terjadi apabila kita
berhasil membentuk sebuah garis lurus yang terdiri dari 5 buah simbol Kucing,
baik secara horizontal, vertikal maupun diagonal.
- KONDISI
KALAH
Kondisi kalah yang pertama terjadi
apabila kita tidak berhasil membentuk 5 buah simbol Kucing secara horizontal,
vertikal ataupun diagonal. Atau kondisi dimana AI menang terlebih dahulu.
- KONDISI SERI
Daftar Pustaka
- http://en.wikipedia.org/wiki/Tic-tac-toe
- http://bungatiarakaristi.blogspot.com/2012/05/algoritma-permainan-pada-tictactoe-5x5.html
- http://en.wikipedia.org/wiki/Prolog