PENERAPAN ALGORITMA MINIMAX MENGGUNAKAN. pdf

PENERAPAN ALGORITMA MINIMAX MENGGUNAKAN
METODE DEPTH-FIRST SEARCH (DFS) PADA PERMAINAN
OTHELLO BERBASIS DESKTOP

Firdamdam Sasmita (10114175)
Fajar (10114495)
GunGun Abdullah (10114197)

Kelompok-12

ANALISIS ALGORITMA 8
UNIVERSITAS KOMPUTER INDONESIA
BANDUNG - 2016

1

I.

PENJELASAN GAME
1.1 SEJARAH


Othello berawal tahun 1945, setelah bom atom dijatuhkan di Hiroshima dan
Nagasaki. September 1945, Hasegawa Goro yang tengah duduk di kelas satu SMP
menerima pelajaran sembari duduk di tanah di bawah langit biru. Mito juga menjadi
sasaran pengeboman hingga kastil dan bangunan bersejarah lain ikut habis dalam
kobaran api. Dalam suasana seperti itulah permainan ini dilahirkan.

1.2 TENTANG GAME
Permainan Othello adalah permainan yang dimainkan oleh dua orang
pemain. Permainan ini dimainkan di atas papan persegi yang terdiri dari 8 Baris
dan 8 Kolom. Permainan ini di luar negeri lebih dikenal dengan nama Reversi.
Saat ini Othello tidak hanya dimainkan secara tradisional, namun sudah banyak
dibuat dalam bentuk game pada komputer, karena hampir semua jenis dan tipe
game application sekarang membutuhkan AI untuk membuat komputer seolah-olah
tampak cerdas. Maka dari itu game Othello disini bekerja secara otomatis, dengan
sebutan lain berarti komputer lawan komputer dimana penerapan algoritma
minimax akan dibutuhkan disini.

1.3 GAMBAR PROGRAM

Gambar 1.1 (Gambaran game sebelum dimulai)


2

Dalam gambar tersebut terdapat 1 papan yang terdiri dari beberapa petak
hijau, 2 petak hitam dan putih, dan pada kolom status ada pesan pemberitahuan
giliran player dan musuh, sedangkan dibawahnya terdapat 4 tombol yang memiliki
fungsionalitas masing – masing. Mulai - maksudnya untuk memulai permainan
secara otomatis, Tentang – untuk melihat info tentang game, Info – info tentang
anggota kelompok, Keluar – untuk keluar dari game. Kondisi gambar di atas
ketika permainan belum dimulai, dan gambaran ketika proses game sedang
berlangsung seperti ini :

1.4 ATURAN MAIN
Berbeda dengan permainan Othello pada umumnya yang menggunakan
koin, permainan disini dimainkan pada arena papan kotak-kotak persegi berwarna
hijau dengan petak hitam dan putih. Secara umum aturan main nya sama seperti
halnya menggunakan koin, seperti berikut :
1. Petak hitam secara default akan memulai permainan pertama.
2. Petak hitam yang bermain pertama harus melewati petak putih,
begitupun sebaliknya jika giliran petak putih sudah dimulai.

3. Melewati petak hitam / putih bisa dengan arah bawah, atas, kiri, kanan
maupun miring kearah yang bisa di lewati.
4. Apabila salah satu petak hitam / putih sudah tidak bisa melewati
musuhnya maka giliran si petak hitam / putih yang akan bermain lagi,
begitupun seterusnya.
5. Kondisi menang ketika papan terpenuhi oleh salah satu petak hitam /
putih.
6. Jika keduanya sudah tidak dapat menemukan langkah, maka permainan
akan berakhir.

II.

STRATEGI ALGORITMA
2.1 PENJELASAN TENTANG STRATEGI
2.1.1 JUMLAH PETAK

Tujuan akhir dari permainan othello adalah untuk mengumpulkan petak
dengan sebanyak – banyaknya, entah itu petak berwarna hitam atau putih. Maka
dari itu diperlukan strategi untuk permainan papan Othello nya, strategi disini
disebut ‘greedy’ yang berarti ‘rakus’.


3

2.1.2 DAERAH PETAK
Dalam permainan Othello disini, terdapat 5 daerah petak yang beresiko
bagi pemain nya, baik itu pilihan yang diambilnya tepat maupun tidak tepat.
Strategi penempatan pada daerah petak ini mesti diperhatikan agar pemain dapat
memilih pilihan langkah yang baik. Untuk memperjelas apa yang dimaksud 5
daerah disini, bisa di lihat seperti gambar di bawah ini :

Gambar 1.3 (Daerah Petak)
Seperti gambar di atas, daerah 3 dan 5 adalah daerah strategis yang
baik bagi si pemain, beda halnya dengan daerah 4 yang memiliki kelemahan yang
sangat lemah sehingga mudah sekali untuk mengambil petak musuhnya. Berbeda
halnya dengan daerah 2 dan 4, daerah tersebut sangat beresiko sekali karena lawan
dapat membalikan serangan di daerah 3 dan 5, jadi dalam konsep AI pengambilan
penempatan petak ini tidak dianjurkan.

2.1.3 PETAK STABIL
Ada pula petak stabil, petak stabil adalah kondisi ketika petak yang di

dapatkan sebelumnya tidak bisa diambil kembali terkecuali dengan melawan si
pemain lain yang diagonalnya memungkinkan untuk mendapatkan petak, baik
untuk petak hitam atau putih.

4

2.1.4 MOBILITY
Kondisi ketika pemain akan memilih beberapa langkah itu disebut
mobility. Mobility menunjukan beberapa petak yang mesti di tempati dan itu adalah
suatu pilihan yang terbaik bagi si pemain, semakin banyak mobility maka semakin
banyak kemungkinan pilihan langkah yang terbaik, akan tetapi sebaliknya jika
mobility sedikit maka semakin sedikit pilihan langkah yang akan diambil.

Gambar 1.4 (Yang di lingkari putih adalah mobility)

2.1.5 MINIMAX
Untuk menentukan berbagai mobility dari berbagai posisi petak yang
terjadi, maka bisa dilakukan dengan mencari petak lawan yang dapat dibalik oleh
pemain. Yang harus dilakukan adalah memberikan nilai evaluasi pada setiap
mobility dengan cara memperhitungkan beberapa factor diantaranya adalah jumlah

petak, 5 daerah petak, dan petak stabil (yang artinya petak tidak bisa digantikan
oleh lawan), dan tentunya pemakaian algoritma ‘Minimax’ tidak dapat terlepas dari
metode pencarian yang dalam hal ini metode ‘depth-first search’, sehingga akan
dilakukan untuk melakukan pencarian nilai evaluasi terbaik berdasarkan posisi
MIN (Musuh) atau MAX (Player) dari algoritma Minimax.

5

Gambar 1.5 (Sketsa Pohon Pencarian pada Othello 2 kedalaman)

2.1.6 DEPTH-FIRST SEARCH (DFS)
Untuk metode menelusuri pohon pencarian di atas, maka dibutuhkan
salah satu algoritma yang cocok untuk Minimax. Game Othello disini
membutuhkan algoritma depth-first search yang dimana fungsinya yang
didahulukan menelusuri pada kedalaman tertentu (leaf node). Untuk lebih jelasnya,
akan digambarkan menggunakan penomoran untuk proses pencarian nya seperti
gambar di bawah ini :

6


Gambar 1.6 (Sketsa Metode DFS di Othello)
Seperti yang terlihat pada gambar di atas, pencarian akan dilakukan sampai
kedalam tertentu kemudian kembali lagi menelusuri pada node yang lain sampai
kedalaman tertentu pula, begitu seterusnya seperti halnya pada gambar di atas.

2.2 PENERAPAN STRATEGI DALAM MENYELSAIKAN GAME
Penerapan Minimax dalam permainan disini dirancang menggunakan array
2 dimensi dimana di inisialisasikan sebagai P(baris, kolom), dan penggunaan
tersebut dimanipulasi pada penggunaan array P-nya dalam perulangan yang
bersarang.

2.2.1 INISIALISASI AWAL
Pada awalnya, terdapat 2 array yang di inisialisasikan terlebih dahulu
nilainya, yaitu si P dan si C. Array dari si P seperti yang sudah disebutkan
sebelumnya bahwa semua proses yang bekerja akan saling berkaitan dengan proses
7

untuk mendapatkan petak yang saling bergiliran antara player dan musuh.
Sedangkan untuk array si C, di inisialisasikan terlebih dahulu sebagai nilai dari
petak yang berwarna hijau. Untuk lebih jelasnya seperti dibawah ini :


Gambar 1.7 (Inisialisasi awal Baris dan Kolom)

2.2.2 5 DAERAH BERESIKO
Dari kode di atas, tentunya membutuhkan inisialisasi nilai untuk
strategi 5 daerah yang beresiko, maka dari itu untuk mendefnisikan daerah petak
yang beresiko disini, maka dibutuhkan sebuah array baris - perbaris dengan
memiliki nilai nilai yang beresiko. Untuk lebih jelasnya bisa dilihat seperti kode
dibawah ini :

Gambar 1.7 (Array membuat 5 daerah yang beresiko)
Kode di atas menunjukan masing – masing nilai untuk daerah yang
berbeda dalam sebuah variable yang bernama BarisDanKolom.






Nilai 05 dan 00 menunjukan daerah 1

Nilai 03 menunjukan daerah 2
Nilai 10 dan 20 menunjukan daerah 3
Nilai 01 menunjukan daerah 4
Nilai 30 menunjukan daerah 5

Bila daerah 3 pada petak 10 dan 20 dan daerah 2 pada petak 03 ditempati
dan tersambung dengan daerah 5 pada petak 30, maka daerah 3 dan daerah 2 ini
dapat dikatakan sebagai ‘petak stabil’.

8

Permainan yang berlangsung secara otomatis ini membutuhkan penerapan
AI yang diterapkan pada 2 pemain antara player dan musuh, maka dari itu
dibutuhkan algoritma untuk si player MIN dan untuk si musuh MAX agar pada
akhirnya menentukan pemenang, apakah si player atau si musuh yang menang. Dua
algoritma ini sebenarnya tidak jauh berbeda karena sama – sama minimax, akan
tetapi terdapat perbedaan dalam warna petak yang di dapat untuk masing – masing
algoritma nya. Untuk lebih jelasnya bisa di lihat seperti kode dibawah ini :

Gambar 1.8 (Kondisi dari fungsi CariPetakTerbaikMax, warnaku

berarti petakhitam)
Jadi, selama petak hijau terisi oleh petak hitam maka setiap petak untuk
kondisi MAX (petak putih) akan bertambah sesuai dengan index dari kolom dan
baris. Sedangkan untuk sebaliknya ketika keadaan petak hijau bertemu dengan
petak putih maka setiap petak untuk kondisi MIN (petak hitam) akan bertambah
sesuai dengan index dari kolom dan baris.

Gambar 1.9 (Kondisi dari fungsi CariPetakTerbaikMin, warnamu
berarti petakputih)
Seperti pada gambar pohon graf (Gambar 1.6) batas kedalaman pohon graf
di batasi pada ruang statusnya, maka yang dibutuhkan disini untuk memperkecilnya
perlu ditentukan batas maksimumnya.

2.2.3 JUMLAH PETAK

9

Seperti yang sudah dijelaskan sebelumnya bahwa kondisi akhir dari
permainan ini ketika pemain dapat mendapatkan lebih banyak petak dari si pemain
lainnya, maka dari itu dibutuhkan pengumpulan petak setelah petak dibalik menjadi

petak yang lainnya dengan arah yang memungkinkan. Dibawah ini adalah kondisi
untuk validasi merubah warna menjadi petakputih atau petakhitam.

Kondisi tesebut terdapat pada fungsi JumlahPetak() yang dimana
akan dikirimkan kembali sebuah nilainya ke pemilihan case antara player dan
musuh pada fungsi Mainkan().

Gambar 2.0 (Pada fungsi Mainkan(), dan case musuh/kamu)

Gambar 2.1 (Pada fungsi Mainkan(), dan case player/aku)

2.2.4 RANDOM PETAK
Dilihat dari bagaimana cara AI bekerja, maka dibutuhkan
pengacakan yang menghubungkan pada pola di atas yang berguna untuk
menambahkan petak – petak bagi masing – masing pemain dalam tahap yang
berbeda setiap kali memulai permainan. Pengacakan disini menggunakan fungsi
rnd() yang pada umumnya terdapat pada bahasa BASIC, dan sama halnya seperti
pada bahasa lain yang memiliki fungsi yang sama seperti yang disebutkan barusan.

Rnd() terdapat pada case musuh dan player dalam fungsi
Mainkan(), dimana kedua pemain tersebut akan saling bergiliran untuk
mendapatkan petak yang lebih baik. Dalam pengacakan tersebut pasti

10

membutuhkan kecepatan yang dibutuhkan untuk mengacaknya, maka terdapat
fungsi untuk mengatur kecepatan tersebut seperti ini :

Gambar 2.2 (Nilai 4000 adalah jumlah kecepatannya)

III.

IMPLEMENTASI
3.1 SCREENSHOOT PROGRAM LANGKAH PER LANGKAH

LANGKAH 1

LANGKAH 2

LANGKAH 3

LANGKAH 4

LANGKAH 5

LANGKAH 6

11

LANGKAH 7

LANGKAH 8

LANGKAH 9

LANGKAH 10

LANGKAH 11

LANGKAH 12

LANGKAH 13

LANGKAH 14

LANGKAH 15

12

LANGKAH 16

LANGKAH 17

LANGKAH 18

LANGKAH 19

LANGKAH 20

LANGKAH 21

LANGKAH 22

LANGKAH 23

LANGKAH 24

13

LANGKAH 25

LANGKAH 26

LANGKAH 27

LANGKAH 28

LANGKAH 29

LANGKAH 30

LANGKAH 31

LANGKAH 32

LANGKAH 33

14

LANGKAH 34

LANGKAH 35

LANGKAH 36

LANGKAH 37

LANGKAH 38

LANGKAH 39

LANGKAH 40

LANGKAH 41

LANGKAH 42

15

LANGKAH 43

LANGKAH 44

LANGKAH 45

LANGKAH 46

LANGKAH 47

LANGKAH 48

LANGKAH 49

LANGKAH 50

LANGKAH 51

16

LANGKAH 52

LANGKAH 53

LANGKAH 54

LANGKAH 55

LANGKAH 56

LANGKAH 57

LANGKAH 58

LANGKAH 59

LANGKAH 60

17

Gambar 2.3 (Saat permainan berakhir, kondisi musuh menang)

3.2 LIST KODE STRATEGI ALGORITMA

18

Gambar 2.4 (Metode Minimax dan DFS untuk mencari petak yang terbaik)

19

Gambar 2.5 (Metode Greedy untuk memberikan nilai petak pada pemain)

IV.

KESIMPULAN DAN SARAN
4.1 KESIMPULAN

Dengan bantuan algoritma greedy maka untuk menghitung jumlah petak
yang didapat sangat memungkinkan bagi pemain, maka dari itu untuk mendapatkan
petak bagi setiap pemain perlu dibutuhkan untuk melakukan pencarian secara
mendalam dan mempertimbangkan langkah nya, karena itu sangat memungkinkan
untuk memakai algoritma Minimax dan Depth-First Search.

20

V.

REFERENSI
[1] CruizerX game Othello 8x8
[2] Genethello
[3] Elib Unikom “Penerapan Othello di windows phone”
[4] TanyaPedia “Apa itu Dword?”
[5] Stackoverflow “Image Scaling”
[6] Microsoft Support “Bitblt Function”
[7] VB6.US “Statics and Constants”
[8] NameaColor “Color Number”
[9] MyBrain 0541 “Fungsi dari Option Explicit”
[10] Rapid Tables “Blue Color”
[11] CodeGuru “Change Mouse Icon”
[12] VB Forums “Transparent Form”
[13] SE7ENSINS “Fix MSCOMCTL”
[14] Michael Finary “Accessing Registry”
[15] Scancoolcafe “DefInt”
[16] MSDN Microsoft “Circle Method”
[17] MSDN Microsoft “RND Function”
[18] VB Forums “Expected Array”
[19] MSDN Microsoft “MouseDown, MouseUp Events”
[20] MNEMStudio “Reversi Example”
[20] Ekanurseptini “Fungsi IIF”

21