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
I. PENJELASAN GAME
1.1SEJARAH
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
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.1PENJELASAN TENTANG STRATEGI
2.1.1 JUMLAH PETAK
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
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
Gambar 1.5 (Sketsa Pohon Pencarian pada Othello 2 kedalaman)
2.1.6 DEPTH-FIRST SEARCH (DFS)
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.2PENERAPAN 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
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
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.
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.
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.1SCREENSHOOT PROGRAM LANGKAH PER LANGKAH
LANGKAH 1 LANGKAH 2 LANGKAH 3
LANGKAH 7 LANGKAH 8 LANGKAH 9
LANGKAH 10 LANGKAH 11 LANGKAH 12
LANGKAH 16 LANGKAH 17 LANGKAH 18
LANGKAH 19 LANGKAH 20 LANGKAH 21
LANGKAH 25 LANGKAH 26 LANGKAH 27
LANGKAH 28 LANGKAH 29 LANGKAH 30
LANGKAH 34 LANGKAH 35 LANGKAH 36
LANGKAH 37 LANGKAH 38 LANGKAH 39
LANGKAH 43 LANGKAH 44 LANGKAH 45
LANGKAH 46 LANGKAH 47 LANGKAH 48
LANGKAH 52 LANGKAH 53 LANGKAH 54
LANGKAH 55 LANGKAH 56 LANGKAH 57
Gambar 2.3 (Saat permainan berakhir, kondisi musuh menang)
Gambar 2.5 (Metode Greedy untuk memberikan nilai petak pada pemain)
IV. KESIMPULAN DAN SARAN
4.1 KESIMPULAN
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”