APLIKASI PERMAINAN CONGKLAK BERBASIS ANDROID MENGGUNAKAN ALGORITMA MINIMAX
SKRIPSI
KARINA AYESHA 081402051
PROGRAM STUDI S1 TEKNOLOGI INFORMASI FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI UNIVERSITAS SUMATERA UTARA MEDAN 2013
Universitas Sumatera Utara
APLIKASI PERMAINAN CONGKLAK BERBASIS ANDROID MENGGUNAKAN ALGORITMA MINIMAX
SKRIPSI
Diajukan untuk melengkapi tugas dan memenuhi syarat mencapai gelar Sarjana Teknologi Informasi
KARINA AYESHA 081402051
PROGRAM STUDI S1 TEKNOLOGI INFORMASI FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI UNIVERSITAS SUMATERA UTARA MEDAN 2013
Universitas Sumatera Utara
ii PERSETUJUAN
Judul
:
Kategori Nama Nomor Induk Mahasiswa Program Studi Departemen Fakultas
: : : : : :
APLIKASI PERMAINAN CONGKLAK BERBASIS ANDROID MENGGUNAKAN ALGORITMA MINIMAX SKRIPSI KARINA AYESHA 081402051 SARJANA (S1) TEKNOLOGI INFORMASI TEKNOLOGI INFORMASI ILMU KOMPUTER DAN TEKNOLOGI INFORMASI (FASILKOMTI) UNIVERSITAS SUMATERA UTARA Diluluskan di Medan, 19 Februari 2013
Komisi Pembimbing
:
Pembimbing 2
Pembimbing 1
Dra.Elly Rosmaini, M.Si NIP 196005201985032002 196005201985032002
Sajadin Sembiring, S.Si, M.Comp.Sc
Diketahui/Disetujui oleh Program Studi S1 Teknologi Informasi Ketua,
Prof. DR. Opim S Sitompul, M.Sc NIP 19610817 19610817 198701 1 001
Universitas Sumatera Utara
iii PERNYATAAN
APLIKASI PERMAINAN CONGKLAK BERBASIS ANDROID MENGGUNAKAN ALGORITMA MINIMAX
SKRIPSI
Saya mengakui bahwa skripsi ini adalah hasil kerja saya sendiri, kecuali beberapa kutipan dan ringkasan yang masing-masing disebutkan sumbernya.
Medan, 19 Februari 2013
KARINA AYESHA 081402051
Universitas Sumatera Utara
iv
PENGHARGAAN
Puji syukur penulis ucapkan kepada Allah SWT yang telah melimpahkan rahmat dan karunia Nya sehingga penulis dapat menyelesaikan penyusunan skripsi ini, sebagai syarat untuk memperoleh gelar Sarjana Teknologi Informasi, Program Studi S1 Teknologi Informasi Departemen Ilmu Komputer dan Teknologi Informasi Universitas Sumatera Utara.
Ucapan terima kasih penulis sampaikan kepada Sajadin Sembiring, S.Si, M.Comp.Sc selaku pembimbing pertama dan Dra. Elly Rosmaini, M.Si selaku pembimbing kedua yang telah banyak meluangkan waktunya dalam memberikan masukan-masukan kepada penulis. Ucapan terima kasih juga ditujukan kepada Sarah Purnamawati, ST, M.Sc dan Dedy Arisandi, ST, M.Kom yang telah bersedia menjadi dosen penguji. Ucapan terima kasih juga ditujukan kepada Ketua dan Sekretaris Departemen Ilmu Komputer dan Teknologi Informasi, Dekan dan Pembantu Dekan Fakultas Ilmu Komputer dan Teknologi Informasi Universitas Sumatera Utara, semua dosen serta pegawai di Program Studi S1 Teknologi Informasi Departemen Teknologi Informasi FASILKOMTI USU.
Tidak lupa juga penulis ucapkan terima kasih kepada Ayahanda Alfian Anwar, S.E. dan Ibunda Hj.T.Meisyura yang memberikan dukungan, doa, dan semangat tanpa henti. Untuk abang penulis, Willy Sahira dan adik penulis, Wiruza Mahesa yang selalu memberikan dorongan kepada penulis selama menyelesaikan skripsi ini. Terima kasih penulis ucapkan kepada teman-teman terdekat yang selalu memberikan dukungan, Saysa Mauli Ramadhani, Ahwania Muchtar, Halida Rahmah, Indriazel Syaputri, Rahmatika, Elfina, Mauza Saputri, Syahfitri Kartika Lidya, Cahya Rizki, Ishri Ifdhillah, dan Karina Andi serta teman-teman satu angkatan yang sama-sama berjuang dalam penyusunan skripsi. Sekali lagi penulis mengucapkan terima kasih kepada semua pihak yang membantu dalam penyelesaian tugas akhir ini yang tidak dapat disebutkan satu persatu, terima kasih atas ide, saran dan motivasi yang telah diberikan.
Universitas Sumatera Utara
v
ABSTRAK
Congklak merupakan salah satu permainan tradisional yang sudah semakin langka saat ini. Permainan ini dimainkan oleh dua pemain dengan menggunakan sebuah papan congklak dan biji congklak yang berjumlah 14 x 7 buah. Pemain yang berhasil mengumpulkan biji lebih banyak di lumbungnya adalah pemenang dari permainan ini. Kesulitan dari permainan congklak adalah menentukan lubang mana yang merupakan pilihan terbaik sehingga pemain dapat terus melanjutkan permainan. Algoritma Minimax dapat diterapkan pada permainan congklak ini karena mampu menganalisis segala kemungkinan posisi permainan untuk menghasilkan langkah optimum. Untuk mengurangi ruang pencarian sekaligus sebagai optimasi, maka penulis menggunakan algoritma Alpha Beta Pruning . Hasil yang diperoleh dari aplikasi yang dibangun adalah bahwa implementasi algoritma Minimax pada permainan congklak dapat menghasilkan langkah terbaik. Permainan congklak ini dibangun pada sistem operasi Android. Kata kunci: Congklak, Minimax, Alpha Minimax, Alpha Beta Pruning , Android
Universitas Sumatera Utara
vi
CONGKLAK APPLICATION BASED ON ANDROID USING MINIMAX ALGORITHM
ABSTRACT
Congklak is one of the traditional games which getting rare nowadays. Therefore, the author build a congklak game application based on Android to conserve the game and make the congklak game be more practical and economical. Congklak game application is built by implementing Minimax algorithm because it is able to analyze all the possible positions of the game to generate optimum step. To reduce the search space and also as optimization, the author use Alpha Beta Pruning algorithm. The results obtained from the application which has been built shows that the implementation Minimax algorithm on congklak game can generate the best move. Keywords: Congklak, Minimax, Alpha Beta Pruning , Android
Universitas Sumatera Utara
vii
DAFTAR ISI
Halaman ii iii iv v vi vii ix x
Persetujuan Pernyataan Penghargaan Abstrak Abstract Daftar Isi Daftar Tabel Daftar Gambar Bab 1
Pendahuluan 1.1 Latar Belakang 1.2 Rumusan Masalah 1.3 Batasan Masalah 1.4 Tujuan Penelitian 1.5 Manfaat Penelitian 1.6 Metodologi Penelitian 1.7 Sistematika Penulisan
1 1 2 3 3 3 4 4
Bab 2
Landasan Teori 2.1 Kecerdasan Buatan 2.1.1 Penggunaan Kecerdasan Buatan di berbagai Bidang 2.2 Game (Permainan) 2.2.1 Teori Game 2.2.2 Klasifikasi Game 2.3 Permainan Congklak 2.3.1 Sejarah Permainan Congklak 2.3.2 Aturan Permainan Congklak 2.4 Teknik Pencarian (Searching ) 2.5 Algoritma Depth-First Search (DFS) 2.6 Algoritma Minimax 2.7 Algoritma Alpha Beta Pruning 2.8 Android 2.8.1 Arsitektur Android 2.8.2 Versi Android 2.9 Penelitian Sebelumnya
6 6 7 9 9 10 12 12 13 14 15 16 18 19 20 22 23
Bab 3
Analisis dan Perancangan Aplikasi 3.1 Analisis Algoritma 3.1.1 Analisis Algoritma Permainan Congklak 3.1.2 Analisis Algoritma Minimax 3.1.3 Analisis Algoritma Alpha Beta Pruning 3.2 Perancangan Sistem 3.2.1 Perancangan Pemodelan Visual Menggunakan UML
25 25 25 29 35 35 35
Universitas Sumatera Utara
viii 3.2.1.1 Use Case Diagram 3.2.1.2 Activity Diagram 3.2.2 Perancangan Aplikasi Permainan 3.2.3 Perancangan Antarmuka
36 36 43 44
Bab 4
Implementasi dan Pengujian Aplikasi 4.1 Implementasi 4.1.1 Spesifikasi Perangkat Keras 4.1.2 Spesifikasi Perangkat Lunak 4.2 Tampilan Aplikasi 4.2.1 Tampilan Form Menu 4.2.2 Tampilan Form Choose Level 4.2.3 Tampilan form pilih giliran pemain 4.2.4 Tampilan form permainan 4.2.5 Tampilan form Rules 4.2.6 Tampilan form About 4.3 Pengujian 4.3.1 Pengujian Aplikasi 4.3.2 Pengujian Antarmuka Aplikasi 4.3.3 Pengujian Penggunaan Aplikasi
50 50 50 50 52 52 52 53 53 56 57 57 58 58 61
Bab 5
Kesimpulan dan Saran 5.1 Kesimpulan 5.2 Saran
64 64 65
Daftar Pustaka
66
Lampiran A Lampiran B
Universitas Sumatera Utara
ix
DAFTAR TABEL
Halaman Tabel 2.1 Versi-versi Android Tabel 2.2 Penelitian Sebelumnya Tabel 3.1 Proses Single Player Tabel 3.2 Proses Choose Level Tabel 3.3 Proses Multiplayer Tabel 3.4 Proses Play Tabel 3.5 Proses Rules Tabel 3.6 Proses About Tabel 3.7 Proses Exit Tabel 4.1 Kategori Pemberian Nilai Tabel 4.2 Hasil Kuesioner Antarmuka Aplikasi Tabel 4.3 Hasil Kuesioner Penggunaan Aplikasi
22 24 37 38 39 39 41 42 42 58 59 61
Universitas Sumatera Utara
x
DAFTAR GAMBAR
Halaman Gambar 2.1 Papan Congklak Gambar 2.2 Penelusuran pohon permainan dengan DFS Gambar 2.3 Cara kerja algoritma Minimax Gambar 2.4 Cara kerja algoritma Alpha Beta Pruning Gambar 2.5 Komponen utama Arsitektur Android Gambar 3.1 Keadaan papan congklak untuk menemukan langkah free turn Gambar 3.2 Pohon permainan untuk menemukan langkah free turn Gambar 3.3 Keadaan papan congklak untuk menemukan langkah tembak Gambar 3.4 Pohon permainan untuk menemukan langkah tembak Gambar 3.5 Keadaan papan congklak pada simulasi menemukan langkah terbaik Gambar 3.6 Pohon permainan menggunakan algoritma Minimax pada simulasi menemukan langkah terbaik Gambar 3.7 Keadaan papan congklak setelah lubang B7 menemukan langkah free turn Gambar 3.8 Pohon permainan menggunakan algoritma Minimax pada simulasi player (a) Gambar 3.9 Keadaan papan congklak setelah lubang B7 menemukan langkah free turn Gambar 3.10 Pohon permainan menggunakan algoritma Minimax pada simula si player (b) Gambar 3.11 Pohon penelusuran algoritma Minimax Gambar 3.12 Pohon permainan menggunakan algoritma Alpha Beta Pruning Gambar 3.13 Use Case Diagram Gambar 3.14 Activity diagram Single Player Gambar 3.15 Activity diagram Choose Level Gambar 3.16 Activity diagram Multiplayer Gambar 3.17 Activity diagram Play Gambar 3.18 Activity diagram Rules Gambar 3.19 Activity diagram About Gambar 3.20 Activity diagram Exit Gambar 3.21 Flowchart aplikasi permainan Gambar 3.22 Form Home Gambar 3.23 Form Choose Level Gambar 3.24 Form pilih giliran pemain Gambar 3.25 Form Rules Gambar 3.26 Form About Gambar 3.27 Form Arena Permainan Gambar 4.1 Tampilan form menu Gambar 4.2 Tampilan form Choose Level Gambar 4.3 Tampilan form pilih giliran pemain Gambar 4.4 Tampilan form permainan sebelum permainan dimulai Gambar 4.5 Tampilan form permainan saat permainan dimulai
12 15 17 19 20 26 27 28 29 30 31 32 32 33 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 47 48 49 52 53 53 54 54
Universitas Sumatera Utara
xi Gambar 4.6 Tampilan saat permainan sedang berlangsung Gambar 4.7 Tampilan permainan dalam keadaan paused Gambar 4.8 Message dialog Gambar 4.9 Tampilan ketika permainan sudah berakhir Gambar 4.10 Tampilan form Rules Gambar 4.11 Tampilan form About
55 55 56 56 57 57
Universitas Sumatera Utara
v
ABSTRAK
Congklak merupakan salah satu permainan tradisional yang sudah semakin langka saat ini. Permainan ini dimainkan oleh dua pemain dengan menggunakan sebuah papan congklak dan biji congklak yang berjumlah 14 x 7 buah. Pemain yang berhasil mengumpulkan biji lebih banyak di lumbungnya adalah pemenang dari permainan ini. Kesulitan dari permainan congklak adalah menentukan lubang mana yang merupakan pilihan terbaik sehingga pemain dapat terus melanjutkan permainan. Algoritma Minimax dapat diterapkan pada permainan congklak ini karena mampu menganalisis segala kemungkinan posisi permainan untuk menghasilkan langkah optimum. Untuk mengurangi ruang pencarian sekaligus sebagai optimasi, maka penulis menggunakan algoritma Alpha Beta Pruning . Hasil yang diperoleh dari aplikasi yang dibangun adalah bahwa implementasi algoritma Minimax pada permainan congklak dapat menghasilkan langkah terbaik. Permainan congklak ini dibangun pada sistem operasi Android. Kata kunci: Congklak, Minimax, Alpha Beta Pruning , Android
Universitas Sumatera Utara
vi
CONGKLAK APPLICATION BASED ON ANDROID USING MINIMAX ALGORITHM
ABSTRACT
Congklak is one of the traditional games which getting rare nowadays. Therefore, the author build a congklak game application based on Android to conserve the game and make the congklak game be more practical and economical. Congklak game application is built by implementing Minimax algorithm because it is able to analyze all the possible positions of the game to generate optimum step. To reduce the search space and also as optimization, the author use Alpha Beta Pruning algorithm. The results obtained from the application which has been built shows that the implementation Minimax algorithm on congklak game can generate the best move. Keywords: Congklak, Minimax, Alpha Beta Pruning , Android
Universitas Sumatera Utara
1
BAB 1
PENDAHULUAN
1.1
Latar Belakang
Congklak merupakan salah satu permainan tradisional yang sangat diminati oleh berbagai kalangan, khususnya anak-anak. Congklak adalah permainan yang dimainkan oleh dua orang pemain menggunakan papan congklak yang terdapat 16 buah lubang yang terdiri atas 14 lubang kecil yang saling berhadapan dan 2 lubang besar (untuk selanjutnya disebut lumbung) yang berada di sisi kiri paling ujung setiap pemain (Bakri, 2010). Setiap 7 lubang kecil di sisi pemain dan lubang besar di sisi kirinya dianggap sebagai milik sang pemain. Lumbung berfungsi untuk menampung jumlah biji yang didapatkan setiap pemain, tentu saja pemain hanya boleh menjatuhkan biji congklak ke lumbung miliknya, tujuannya agar lumbungnya terisi banyak biji. Lubang kecil berfungsi sebagai posisi awal jumlah biji pemain dan menjadi media gerak pemain untuk memindahkan biji agar berpindah sebanyak banyaknya ke lumbung milik sendiri. Seiring berkembangnya pengetahuan dan teknologi, permainan congklak dapat diselesaikan oleh komputer dengan mengimplementasikan algoritma. Algoritma Minimax dapat diterapkan pada aplikasi permainan congklak ini karena mampu menganalisis segala kemungkinan posisi permainan untuk menghasilkan keputusan yang terbaik. Untuk mempersingkat waktu pencarian sekaligus sebagai optimasi, maka penulis menggunakan algoritma Alpha Beta Pruning . Alpha Beta Pruning merupakan algoritma yang akan mengurangi ruang pencarian Minimax sehingga waktu eksekusi untuk algoritma ini akan lebih efisien.
Universitas Sumatera Utara
2
Pencarian solusi pada permainan congklak sudah pernah dilakukan dengan menggunakan beberapa metode, diantaranya Adha (2009) menggunakan algoritma Greedy untuk membuktikan solusi optimum yang akan dihasilkan. Algoritma Greedy dapat memecahkan masalah optimum, namun tidak selalu menghasilkan solusi yang optimum. Selanjutnya yaitu Bakri (2010) menggunakan algoritma Backtracking. Algoritma ini secara sistematis mencari solusi persoalan diantara semua kemungkinan solusi yang ada. Namun langkah yang diambil belum tentu merupakan langkah yang terbaik, sehingga memungkinkan terjadi terlalu banyak backtracking yang harus dilakukan.
Perkembangan smartphone/tablet pc berbasis Android sangat pesat beberapa tahun terakhir. Perkembangan tersebut mengakibatkan meningkatnya aplikasi-aplikasi mobile berbasis Android. Untuk itu penulis tertarik untuk merancang dan membangun aplikasi permainan congklak di smartphone/tablet pc berbasis Android.
Berdasarkan uraian diatas, diperlukan metode lain dalam membangun aplikasi permainan congklak untuk menghasilkan solusi optimum. Oleh sebab itu penulis akan menerapkan algoritma Minimax yang dioptimasi dengan Alpha Beta Pruning untuk membuat aplikasi permainan congklak pada smartphone/tablet pc berbasis Android.
1.2
Rumusan Masalah
Congklak termasuk jenis permainan matematika. Dalam memainkannnya seorang pemain dituntut untuk menghitung cepat dengan memperhitungkan hasil yang akan terjadi sehingga menghasilkan langkah optimum. Kesulitan dari permainan congklak adalah menentukan lubang mana yang merupakan pilihan terbaik sehingga pemain dapat terus melanjutkan permainan.
Permasalahan yang dibahas dalam tugas akhir ini adalah diperlukan suatu teknik pendekatan baru pada permainan congklak untuk menghasilkan langkah optimum.
Universitas Sumatera Utara
3
1.3
Batasan Masalah
Dalam perancangan aplikasi ini penulis memberikan batasan-batasan masalah sebagai berikut: 1. Pada aplikasi yang dibangun, permainan congklak ini dapat dimainkan oleh satu orang pemain (Single Player ) melawan sebuah agen kecerdasan buatan dan dapat juga dimainkan oleh dua orang pemain ( Multiplayer ). 2. Arena permainan berjumlah 16 lubang yang terdiri dari 2 lubang besar (lumbung) dan 14 lubang kecil. Setiap lubang kecil berisi 7 biji congklak. 3. Pada permainan Single Player terdapat tiga tingkat kesulitan yaitu easy, medium, dan hard. 4. Permainan congklak ini tidak memberikan batasan waktu bagi pemain. 5. Aplikasi yang dibangun menggunakan bahasa pemrograman C++. Kemudian kode program dikonversi menjadi librar y untuk dijalankan pada perangkat lunak Eclipse sehingga program dapat di-compile sebagai mobile aplication berbasis Android. 6. Platform android yang digunakan adalah minimum Android versi 2.2 (Froyo).
1.4
Tujuan Penelitian
Tujuan penelitian ini adalah membangun aplikasi permainan congklak dengan mengimplementasikan algoritma Minimax yang dioptimasi dengan Alpha Beta Pruning untuk menemukan langkah optimum.
1.5
Manfaat Penelitian
Manfaat yang diharapkan dari penelitian ini adalah mampu memberikan pemahaman kepada penulis dan pembaca tentang penggunaan algoritma Minimax yang dioptimasi dengan Alpha Beta Pruning dalam permainan congklak . Selain itu, aplikasi permainan congklak yang dibangun pada smartphone/tablet pc berbasis Android ini diharapkan
Universitas Sumatera Utara
4
dapat melestarikan permainan kebudayaan Indonesia khususnya congklak yang sudah semakin langka di kalangan masyarakat.
1.6
Metodologi Penelitian
Metode penelitian yang akan digunakan adalah: 1. Studi Literatur Pada tahap ini dilakukan dengan membaca dan mempelajari buku-buku referensi atau sumber-sumber yang berkaitan dengan skripsi ini, baik berasal dari buku, internet . jurnal, dan beberapa referensi lainnya. 2. Analisis dan Merancang Desain Sistem Pada tahap ini dilakukan analisis bagaimana menerapkan algoritma Minimax yang dioptimasi oleh Alpha Beta Pruning pada permainan congklak.
3. Implementasi Sistem Pada tahap ini akan dilakukan pengkodean dan menerapkan perancangan aplikasi tersebut ke dalam bahasa pemrograman. Pengkodean dilakukan dengan pemrogramana C++ yang kemudian dikonversi untuk digunakan pada perangkat lunak Eclipse, sehingga akan dihasilkan sebuah mobile aplication berbasis Android.
4. Pengujian Sistem Pada tahap ini akan dilakukan pengujian terhadap aplikasi apakah berjalan sesuai dengan tujuan penelitian atau tidak.
5. Dokumentasi Sistem Pada tahap ini akan dilakukan penulisan laporan mengenai aplikasi tersebut yang bertujuan untuk menunjukkan hasil penelitian ini.
Universitas Sumatera Utara
5
1.7
Sistematika Penulisan
Adapun sistematika penulisan dalam skripsi ini terdiri dari beberapa bagian utama sebagai berikut :
BAB 1 PENDAHULUAN
Bab ini berisi uraian latar belakang pemilihan judul skripsi “Aplikasi Permainan Congklak Berbasis Android Menggunakan Algoritma Minimax ”, rumusan masalah, batasan masalah, tujuan, manfaat, metodologi, serta sistematika penulisan.
BAB 2 LANDASAN TEORI
Pada bab ini dijelaskan mengenai dasar-dasar teori, rujukan dan metode yang digunakan sebagai dasar dan alat untuk menyelesaikan permasalahan.
BAB 3 ANALISIS DAN PERANCANGAN APLIKASI
Bab ini berisi analisis algoritma Minimax yang dioptimasi dengan Alpha Beta Pruning dalam permainan congklak dan perancangan aplikasi.
BAB 4 IMPLEMENTASI DAN PENGUJIAN APLIKASI
Bab ini menjelaskan implementasi dari hasil analisis dan perancangan aplikasi serta pengujian aplikasi.
BAB 5 KESIMPULAN DAN SARAN
Pada bab terakhir akan diuraikan kesimpulan dari seluruh bab-bab sebelumnya dan hasil penelitian yang diperoleh. Pada bab ini juga memuat saran yang diharapkan dapat bermanfaat untuk pengembangan selanjutnya.
Universitas Sumatera Utara
6
BAB 2
LANDASAN TEORI
2.1 Kecerdasan Buatan
Menurut Rich and Knight (1991) kecerdasan buatan atau Artificial Intelligence merupakan suatu proses belajar mengenai cara membuat komputer melakukan hal-hal yang pada saat itu dapat dilakukan lebih baik oleh manusia. Selain itu definisi kecerdasan buatan menurut Jogiyanto H (2000) didefinisikan sebagai suatu mesin atau alat pintar (biasanya adalah suatu komputer) yang dapat melakukan suatu tugas yang bilamana tugas tersebut dilakukan oleh manusia akan dibutuhkan suatu kepintaran untuk melakukannya.
Menurut Sri Kusumadewi (2003), kecerdasan buatan jika dibandingkan dengan kecerdasan alami memiliki beberapa keuntungan, antara lain: a. Kecerdasan buatan lebih bersifat permanen dan konsisten, karena kecerdasan alami hanya bergantung kepada ingatan manusia, yang mungkin saja menjadi lupa pada waktu tertentu. Sedangkan kecerdasan buatan bergantung pada sistem komputer dan program dari aplikasi kecerdasan buatan tersebut, sehingga selama aplikasi dan sistem komputer tidak berubah maka kecerdasan buatan tersebut tidak akan berubah. b. Kecerdasan buatan lebih mudah diduplikasi dan disebarkan karena berupa sistem, sehingga dengan mudah memindahkan pengetahuan yang ada pada sistem tersebut dari suatu komputer ke komputer lain. Sedangkan kecerdasan alami sulit diduplikasi karena menyampaikan pengetahuan dari satu orang ke orang lain lebih sulit untuk dilakukan. Selain membutuhkan proses yang sangat lama, juga diperlukan suatu keahlian khusus untuk menyampaikannya dan
Universitas Sumatera Utara
7
tidak semua orang dapat menyampaikan hal yang sama persis dari satu orang ke orang lain. c. Kecerdasan buatan lebih murah dan cepat dibandingkan dengan kecerdasan alami. Menyediakan layanan komputer akan lebih mudah dan lebih murah dibandingkan harus mendatangkan seseorang untuk mengerjakan sejumlah pekerjaan dalam jangka waktu yang lama. d. Kecerdasan buatan dapat didokumentasikan dengan mudah. Keputusan yang dibuat oleh komputer dapat didokumentasikan lebih mudah dengan cara melacak setiap aktivitas dari sistem tersebut. Sedangkan kecerdasan alami sulit didokumentasikan karena manusia selalu berubah dan sulit untuk melacak setiap aktivitas yang berhubungan dengan kasus yang sedang dikerjakan serta membutuhkan waktu lama dalam pelacakan tersebut.
Sedangkan kecerdasan alami memiliki keuntungan sebagai berikut: a. Kecerdasan alami bersifat kreatif yaitu kemampuan untuk kerkreasi yang melekat pada manusia. Kecerdasan buatan belum mampu berkreasi sendiri. b. Kecerdasan alami memungkinkan manusia menggunakan pengalaman secara langsung. Sedangkan kecerdasan buatan bekerja berdasarkan input yang dimasukkan oleh pengguna dan bentuk dari inputan tersebut berupa kode-kode tertentu yang telah ditentukan pada awal pembutan sistem. c. Manusia dapat memanfaatkan kecerdasannya secara luas, tanpa batas. Sedangkan kecerdasan buatan memiliki batasan.
2.1.1 Penggunaan Kecerdasan Buatan di berbagai Bidang
Kecerdasan buatan merupakan suatu hal yang dikembangkan pada sebuah sistem oleh para ahli untuk masa depan. Beberapa bidang perkembangan kecerdasan buatan ini adalah sebagai berikut, yaitu (Kusumadewi, 2003): 1. Expert System (Sistem Pakar) Sistem pakar ( Expert System) adalah program penasehat berbasis komputer yang mencoba meniru proses berpikir dan pengetahuan dari seorang pakar dalam menyelesaikan masalah-masalah spesifik. Contohnya adalah sistem
Universitas Sumatera Utara
8
pakar menentukan suatu jenis penyakit, sistem pakar untuk bisnis dan sebagainya.
2. Robotik dan Sistem Sensor Sistem sensor, seperti sistem vision, sistem tactile, dan sistem pemrosesan sinyal jika dikombinasikan dengan AI, dapat dikategorikan kedalam suatu sistem yang luas yang disebut sistem robotik.
3. Permainan (Games) Game playing (permainan game) merupakan bidang AI yang sangat populer berupa permainan antara manusia melawan mesin yang memiliki intelektual untuk berpikir. Bermain dengan komputer memang menarik bahkan sampai melupakan tugas utama yang lebih penting. Komputer dapat bereaksi dan menjawab tindakan-tindakan yang diberikan oleh lawan mainnya. Banyak permainan komputer telah dibuat dan dikembangkan. Sebagai contohnya adalah permainan catur.
4. Bahasa Ilmiah ( Natural Languange) Suatu teknologi yang memberikan kemampuan kepada komputer untuk memahami bahasa manusia sehingga pengguna komputer dapat b erkomunikasi dengan komputer dengan menggunakan bahasa sehari-hari. Bahasa computer yang khusus pada bidang ini adalah LISP, INTERLISP, SAIL, PLANNER, KRL, PROLOG.
5. Pemodelan Kinerja ( Performance) Manusia Pemodelan kinerja manusia telah terbukti merupakan alat yang sangat bermanfaat dalam merumuskan dan menguji teori-teori penerapan inderawi manusia.
Universitas Sumatera Utara
9
2.2 Game (Permainan)
Game merupakan aktivitas terstruktur yang biasanya bertujuan dalam mendapatkan kesenangan dan bahkan digunakan sebagai suatu edukasi. Menurut Salen & Zimmerman (2003) game merupakan suatu sistem yang memiliki aturan-aturan tertentu dimana pemain akan terlibat di dalam suatu permasalahan sehingga dapat menghasilkan suatu hasil yang dapat diukur yaitu menang atau kalah. Game umumnya melibatkan stimulasi mental atau fisik, dan terkadang kedua-duanya. Banyak game membantu mengembangkan keterampilan praktis, berfungsi sebagai bentuk latihan, atau melakukan peran pendidikan, simulational , atau psikologis.
2.2.1 Teori Game
Teori permainan adalah suatu cara belajar yang digunakan dalam menganalisa interaksi antara sejumlah pemain maupun perorangan yang menunjukkan strategistrategi rasional (Leyton-Brown & Shoham, 2008).
Teori permainan dapat diklasifikasikan kedalam beberapa bagian, yaitu: a. Number of Players Hampir semua jenis permainan papan yang memiliki sistem pencarian langkah berbasis algoritma pada AI hanya memiliki dua pemain. Sebagian besar bentuk dasar dari algoritma-algoritma tersebut hanya terbatas untuk dua pemain.
b. Plies, Move and Turns Suatu hal umum dalam teori permainan adalah giliran (turns) seorang pemain sebagai suatu lapisan ( ply) didalam suatu permainan dan pemain yang melakukan gilirannya dalam satu putaran disebut langkah (move).
c. The Goal of the Game Tujuan umum permainan berbasis strategi adalah untuk menang. Sebagai pemain, pemain menang jika semua lawan pemain kalah. Hal ini dikenal sebagai permainan zero-sum, yaitu kemenangan pemain adalah kekalahan pemain lain. Jika pemain mencetak 1 poin untuk menang, maka akan setara
Universitas Sumatera Utara
10
dengan mencetak -1 poin untuk kalah. Untuk kasus permainan non-zero-sum, semua bisa menang atau semua bisa kalah, pemain hanya akan fokus pada kemenangan.
d. Information Dalam permainan papan seperti catur, Checkers, Go, dan Reversi, kedua pemain mengetahui segala sesuatu tentang kondisi dalam permainan. Pemain mengetahui hasil dari setiap gerakan yang dilakukan dan pilihan yang akan dilakukan pemain untuk langkah berikutnya. Pemain mengetahui semua ini dari awal permainan. Jenis permainan ini disebut "informasi yang sempurna".
Sedangkan dalam sebuah permainan seperti Backgammon, terdapat unsur acak di dalamnya. Pemain sebelumnya tidak mengetahui langkah yang dapat diambil oleh pemain karena langkah tersebut bergantung pada nilai dadu yang dimainkan pemain. Pemain juga tidak dapat mengetahui langkah yang dapat diambil oleh lawan, karena pemain tidak dapat memprediksi nilai dadu lawan. Jenis permainan ini disebut “informasi yang tidak sempurna”.
Kebanyakan permainan berbasis strategi merupakan “informasi yang tidak sempurna”, karena terdapat beberapa unsur acak dalam melakukan suatu tindakan. Permainan
dengan
“informasi
yang
sempurna”
akan
lebih
mudah
untuk
dianalisa. Banyak algoritma dan teknik untuk permainan berbasis AI berasumsi bahwa terdapat informasi yang sempurna yang dapat disesuaikan untuk jenis permainan lain, tetapi biasanya hasil yang diperoleh akan menjadi lebih buruk (Millington & Funge, 2009).
2.2.2 Klasifikasi Game
Gameplay
merupakan
alat
dan
aturan-aturan
yang
mendefinisikan
konteks
keseluruhan permainan sehingga pada saat gilirannya, menghasilkan keterampilan, strategi, dan kesempatan (Bakri, 2010).
Pengelompokan game berdasarkan media permainannya, yaitu (Bakri, 2010):
Universitas Sumatera Utara
11
1. Board Games Board games merupakan permainan yang menggunakan sebuah media papan sebagai alat atau tempat untuk berinteraksi dan melakukan sebuah permainan . Biasanya permainan ini dilakukan dengan menggunakan strategi untuk memenangi permainan tersebut. Contohnya: Catur, Congklak, dll.
2. Card Games Card games merupakan permainan yang menggunakan satu set kartu sebagai alat utama permainan. Permainan ini biasanya diawali dengan pengacakan kartu
sehingga
membutuhkan
kesempatan
dan
keberuntungan
untuk
memenangi permainan ini. Contohnya: permainan kartu Uno, permainan Poker, permainan Spider Solitare dan sebagainya.
3. Dice Games Dice games merupakan permainan dadu sebagai elemen utama permainan. Permainan dilakukan dengan cara mengacak angka dadu kemudian angka dadu inilah yang menjadi dampak kemungkinan besar kemenangan permainan ini. Contohnya: Ludo, dadu Poker dan sebagainya.
4. Domino and Tile Games Domino and tile games merupakan permainan yang menggunakan kartu berbentuk ubin sebagai alat permainannya. Permainan ini mirip dengan permainan kartu. Contohnya: Domino dan Mahjong. 5. Pencil and Paper Games Pencil and paper games merupakan suatu permainan yang memerlukan media kertas untuk menggambar arena permainan dan pensil untuk menulis langkah permainan tersebut. Contohnya, Scrabble, Tic-tac-toe, Sudoku dan sebagainya.
Universitas Sumatera Utara
12
2.3 Permainan Congklak
Congklak merupakan suatu permainan tradisional dari Indonesia yang dimainkan oleh dua orang pemain. Permainan ini dimainkan dengan menggunakan sebuah papan yang disebut papan congklak dan 98 (14 x 7) buah biji yang dinamakan biji congklak. Papan congklak terdiri dari 14 lubang kecil dan dua lubang besar (lumbung) yang terdapat di masing-masing ujung papan.
Gambar 2.1 Papan Congklak
2.3.1 Sejarah Permainan Congklak
Congklak adalah permainan tradisional Indonesia yang berasal dari Arab. Permainan ini dibawa oleh orang-orang Arab ketika mereka berkunjung ke Indonesia untuk berdagang beberapa abad yang lalu. Mereka membawa kebudayaaan, agama, bahasa, makanan, tekstil, permainan, dan lain-lain untuk Indonesia (Pribadi, 2011). Congklak memiliki banyak nama di setiap wilayah di Indonesia. Nama-nama yang diberikan sesuai dengan kebudayaan masing-masing daerah. Nama yang paling umum adalah congklak. Permainan ini disebut Congkak di Sumatera. Di Jawa, permainan ini dikenal sebagai Congklak, Dakon, Dhakon atau Dhakonan. Di Lampung, permainan ini disebut Dentuman lamban. Dan untuk orang Sulawesi, permainan ini disebut Mokaotan, Maggaleceng, Aggacalang dan Nogarata.
Sejarah permainan congklak berawal dari permainan yang dimainkan oleh gadis-gadis bangsawan muda di Jawa. Kemungkinan besar pedagang asing
Universitas Sumatera Utara
13
berhubungan dekat dengan kelas atas kemudian memperkenalkan congklak kepada mereka. Dengan berjalannya waktu, popularitas congklak tumbuh sampai sekarang dan banyak dimainkan oleh kalangan umum juga (Pri badi, 2011).
Terdapat beragam versi dari permainan tradisional congklak. Di Malaysia congklak terkenal dengan nama congkak, sedangkan orang Afrika, Arab, Jepang, dan Inggris lebih mengenal jenis permainan ini dengan nama Mancala. Inti permainan congklak di berbagai negara memiliki kesamaan satu sama lain, yaitu memindahkan sebanyak-banyaknya biji milik sendiri dan milik lawan untuk dimasukkan ke dalam lubang besar (lumbung) milik sendiri. Tentunya pemain yang mengumpulkan biji terbanyak pada lumbung miliknya akan memenangkan permainan. Hal yang membedakan congklak di setiap negara adalah peraturan permainan, jumlah biji, dan jumlah lubang yang digunakan.
2.3.2 Aturan Permainan Congklak
Secara umum, aturan permainan congklak tidak jauh berbeda dengan permainan Mancala. Kedua permainan ini menggunakan media yang sama. Tetapi terdapat sedikit perbedaan dari kedua jenis permainan ini yaitu arah pergerakan permainan. Pada permainan congklak, arah pergerakan permainan dilakukan mengikuti arah jarum jam sedangkan Mancala berlawanan arah ja rum jam. Selain itu, pada permainan congklak apabila biji yang ditangan telah habis dan jatuh pada lubang kecil yang berisi biji lainnya, maka giliran pemain tersebut dapat dilanjutkan sedangkan pada Mancala tidak. Untuk lebih jelasnya, peraturan permainan congklak adalah sebagai berikut (Bakri, 2010): 1. Papan congklak terdiri dari 2 lubang besar (lumbung) dan 14 lubang kecil. 2. Pada awal permainan, setiap lubang kecil diisi dengan tujuh buah biji congklak. 3. Permainan dimulai dengan suit untuk menentukan giliran pe rtama. 4. Pemain yang mendapat giliran pertama dapat memilih lubang yang akan dijalankan. Kemudian menjatuhkan biji congklak satu per satu ke setiap lubang dengan mengikuti arah jarum jam.
Universitas Sumatera Utara
14
5. Giliran pemain akan tetap berlanjut jika memenuhi kondisi berikut: a. Apabila biji congklak di tangan habis di lumbung miliknya maka ia dapat melanjutkan dengan memilih lubang kecil di sisinya. b. Apabila biji congklak di tangan habis di lubang kecil yang berisi biji lainnya, ia dapat melanjutkan permainan. 6. Giliran pemain akan berakhir apabila biji habis di lubang kecil yang kosong pada daerah permainan sendiri atau lawan. Jika biji jatuh di daerah permainan sendiri dan di hadapannya terdapat lubang berisi biji, maka ia dapat mengambil seluruh biji di lubang tersebut (biji sisi lawan). Proses ini dinamakan “tembak ”. 7. Permainan selesai apabila sudah tidak ada biji lagi yang dapat diambil atau salah satu arena pada lubang kecil tidak berisi biji lagi. Apabila biji di salah satu arena sudah habis, maka biji yang tersisa di arena lainnya di masukkan seluruhnya ke lumbung miliknya. 8. Pemain yang memiliki biji lebih banyak pada lumbung miliknya akan keluar sebagai pemenang.
2.4 Teknik Pencarian (Searching)
Pencarian merupakan suatu proses menemukan solusi yang tepat dari suatu permasalahan (Russell & Norvig, 2010).
Evaluasi strategi pencarian memiliki empat kriteria: 1. Completeness: Apakah strategi tersebut menjamin menemukan solusi jika solusinya memang ada? 2. Time complexity: Berapa lama waktu yang diperlukan untuk menemukan solusi? 3. Space complexity: Berapa banyak memori yang diperlukan untuk melakukan pencarian? 4. Optimality: Apakah strategi tersebut menemukan solusi yang paling baik jika terdapat beberapa solusi berbeda pada permasalahan yang ada?
Universitas Sumatera Utara
15
Di dalam kecerdasan buatan, metode pencarian sangat menentukan tingkat keberhasilan sistem cerdas tersebut. Teknik pencarian ini terbagi atas 2, yaitu pencarian buta (blind search) dan pencarian heuristik (heuristic search). Pencarian buta merupakan pencarian yang penelusurannya dimulai dengan tidak ada informasi awal yang digunakan dalam proses pencarian. Contohnya adalah Breadth-FirstSearch (BFS) dan Depth-First-Search (DFS). Sedangkan pencarian heuristik merupakan pencarian yang penelusurannya dimulai dengan adanya informasi awal yang digunakan dalam proses pencarian. Contohnya adalah Hill Climbing, Tabu Search, Genetic Algorithm, Ant Algorithm dan Simulated Annealing (Kusumadewi & Purnomo, 2005).
2.5 Algoritma Depth-First Search (DFS)
Depth-First Search (DFS) merupakan algoritma pencarian yang paling umum digunakan. DFS akan melakukan pencarian pada sebuah pohon dengan cara menelusuri satu cabang sebuah pohon sampai menemukan solusi. Pencarian dilakukan pada satu node dalam setiap level dari yang paling kiri. Jika pada level yang paling dalam, solusi belum ditemukan, maka pencarian dilanjutkan pada node sebelah kanan. Node yang kiri dapat dihapus dari memori. Jika pada level yang paling dalam tidak ditemukan solusi, maka pencarian dilanjutkan pada level sebelumnya. Demikian seterusnya sampai ditemukan solusi. Jika solusi ditemukan maka tidak diperlukan proses backtracking yaitu penelusuran balik untuk mendapatkan jalur yang diinginkan (Cormen et al., 2009).
Gambar 2.2 Penelusuran pohon permainan dengan DFS (Coppin, 2004)
Universitas Sumatera Utara
16
Pada Gambar 2.2 dapat diketahui bahwa proses penelusuran DFS dimulai dari A-B-D-G-D-H-D-B-A-C-E-I-E-J. A merupakan root yang menandakan keadaan belum diambil, lalu ditelusuri hingga kedalaman yang paling dalam sebelah kiri yaitu G, lalu melakukan proses backtrack ke D lalu lanjut lagi ke H. Proses tersebut berhenti karena telah mencapai goal state yaitu leaf node J.
Langkah-langkah cara kerja algoritma DFS adalah sebagai berikut: 1. Masukkan root ke dalam struktur data tumpukan ( stack ). 2. Ambil simpul dari tumpukan teratas, dan diperiksa apakah simpul merupakan solusi. 3. Jika simpul merupakan solusi, maka pencarian selesai dan hasil dikembalikan. 4. Jika simpul bukan solusi, masukkan seluruh simpul yang bertetangga dengan simpul tersebut ke dalam tumpukan. 5. Jika tumpukan kosong dan setiap simpul sudah ditelusuri, pencarian selesai dan solusi tidak ditemukan. 6. Ulangi pencarian dari poin kedua.
2.6 Algoritma Minimax
Algoritma Minimax ialah suatu metode yang sangat bermanfaat untuk permainan dua pemain sederhana. Metode ini digunakan untuk memilih langkah terbaik yang diberikan, dimana kedua pemain saling berusaha untuk memenangkan permainan. Setiap pemain mengetahui langkah-langkah yang mungkin diberikan pada situasi permainan saat ini. Sehingga untuk setiap langkah dan semua langkah selanjutnya akan dapat diketahui (M. Tim Jones, 2008). Minimax merupakan algoritma yang digunakan untuk menentukan pilihan agar memperkecil kemungkinan kehilangan nilai maksimal.
Algortima Minimax dapat menghasilkan pilihan langkah yang baik dengan mengasumsikan bahwa pemain lawan akan selalu memilih langkah terbaik untuk dirinya dan langkah terburuk bagi komputer. Prinsip dasar pada algoritma Minimax ini adalah jalur yang akan dipilih oleh komputer merupakan jalur maksimum ( max
Universitas Sumatera Utara
17
node) yang akan menghasilkan nilai maksimum di jalur tersebut, dan saat lawan yang akan bermain akan meminimalkan (min node) nilai komputer. Jadi, komputer bertujuan untuk memaksimalkan kemungkinan nilai paling rendah yang akan diperoleh komputer.
Jika pemain memilih suatu langkah, maka pemain akan memilih langkah yang akan menghasilkan suatu posisi yang bagus. Kita dapat menganggap bahwa pemain akan memilih langkah yang akan menuntunnya pada posisi terbaik. Dengan kata lain, ketika pemain mendapat giliran bermain maka pemain akan mencoba memaksimalkan nilainya. Ketika lawan mendapat giliran bermain, pemain akan mengganggap bahwa lawan akan memilih langkah yang akan memberikan pemain posisi terburuk yang tersedia. Lawan sedang berusaha meminimalkan nilai dari pemain. Untuk proses dan cara kerja algoritma Minimax yang lebih jelas, dapat dilihat pada gambar berikut: Level 0
Level 1
Level 2
Gambar 2.3 Cara kerja algoritma Minimax (Coppin, 2004)
Langkah-langkah cara kerja algoritma Minimax adalah sebagai berikut: 1. Hampiri node pertama pada leaf dengan nilai 5, naik ke parent pada level 2 (MAX) masukkan nilai 5, hampiri 2. Karena 2<5 maka nilai parent tidak perlu diganti. 2. Setelah kedua leaf pertama dihampiri, naik lebih tinggi lagi ke level 1 (MIN) masukkan nilai 5. 3. Hampiri node ketiga pada leaf dengan nilai 1, naik ke parent pada level 2 (MAX) masukkan nilai 1. Kemudian hampiri leaf keempat dengan nilai 3. Karena 3>1 maka ganti parent pada level 2 (MAX) dengan nilai 3. 4. Karena 3<5 maka ganti parent pada level 1 (MIN) dengan nilai 3.
Universitas Sumatera Utara
18
5. Setelah keempat leaf pertama dihampiri, naik lebih tinggi lagi ke level 0 (MAX) masukkan nilai 3. 6. Begitu seterusnya hingga kita dapatkan hasil akhir dari tree di atas adalah 6.
2.7 Algoritma Alpha Beta Pruning
Pada dasarnya, algoritma Minimax sangat handal untuk menyelesaikan segala masa lah dalam pencarian langkah untuk permainan komputer dengan jumlah kemungkinan penyelesaian yang kecil. Tetapi, jika algoritma Minimax digunakan pada permainan dengan jumlah kemungkinan penyelesaian yang besar, algoritma Minimax ini memerlukan waktu yang sangat lama untuk membangun pohon penyelesaian.
Oleh karena itu, beberapa metode lanjutan dari algoritma Minimax telah dikembangkan untuk membatasi melonjaknya jumlah simpul dalam pembangunan pohon penyelesaian. Berbagai jenis metode telah ditemukan untuk meningkatkan kinerja algoritma Minimax, salah satunya adalah Alpha Beta Pruning . Dengan menggunakan metode ini maka diharapkan sistem dapat bekerja lebih baik. Untuk proses dan cara kerja algoritma Alpha Beta Pruning yang lebih jelas, dapat dilihat pada gambar berikut: Level 0
Level 1
Level 2
Gambar 2.4 Cara kerja algoritma Al pha Beta Prun in g (Tyugu, 2007)
Universitas Sumatera Utara
19
Langkah-langkah cara kerja algoritma Alpha Beta Pruning adalah sebagai berikut: 1. Hampiri node pertama pada leaf dengan nilai 4, naik ke parent pada level 2 (MAX) masukkan nilai 4, hampiri 1. Karena 1<4 maka nilai parent tidak diganti. 2. Setelah kedua leaf pertama dihampiri, naik lebih tinggi lagi ke level 1 (MIN) masukkan nilai 4. 3. Hampiri node ketiga pada leaf dengan nilai 8, naik ke parent pada level 2 (MAX) masukkan nilai 8. Jika kita menghampiri leaf berikutnya, kita mencari nilai yang lebih tinggi dari 8, sementara pada level 1 (MIN) kita mencari yang lebih kecil dari 4. Maka leaf keempat (5) kita potong (tidak kita hampiri). 4. Setelah keempat leaf pertama dihampiri, naik lebih tinggi lagi ke level 0 (MAX) masukkan nilai 4. 5. Begitu seterusnya hingga kita dapatkan hasil akhir dari tree di atas adalah 4.
2.8 Android
Menurut Ed Burnette (2009), Android adalah sistem operasi untuk Mobile atau telepon seluler yang berbasis Linux. Android menyediakan platform terbuka bagi para pengembang buat menciptakan aplikasi mereka sendiri untuk digunakan oleh bermacam perangkat Mobile. Awalnya, Google Inc. membeli Android Inc. Pada saat perilisan perdana Android pada tanggal 5 November 2007, Android bersama Open Handset Alliance menyatakan mendukung pengembangan standar terbuka pada perangkat seluler. Di lain pihak, Google merilis kode-kode Android di bawah lisensi Apache, sebuah lisensi perangkat lunak dan standar terbuka perangkat seluler.
Untuk bergerak cepat dalam persaingan perangkat generasi berikut, Google melakukan investasi dengan mengadakan kompetisi aplikasi Mobile terbaik. Kompetisi diadakan selama dua tahap yang tiap tahapnya dipilih 50 aplikasi t erbaik.
Dengan semakin berkembangnya dan semakin bertambahnya jumlah handset Android, semakin banyak pihak ketiga yang berminat untuk menyalurkan aplikasi mereka kepada sistem operasi Android. Aplikasi terkenal yang diubah ke dalam
Universitas Sumatera Utara
20
sistem operasi Android adalah Shazam, Backgrounds, dan WeatherBug. Sistem operasi Android dalam situs internet juga dianggap penting untuk menciptakan aplikasi Android asli, contohnya MySpace dan Facebook.
2.8.1 Arsitektur Android
Secara garis besar, Arsitektur Android terbagi menjadi 5 komponen utama, yaitu Application and Widgets, ApplicationFramework, Libaries, Android Runtime, dan Linux Kernel.
Gambar 2.5 Komponen utama Arsitektur Android (Hoog, 2011)
Diagram arsitektur pada Gambar 2.5 menunjukkan bahwa komponen utama arsitektur Android dibagi menjadi lima bagian, yaitu:
1. Applications and Widgets adalah layer di mana kita berhubungan dengan aplikasi saja, di mana biasanya kita download aplikasi kemudian kita lakukan instalasi dan jalankan aplikasi tersebut. Pada layer tersebut terdapat aplikasi inti seperti email , SMS, kalender, peta, browser, kontak, dan lain sebagainya. Widgets terdiri dari layer-layer seperti EditText, Spinner, Button, TextView, dan lain-lain.
Universitas Sumatera Utara
21
2. Applications Frameworks Android merupakan platform yang terbuka, artinya Android menawarkan serta memberikan kemampuan kepada para pengembangnya untuk membangun aplikasi yang bagus dan inovatif. Tiap pengembang bebas untuk mengakses perangkat keras, akses informasi resources, menjalankan service background , mengatur alarm, dan lain-lain. Pengembang memiliki akses penuh ke API Framework seperti yang dilakukan oleh aplikasi inti. Arsitektur aplikasi dirancang agar kita dengan mudah dapat menggunakan kembali komponen yang sudah digunakan ( reusable). Komponen pada Applications Frameworks Android adalah sebagai berikut: a. Views b. Content Provider c. Resource Manager d. Notification Manager e. Activity Manager
3. Libraries Merupakan layer di mana fitur-fitur Android berada, biasanya para pengembang aplikasi mengakses libraries untuk menjalankan aplikasinya. Berjalan di atas kernel, layer ini meliputi berbagai library C/C++ inti seperti Lib-C dan SSL, serta: - Libraries media untuk pemutaran media audio dan video - Libraries untuk manajemen tampilan - Libraries Graphics mencakup SGL dan OpenGL untuk grafis 2Ddan 3D - Libraries SQLite untuk dukungan database - Libraries SSL dan WebKit terintegrasi dengan web browser dan security - Libraries LiveWebcore mencakup modern web browser dengan engine embeded web view - Libraries 3D yang mencakup implementasi API OpenGL ES 1.0
4. Android Runtime Merupakan layer yang membuat aplikasi Android dapat dijalankan di mana dalam prosesnya menggunakan implementasi
Linux. Dalvik Virtual Machine (DVM)
merupakan mesin yang membentuk dasar kerangka aplikasi Android. Di dalam android runtime dibagi menjadi dua bagian yaitu:
Universitas Sumatera Utara
22
-
Core Libraries: Aplikasi Android dibangun dalam bahasa Java,sementara Dalvik sebagai mesin virtualnya, bukan JVM ( Java Virtual Machine). Sehingga dibutuhkan sebuah libraries yang berfungsi untuk menerjemahkan bahasa Java/C yang ditangani oleh Core Libraries ini.
- Dalvik Virtual Machin: Virtual mesin yang berbasis register yang dioptimalkan untuk
menjalankan
fungsi-fungsi
secara
efisien,
di
mana
merupakan
pengembangan yang mampu membuat Linux kernel untuk melakukan threading dan manajemen tingkat rendah
5. Linux Kernel Adalah layer dimana inti dari sistem operasi Android itu berada. Berisi file-file sistem yang mengatur pemrosesan sistem, memory, resource, drivers, dan sistem-sistem operasi Android lainnya. Linux kernel yang digunakan Android adalah Linux kernel rilis 2.6
2.8.2 Versi Android
Adapun versi-versi Android yang pernah dirilis adalah sebagai berikut:
Tabel 2.1 Versi-versi Android Platform
Nama Kode
Tanggal Rilis
Level API
Android 1.0
Apple Pie
23 September 2008
1
Android 1.1
Banana Bread
9 Februari 2009
2
Android 1.5
Cupcake
30 April 2009
3
Android 1.6
Donut
15 September 2009
4
26 Oktober 2009
5
3 Desember 2009
6
12 Januari 2010
7
20 May 2010
8
6 December 2010
9
Android 2.0 Android 2.0.1
Eclair
Android 2.1 Android 2.2 Android 2.3 – Andoroid 2.3.2 Android 2.3.3 – Android 2.3.7
Froyo
Gingerbread
10
Universitas Sumatera Utara
23
Platform
Nama Kode
Android 3.0 Android 3.1
Tanggal Rilis
Level API
22 February 2011
11
Honeycomb
12
Android 3.2 Android 4.0 – Android 4.0.2
13 Ice Cream Sandwich
19 October 2011
Andorid 4.0.3
15
Android 4.0.4 Android 4.1
14
Jelly Bean
28 Maret 2012
15
27 Juni 2012
16
Dari Tabel 2.1 dapat dilihat pada setiap perubahan versi android terdapat perubahan API Level. API Level adalah nilai yang menunjukkan revisi framework pada platform Android. Nomor versi android yang terus berubah dikarenakan perubahan API Level. Setiap versi android mendukung tepat satu API Level, namun tetap mendukung API Level sebelumnya. API Level akan menentukan apakah suatu aplikasi bisa dijalankan pada suatu platform Android atau tidak.
2.9 Penelitian Sebelumnya
Pencarian solusi pada permainan congklak sudah pernah dilakukan dengan menggunakan beberapa metode, diantaranya Implementasi Algoritma Greedy Pada Permainan Congklak (Adha, 2009) dan Analisis dan Implementasi Algoritma Backtracking Pada Permainan Congklak (Bakri, 2010). Algoritma Minimax juga sudah pernah diimplementasikan untuk menyelesaikan permainan , diantaranya Analisis
dan
Implementasi
Kecerdasan
Buatan
Pada
Permainan
Checker
Menggunakan Algoritma Minimax Dengan Negascout (Akbar, 2011) dan Algoritma Minimax Dalam Pengambilan Keputusan Pada Permainan Tic-Tac-Toe (Akbar, 2007).
Universitas Sumatera Utara
24
Tabel 2.2 Penelitian Sebelumnya No
Judul
Pengarang
Tahun
Keterangan
1
Implementasi Algoritma Greedy Pada Permainan Congklak
Ripandy Adha
2009
Algoritma Greedy dapat memecahkan masalah optimum, namun tidak selalu menghasilkan solusi yang optimum.
2
Analisis dan Implementasi Algoritma Backtracking Pada Permainan Congklak
Adhhal Huda Bakri
2010
Algoritma ini secara sistematis mencari solusi persoalan diantara semua kemungkinan solusi yang ada. Namun langkah yang diambil belum tentu merupakan langkah yang terbaik, sehingga memungkinkan terjadi terlalu banyak backtracking yang harus dilakukan.
3
Analisis dan Implementasi Kecerdasan Buatan Pada Permainan Checker Menggunakan Algoritma Minimax Dengan Negascout
Muhammad Aidil Akbar
2011
Algoritma Minimax kurang efesien apabila digunakan secara tunggal sehingga perlu dilakukan pemotongan dengan Negascout. Pemotongan pada Negascout dapat meminimalkan waktu yang diperlukan sistem dalam melakukan pencarian.
4
Algoritma Minimax Dalam Pengambilan Keputusan Pada Permainan TicTac-Toe
Khoirush Sholih Ridhwaana Akbar
2007
Algoritma Minimax bekerja secara rekursif dengan mencari langkah yang akan membuat lawan mengalami kerugian minimum. Semua strategi lawan akan dihitung dengan algoritma yang sama dan seterusnya.
.
.
Universitas Sumatera Utara
25
BAB 3
ANALISIS DAN PERANCANGAN APLIKASI
Kecerdasan buatan atau Artificial Intelligence (AI) merupakan bagian dari ilmu pengetahuan yang penting dalam bidang komputer. Banyak permainan komputer yang memanfaatkan kecerdasan buatan untuk membuat permainan tersebut bertindak cerdas dengan memilih langkah terbaik pada permainan. Tetapi banyak orang yang memainkan permainan tersebut tidak mengerti cara kerja dari kecerdasan buatan itu sendiri. Oleh karena itu, penulis mencoba membuat suatu aplikasi permainan congklak yang memiliki kecerdasan buatan yaitu dengan menggunakan algoritma Minimax yang dioptimasi oleh Alpha Beta Pruning dan menjelaskan cara kerja algoritma tersebut pada permainan congklak.
3.1 Analisis Algoritma
Pada bab sebelumnya telah dijelaskan tentang algoritma Minimax dan cara kerjanya secara umum. Pada bab ini, penulis akan menjelaskan tentang penerapan algoritma Minimax yang dioptimasi dengan Alpha Beta Pruning pada permainan congklak yang akan dirancang. Tetapi sebelum membahas analisis algoritma Minimax dan Alpha Beta Pruning penulis akan membahas analisis algoritma permainan congklak terlebih dahulu.
3.1.1 Analisis Algoritma Permainan Congklak
Permainan congklak adalah permainan dengan 2 orang pemain, menggunakan biji dengan arena permainan umumnya memiliki 16 buah lubang tempat biji diletakkan, dimana 2 lubang merupakan lumbung (lubang penyimpanan) milik masing-masing pemain. Tujuan dari permainan congklak adalah memasukkan biji sebanyak-
Universitas Sumatera Utara
26
banyaknya di lumbung milik sendiri. Dalam bermain congklak terdapat 2 kriteria yang diutamakan. Adapun kriteria yang dimaksud adalah sebagai berikut:
1. Pemilihan langkah free turn. Langkah free turn merupakan langkah dimana pemain dapat melakukan langkah selanjutnya karena telah memasukkan biji terakhir yang berada di tangan ke dalam lumbung. Langkah ini diutamakan dalam permainan congklak karena pemain dapat terus melanjutkan permainan. Berikut ini adalah contoh gambar keadaan papan congklak untuk menemukan langkah free turn.
B7
B6
B5
B4
B3
B2
B1
7
7
7
7
7
7
7
L1 0
L2 0
7
7
7
7
7
7
7
A1
A2
A3
A4
A5
A6
A7
Gambar 3.1 Keadaan papan congklak untuk menemukan langkah fr ee tur n
Dari gambar di atas, hasil dari penelusuran pohon permainan adalah memilih lubang B7. Karena jika biji pada lubang B7 dijalankan akan berhenti pada lumbung dan dapat melakukan langkah selanjutnya ( free turn). Berikut ini adalah gambar pohon permainan untuk menemukan langkah free turn pada congklak:
Universitas Sumatera Utara
27
B2
B1 (0,7)
(0,7) A2
A1
(1,8)
(1,8)
B3 (0,7) A3 (1,8)
B4 (0,7) A4 (1,8)
B5 (0,7)
(0,7) A6
A5 (1,8)
B2
B3
B4
B5
B6
(1,0) T(9)
(1,0) T(9)
(1,0) T(9)
(1,0) T(9)
(1,0) T(9)
(1,0) T(9)
(10) L2
(10) L2
(10) L2
(10) L2
(0,7) (7)
L2
(1,8)
B1
(10) L2
B7
B6
(10) L2
Gambar 3.2 Pohon permainan untuk menemukan langkah fr ee tur n
Keterangan: A1-A7 : merupakan daerah permainan Player 1 B1-B7 : merupakan daerah permainan Player 2. Pada permainan Single Player yang bertindak sebagai Player 2 adalah AI (komputer) L1
: daerah lumbung Player 1. Lumbung ini hanya dapat diisi oleh Player 1
L2
: daerah lumbung Player 2. Lumbung ini hanya dapat diisi oleh Player 2
(x,y)
: x merupakan jumlah biji yang berada di lumbung. y merupakan jumlah biji yang berada pada lubang yang dipilih oleh pemain
T (z)
: T merupakan langkah tembak yang dilakukan pemain dan z merupakan jumlah biji yang ditembak
2. Pemilihan langkah melakukan tembak. Langkah ini dipilih jika tidak tersedia pilihan langkah free turn. Langkah tembak terjadi apabila biji terakhir yang berada di tangan jatuh di lubang kosong di arena permainan sendiri dan di hadapannya terdapat lubang lawan yang berisi biji (biji>0). Atau pemain juga dapat memilih langkah tembak ini pada arena permainan sendiri jika langkah ini dianggap lebih menguntungkan dibanding menjalalankan biji
Universitas Sumatera Utara
28
pada lubang lain. Berikut ini adalah contoh gambar keadaan papan congklak untuk menemukan langkah tembak:
L1
B7
B6
B5
B4
B3
B2
B1
2
3
0
1
9
5
0
23
L2 20
0
11
8
0
4
12
0
A1
A2
A3
A4
A5
A6
A7
Gambar 3.3 Keadaan papan congklak untuk menemukan langkah tembak
Dari gambar di atas, hasil dari penelusuran pohon permainan adalah memilih lubang B2. Karena jika biji pada lubang B2 dijalankan akan berhenti pada lubang yang dapat melakukan tembak. Dan langkah B2 juga menghasilkan poin tertinggi dibandingkan langkah lubang yang lainnya. Berikut ini adalah gambar pohon permainan untuk menemukan langkah tembak pada congklak:
Universitas Sumatera Utara
29
B7 (20,2) B5
B6
B5
(20,3) B3
(20,0) T(9) (20,10) (29) L2
A1
B4 (20,1)
B3 (20,9)
(20,10)
(21,12) A5
A1
(21,0)
(21,0)
(10) L2
(21) L2
(20,5)
A2
B3
(22,6) B6
(22,5) B1 (22,3) A6
B1
B2
A5
(20,1) (21) L2
(21,5) B7 (21,3) B4 (21,2) B2 (21,0) T(14) (35) L2
(23,15) A6 (24,0) (24)
L2
Gambar 3.4 Pohon permainan untuk menemukan langkah tembak
3.1.2 Analisis Algoritma Minimax
Pada permainan congklak ini algoritma Minimax hanya digunakan pada level Hard . Algoritma Minimax diterapkan pada simulasi untuk mendapatkan langkah free turn.
Universitas Sumatera Utara
30
Langkah simulasi ini dipilih jika tidak tersedia pilihan langkah free turn dan langkah tembak. Simulasi dilakukan sampai AI menemukan langkah free turn. Berikut ini adalah contoh gambar keadaan papan congklak pada simulasi menemukan langkah terbaik: B7
B6 6
B5 2
L1
B4 3
B3 1
B2 16
B1 0
4
L2
48
4 6 A1
2 A2
1 A3
1 A4
0 A5
0 A6
4 A7
Gambar 3.5 Keadaan papan congklak pada simulasi menemukan langkah terbaik
Dari gambar di atas, hasil dari penelusuran algoritma Minimax adalah memilih lubang B7. Dalam kondisi ini terdapat dua nilai (free turn) yang sama yaitu 6 pada lubang B7 dan B3. Penelusuran algoritma Minimax dapat dilihat pada gambar berikut:
Universitas Sumatera Utara
31
B7
B6 (4,2)
(4,6) B1
B4 (4,2)
(4,5) A4
B2 (4,0)
(5,2) A2
(4) L2
B5 (4,3) B2 (4,0) (4) L2
B4 (4,1) B3 (4,17) B1
B3 (4,16) B2
B2
B1 (4,4) A5
(5,2)
(5,0)
(6) L2
(5) L2
(5,6) A3 (6,3)
(5,3) B6
B7 (6,8)
(5,4) B2
A7 (7,7)
(5,2) (6) L2
B7 (7,0) T(10) (17) L2
Gambar 3.6 Pohon permainan menggunakan algoritma Minimax pada simulasi menemukan langkah terbaik
Karena terdapat dua nilai yang sama yaitu pada lubang B7 dan B3 maka algoritma Minimax melakukan simulasi pada player dengan tujuan mengetahui nilai maksimum yang akan diperoleh oleh player.
Universitas Sumatera Utara
32
Berikut ini adalah gambar keadaan papan congklak setelah lubang B7 menemukan langkah free turn dan pohon permainan menggunakan algoritma Minimax untuk mengetahui nilai maksimum yang akan diperoleh player (a):
L1
B7
B6
B5
B4
B3
B2
B1
1
0
5
3
18
0
1
L2
48
6 7
3
2
0
1
1
5
A1
A2
A3
A4
A5
A6
A7
Gambar 3.7 Keadaan papan congklak setelah lubang B7 menemukan langkah fr ee tur n
A7 (48,5) A2 (48,4) B6
A6 (48,1) A5 (48,2) A3
(49,0)
(48,3)
(49) L1
(49) L1
A5
A4
A3 (48,2)
(48,1)
(48,3)
A1
A4 (48,0) T(4)
B7
(48,8)
(49,2)
B1
(52) L1
A2
B5
A1 (48,7) B2 (49,0) (49) L1
(49,6)
(49,2) A6
(49,2)
A6 (49,2)
A4 (49,0)
A4 (49,0) T(4)
(53) L1
(53) L1
Gambar 3.8 Pohon permainan menggunakan algoritma Minimax pada simulasi player (a)
Universitas Sumatera Utara
33
Berikut ini adalah gambar keadaan papan congklak setelah lubang B3 menemukan langkah free turn dan dan pohon permainan menggunakan algoritma Minimax untuk mengetahui nilai maksimum yang akan diperoleh player (b):
L1
B7
B6
B5
B4
B3
B2
B1
7
3
4
2
1
0
3
L2
48
6 7
3
2
2
1
1
5
A1
A2
A3
A4
A5
A6
A7
Gambar 3.9 Keadaan papan congklak setelah lubang B3 menemukan langkah fr ee tur n
A7 (48,5) A2 (48,4) B6 (49,4) B2 (49,0)
(49)
L1
A6 (48,1) A5 (48,2) A3 (48,3) (49) L1
A5 (48,1) A4 (48,3) A1 (48,8) B1 (49,4) A4
A4 (48,2) A2 (48,4) B6 (49,4) B2 (49,0) (49) L1
A3 (48,2)
A2 (48,3)
A1
B7
(48,8)
(49,8)
B1
A6
A1 (48,7) B2 (49,0) (49) L1
(49,2)
(49,4) A4
(49,3)
A4 (49,3)
A1
A1
(49,0) T(9) (49,9)
(49,0) T(4)
(58) L1
(49) L1
A7 (50,7) (51) L1
Gambar 3.10 Pohon permainan menggunakan algoritma Minimax pada simulasi player (b)
Universitas Sumatera Utara
34
Dari dua simulasi yang telah dilakukan pada player maka didapatkan hasil berikut ini: 53 B7
53
49
49
52
48
58
B7
53
53
49
49
49
53
49
B3
58
51
49
Gambar 3.11 Pohon penelusuran algoritma Minimax
Berdasarkan gambar di atas dapat dilihat bahwa nilai maksimum yang diperoleh player jika AI memilih lubang B7 adalah 53 dan nilai maksimum yang diperoleh player jika AI memilih lubang B3 adalah 58. Oleh sebab itu algoritma Minimax memilih lubang B7 untuk menghindari kerugian maksimum yang akan diperoleh AI. Untuk lebih jelasnya penerapan algoritma Minimax pada aplikasi permainan congklak ini dapat lihat pada pseudocode berikut:
pencarian minimax { int AIvalue ← 0 tmpBoard[i] ← 0 int minval ← -99 i ← banyak biji di lumbung simulasi if(bestmovevalue <= Aivalue && Aivalue > 0) if(bestmovevalue < AIvalue) bestmovevalue ← AIvalue bestmove ← i else if(bestmovevalue == Aivalue) int val ← getMinPlayer(tmpBoard) * -1 if(val > minval) minval ← val bestmovevalue ← AIvalue bestmove ← i endif endif else if(bestmovevalue > Aivalue)
Universitas Sumatera Utara
35
bestmovevalue ← bestmove bestmove ← i endif return bestmove }
3.1.3 Analisis Algoritma Al pha Beta Pr uni ng
Seperti yang telah dibahas pada bab sebelumnya, penulis menggunakan algoritma Alpha Beta Pruning untuk mempersingkat waktu pencarian sekaligus sebagai optimasi algoritma Minimax. Algoritma Alpha Beta Pruning akan mengurangi ruang pencarian Minimax sehingga waktu eksekusi untuk algoritma ini akan lebih efisien. Berikut ini adalah contoh pohon permainan yang dianalisis dengan algoritma Alpha Beta Pruning : 53 B7
53
49
49
52
48
58
B7
53
53
49
49
49
53
49
B3
58
51
49
Gambar 3.12 Pohon permainan menggunakan algoritma Al pha Beta Prun in g
3.2 Perancangan Sistem
Perancangan sistem yang akan dibahas meliputi perancangan pemodelan visual menggunakan UML, perancangan aplikasi permainan, dan perancangan ant armuka.
3.2.1 Perancangan Pemodelan Visual Menggunakan UML
Penulis juga menggunakan UML untuk merancang aplikasi permainan congklak ini. UML yang digunakan adalah use case diagram dan activity diagram.
Universitas Sumatera Utara
36
3.2.1.1 Use Case Di agram
Use case diagram adalah teknik untuk mendeskripsikan interaksi antara user dan aplikasi dalam sebuah sistem. Use case diagram mempresentasikan kegunaan atau fungsi-fungsi sistem dari perspektif pengguna. Single Player
Choose Level
<> <> Multiplayer
Pemain
Playing Game
Rules
About
Exit
Gambar 3.13 Use Case Di agram
3.2.1.2 Activity Diagram
Activity diagram adalah teknik untuk menggambarkan logika procedural, proses bisnis dan aplikasi kerja (Fowler, 2005). Activity diagram sebenarnya mirip dengan flowchart namun diperluas dengan menunjukkan aliran kendali dari satu aktivitas ke aktivitas lain. Berikut ini adalah tabel proses dan activity diagram aplikasi permainan congklak.
1) Singl e Player
Penjelasan proses Single Player dapat dilihat pada tabel berikut ini.
Universitas Sumatera Utara
37
Tabel 3.1 Proses Single Player
Use Case Actors Brief Description Pre-condition Flow of events
Post-condition
Single Player Pemain Use case ini mendeskripsikan proses memulai permainan baru untuk 1 orang pemain Sudah masuk ke form home Kegiatan Pemain Respon Sistem 1. Klik menu “Single Player” 2. Tampilkan form “Choose Level” 3. Pilih tingkat kesulitan permainan 4. Tampilkan form permainan congklak sesuai dengan tingkat kesulitan yang dipilih pemain Tampilan form permainan congklak sesuai tingkat kesulitan yang dipilih Tidak ada
Limitation
Penulis mendeskripsikan activity diagram Single Player yang dapat dilihat pada gambar berikut ini: Pemain
Klik menu Single Player
Sistem
Tampilkan form Choose Level
Pilih level
Tampilkan form permainan sesuai dengan level yang dipilih
Gambar 3.14 Acti vity diagram Si ngle Player 2) Ch oose L evel
Penjelasan proses Choose Level dapat dilihat pada tabel berikut ini.
Universitas Sumatera Utara
38
Tabel 3.2 Proses Ch oose L evel
Use Case Actors Brief Description Pre-condition Flow of events
Post-condition Limitation
Choose Level Pemain Use case ini mendeskripsikan proses memilih tingkat kesulitan permainan Sudah masuk ke form choose level Kegiatan Pemain Respon Sistem 1. Pilih tingkat kesulitan (level ) yang ingin dimainkan, yaitu easy, medium, atau hard. 2. Tampilkan form permainan congklak sesuai dengan tingkat kesulitan yang dipilih Pemain bermain sesuai dengan tingkat kesulitan yang dipilih Tidak ada
Penulis mendeskripsikan activity diagram Choose Level yang dapat dilihat pada gambar berikut ini: Pemain
Pilih Level
Sistem
Tampilkan form permainan sesuai dengan level yang dipilih
Gambar 3.15 Acti vity di agram Ch oose Level
3)
Multiplayer
Penjelasan proses Multiplayer dapat dilihat pada tabel berikut ini. Tabel 3.3 Proses Multiplayer
Use Case Actors Brief Description Pre-condition Flow of events
Multiplayer Pemain Use case ini mendeskripsikan proses memulai permainan baru untuk 2 orang pemain Sudah masuk ke form home Kegiatan Pemain Respon Sistem 1. Klik menu “Multiplayer” 2. Tampilkan form pilih giliran pemain
Universitas Sumatera Utara
39
3. Pilih giliran pemain 4. Tampilkan form permainan congklak untuk 2 orang pemain Post-condition Limitation
Tampilan form permainan congklak untuk 2 orang pemain Tidak ada
Penulis mendeskripsikan activity diagram Multiplayer yang dapat dilihat pada gambar berikut ini: Pemain
Klik menu Multiplayer
Sistem
Tampilkan form pilih giliran pemain
Pilih giliran pemain
Tampilkan form permainan untuk 2 orang pemain
Gambar 3.16 Activity Di agram M ul tiplayer
4)
Play
Penjelasan proses Play dapat dilihat pada tabel berikut ini. Tabel 3.4 Proses Play
Use Case Actors Brief Description Pre-condition Flow of events
Play Pemain Use case ini mendeskripsikan proses menjalankan permainan Sudah masuk ke form permainan congklak Kegiatan Pemain Respon Sistem 1. Player 1 memulai permainan terlebih dahulu dan memilih lubang yang akan dijalankan 2. Update papan congkak sesuai dengan perpindahan biji congkak 3. Mengevaluasi nilai biji congkak dan generate langkah AI
Universitas Sumatera Utara
40
4. Perpindahan biji congkak AI ditampilkan. Jumlah biji congkak sudah ter-update 5. Jika permainan berakhir maka sistem akan menampilkan message dialogue menang, kalah, atau seri. Post-condition Limitation
Tampilan message dialogue Tidak ada
Penulis mendeskripsikan activity diagram Play yang dapat dilihat pada gambar berikut ini: Pemain
Sistem
Player 1 memilih lubang yang akan dijalankan
Update jumlah biji congkak
Evaluasi nilai biji congkak
Tampilan perpindahan biji congkak player 2
Generate langkah AI
Ya
Tidak
Tampilan message dialogue menang, seri, atau kalah
End Game?
Gambar 3.17 Acti vity di agram Play
5)
Rules
Penjelasan proses Rules dapat dilihat pada tabel berikut ini. Tabel 3.5 Proses Rules
Use Case Actors
Rules Pemain
Universitas Sumatera Utara
41
Brief Description Pre-condition Flow of events
Use case ini mendeskripsikan proses menampilkan aturan bermain Sudah masuk ke form home Kegiatan Pemain Respon Sistem 1. Klik menu “Rules” 2. Tampilkan form Rules 3. Klik tombol “ Home” 4. Tutup form “Rules” dan menampilkan form home
Post-condition Limitation
Form rules ditutup dan kembali ke home Tidak ada
Penulis mendeskripsikan activity diagram Rules yang dapat dilihat pada gambar berikut ini: Pemain
Klik menu "Rules"
Sistem
Tampilkan form "Rules"
Klik tombol "Home"
Tampilkan form "Home"
Gambar 3.18 Acti vity diagram Ru les 6)
About
Penjelasan proses About dapat dilihat pada tabel berikut ini.
Tabel 3.6 Proses About
Use Case Actors Brief Description
About Pemain Use case ini mendeskripsikan proses menampilkan tentang pengembang aplikasi
Universitas Sumatera Utara
42
Sudah masuk ke form home Kegiatan Pemain 1. Klik menu “About”
Pre-condition Flow of events
Respon Sistem 2. Tampilkan form About
3. Klik tombol “ Home”
4. Tutup form “About” dan menampilkan form home Post-condition Limitation
Form about ditutup dan kembali ke home Tidak ada
Penulis mendeskripsikan activity diagram About yang dapat dilihat pada gambar berikut ini: Pemain
Klik menu "About"
Sistem
Tampilkan form “About”
Klik tombol "Home"
Tampilkan form "Home"
Gambar 3.19 Activity diagram About
7)
Exit
Penjelasan proses Exit dapat dilihat pada tabel berikut ini. Tabel 3.7 Proses Exit
Use Case Actors Brief Description Pre-condition Flow of events
Exit Pemain Use case ini mendeskripsikan proses keluar dari aplikasi permainan congklak Sudah masuk ke form home Kegiatan Pemain Respon Sistem 1. Klik menu “Exit”
Universitas Sumatera Utara
43
2. Form home permainan congklak ditutup Post-condition Limitation
Permainan berakhir dan aplikasi permainan congklak ditutup Tidak ada
Penulis mendeskripsikan activity diagram Exit yang dapat dilihat pada gambar berikut ini: Pemain
Sistem
Klik menu "Exit"
Tampilkan form permainan sesuai dengan level yang dipilih
Gambar 3.20 Activity di agram Exi t
3.2.2 Perancangan Aplikasi Permainan
Pada tahap perancangan aplikasi permainan, penulis akan menggambarkan interaksi yang dapat dilakukan pengguna terhadap aplikasi permainan yang dibangun. Aplikasi ini dimulai dengan menampilkan form menu yang berisi menu pilihan Single Player, Multiplayer, Rules, About, dan Exit . Setiap menu akan menampilkan form selanjutnya dan aplikasi akan berhenti jika pengguna memilih menu Exit.
Universitas Sumatera Utara
44
Start
Tampilkan Form Menu
Tampilkan Form Choose Level
Ya
Pilih Menu Single Player? Tidak
Tidak
Tampilkan Form Permainan
Ya Pilih Giliran Bermain
Pilih Menu Multiplayer?
Tidak
Ya
Pilih tombol Home?
Tidak
Pilih tombol Play? Ya
Bermain Congklak
Pilih Menu Rules?
Ya
Tampilkan Form Rules
Ya
Pilih Tombol Home
Ya
Tidak
Tidak
Pilih Menu About?
Pilih Tombol Home
Ya
Tampilkan Form About
Tidak Tidak Permainan Berakhir Exit
Munculkan Pesan Pemenang End
Gambar 3.21 Flowchart aplikasi permainan
3.2.3 Perancangan Antarmuka
Pada tahap ini akan dirancang tampilan antarmuka dari aplikasi permainan congklak . Perancangan antarmuka pada aplikasi permainan congklak ini terdiri dari beberapa tampilan halaman, yaitu halaman menu utama, halaman pilih level , halaman panduan bermain, halaman tentang yang berisi keterangan pengembang permainan, dan halaman permainan. Berikut ini adalah rancangan antarmuka dari halaman-halaman tersebut
Universitas Sumatera Utara
45
a. Form Home
Form Home merupakan form yang pertama kali ditampilkan pada saat aplikasi dijalankan. Form ini berisi menu yang dapat dipilih oleh pengguna yaitu Single Player , Multiplayer, Rules, About dan Exit . Rancangan antarmuka form ini dapat dilihat pada gambar berikut:
Gambar 3.22 F orm H ome
Keterangan: 1. Sound merupakan tombol menu yang berfungsi untuk mengaktifkan dan menonaktifkan audio 2. Congklak Games merupakan judul aplikasi. 3. Single Player merupakan tombol menu yang berfungsi untuk menampilkan halaman Choose Level . 4. Multiplayer merupakan tombol menu yang berfungsi untuk memulai permainan untuk dua orang pemain. 5. Rules merupakan tombol menu yang berfungsi untuk menampilkan halaman panduan bermain. 6. About merupakan tombol menu yang berfungsi untuk menampilkan halaman tentang pengembang aplikasi. 7. Exit merupakan tombol menu yang berfungsi untuk keluar dari aplikasi.
Universitas Sumatera Utara
46
b. Form Choose Level
Form Choose Level merupakan form yang berisi level permainan atau tingkat kesulitan permainan yang terdiri dari easy, medium, dan hard . Rancangan antarmuka form ini dapat dilihat pada gambar berikut:
Gambar 3.23 F orm Choose L evel
Keterangan: 1. Home merupakan tombol menu yang berfungsi untuk kembali ke menu utama. 2. Choose Level merupakan judul dari halaman. 3. Easy merupakan tingkat kesulitan pertama. 4. Medium merupakan tingkat kesulitan kedua. 5. Hard merupakan tingkat kesulitan ketiga.
c. Form pilih giliran pemain Form pilih giliran pemain merupakan form untuk memilih siapa yang berhak bermain terlebih dahulu. Rancangan antarmuka form ini dapat dilihat pada gambar berikut:
Universitas Sumatera Utara
47
Gambar 3.24 Form pilih giliran pemain
Keterangan: 1. First Turn merupakan judul dari halaman 2. Player 1 dipilih untuk memulai permainan dengan Player 1 bermain terlebih dahulu 3. Player 2 dipilih untuk memulai permainan dengan Player 2 bermain terlebih dahulu
d. Form Rules Form Rules merupakan form yang berisi tentang peraturan dan cara bermain sehingga dapat memberikan informasi kepada pengguna tentang permainan congklak. Rancangan antarmuka form ini dapat dilihat pada gambar berikut:
Gambar 3.25 F orm Rul es
Universitas Sumatera Utara
48
Keterangan: 1. Home merupakan tombol menu yang berfungsi untuk kembali ke menu utama. 2. Rules merupakan judul dari halaman. 3. Merupakan informasi tentang panduan cara bermain
e. Form About
Form About merupakan form yang berisikan informasi mengenai pengembang aplikasi. Rancangan antarmuka form ini dapat dilihat pada gambar berikut:
Gambar 3.26 F orm About
Keterangan: 1. Home merupakan tombol menu yang berfungsi untuk kembali ke menu utama. 2. About merupakan judul dari halaman. 3.
Merupakan informasi tentang pengembang aplikasi.
f.
Form Arena Permainan
Form arena permainan merupakan form yang digunakan untuk bermain permainan congklak. Rancangan antarmuka form arena permainan dapat dilihat pada gambar berikut:
Universitas Sumatera Utara
49
Gambar 3.27 Form Arena Permainan
Keterangan: 1. Merupakan giliran player 1. 2. Merupakan giliran player 2. 3. Merupakan lumbung milik player 1. 4. Merupakan lumbung milik player 2. 5. Merupakan sederetan lubang milik player 1. 6. Merupakan sederetan lubang milik player 2. 7. Merupakan jumlah biji dalam bentuk angka dari setiap lubang/lumbung di depannya. 8. Pause merupakan tombol menu yang berfungsi untuk melakukan jeda pada permainan. 9. Home merupakan tombol menu yang berfungsi untuk kembali ke menu utama.
Universitas Sumatera Utara
50
BAB 4
IMPLEMENTASI DAN PENGUJIAN
4.1 Implementasi
Pada bab ini akan dijelaskan tentang implementasi dan pengujian sistem sesuai dengan perancangan sistem yang telah dibahas pada bab sebelumnya. Pada tahap ini seluruh spesifikasi dari aplikasi yang dirancang akan diterjemahkan ke dalam bahasa pemrograman sehingga menghasilkan sebuah aplikasi.
4.1.1 Spesifikasi Perangkat Keras
Spesifikasi perangkat keras yang digunakan dalam implementasi aplikasi permainan congklak adalah sebagai berikut: 1. Prosesor Intel Core 2 Solo SU3500. 2. Memory RAM 4GB. 3. Hard Disk 500GB. 4. Monitor 13.3” Acer LED LCD.
4.1.2 Spesifikasi Perangkat Lunak
Implementasi aplikasi permainan congklak ini dilakukan dengan menggunakan bahasa pemrograman C++ pada Microsoft Visual Studio 2008. Pengkodean aplikasi menggunakan library Cocos2d-x. Cocos2d-x adalah sebuah framework yang digunakan untuk membuat game di berbagai platform seperti iOS, Android, Windows Phone 8, Blackberry, Marmalade, Windows XP/Windows 7, Linux, Mac OSX dan Windows 8 Metro.
Universitas Sumatera Utara
51
Setelah pengkodean dalam bahasa pemrograman C++ selesai, tahap selanjutnya adalah mengkonversi kode program dalam bahasa pemrograman C++ menjadi librar y untuk dijalankan pada perangkat lunak Eclipse. Eclipse adalah perangkat lunak yang digunakan sebagai compiler untuk membangun mobile Application berbasis Android. Kemudian program di-compile dan menghasilkan aplikasi permainan congklak . Setelah itu aplikasi sudah dapat di-install pada perangkat keras yang akan digunakan untuk melakukan pengujian aplikasi.
Untuk lebih jelasnya, berikut ini adalah l angkah-langkah untuk proses konversi kode program C++ menjadi sebuah mobile application berbasis Android: 1. Buat sebuah project C++ baru dengan menggunakan template ‘Cocos2d-win32 Application’. 2. Setelah seluruh kode program C++ selesai, jalankan ‘create-android project.bat’. 3. Kemudian jadi sebuah folder Android project . 4. Copy semua resource dan classes yang telah dibuat sebelumnya ke folder Android project . 5. Kemudian jalankan Cygwin.bat dan lakukan perintah berikut : #cd[spasi]/cygdrive/[path folder penyimpanan Android project yang telah dibuat] lalu tekan enter #./build_native.sh lalu tekan enter 6. Setelah proses pada langkah 5 selesai, selanjutnya jalankan perangkat lunak Eclipse lalu buka Android project yang telah disimpan sebelumnya. Lakukan clean project. Kemudian run program sebagai mobile application berbasis Android.
Universitas Sumatera Utara
52
4.2 Tampilan Aplikasi
Berikut ini adalah tampilan dari aplikasi permainan congklak.
4.2.1 Tampilan form Menu
Pada halaman ini ditampilkan menu-menu yang dapat dipilih oleh pemain yaitu Single Player untuk memulai permainan satu orang pemain, Multiplayer untuk memulai permainan dua orang pemain, Rules untuk melihat panduan bermain, About untuk melihat keterangan tentang pengembang aplikasi dan Exit untuk keluar dari aplikasi. Selain itu disediakan juga tombol mute yang terletak di sudut kanan atas untuk mengaktifkan atau menonaktifkan suara pada aplikasi. Tampilan form menu dapat dilihat pada gambar 4.1 berikut:
Gambar 4.1 Tampilan form menu
4.2.2 Tampilan f orm Choose L evel
Halaman ini akan ditampilkan ketika pemain memilih menu Single Player. Terdapat tiga tingkat kesulitan yang dapat dipilih oleh pemain yaitu easy, medium, atau hard. Pada form ini terdapat tombol home pada pojok kanan atas yaitu agar pemain dapat kembali ke menu utama. Tampilan form Choose Level dapat dilihat pada gambar 4.2 berikut:
Universitas Sumatera Utara
53
Gambar 4.2 Tampilan f orm Ch oose Level
4.2.3 Tampilan form pilih giliran pemain
Tampilan ini akan muncul setelah pemain memilih menu Multiplayer . Tampilan form pilih giliran pemain dapat dilihat pada gambar 4.3 berikut:
Gambar 4.3 Tampilan form pilih giliran pemain
4.2.4 Tampilan form permainan
Form permainan akan ditampilkan setelah pemain memilih tingkat kesulitan yang ingin dimainkan pada Single Player dan menentukan siapa giliran pertama ( first turn) yang dapat memulai permainan pada Multiplayer . Form permainan menampilkan tombol play, tombol home, papan congklak yang diisi masing-masing 7 biji congklak
Universitas Sumatera Utara
54
pada tiap lubang kecil, 2 kotak untuk tempat persinggahan biji congklak ketika pemain mendapatkan giliran bermain, dan kotak putih yang menunjukkan jumlah biji congklak yang ada di hadapannya . Tampilan form permainan sebelum permainan dimulai dapat dilihat pada gambar 4.4 berikut:
Gambar 4.4 Tampilan form permainan sebelum permainan dimulai
Tombol home digunakan untuk kembali ke menu utama. Permainan dimulai ketika pemain menekan tombol play. Terdapat tiga pilihan lubang yang dapat dipilih oleh
pemain.
Salah
satunya
merupakan
langkah
terbaik
hasi
penelusuran
Minimax.Tampilan form permainan saat permainan dimulai dapat dilihat pada gambar 4.5 berikut:
Gambar 4.5 Tampilan form permainan saat permainan dimulai
Universitas Sumatera Utara
55
Gambar 4.6 Tampilan saat permainan sedang berlangsung
Tombol pause digunakan untuk melakukan jeda pada permainan. Dalam keadaan paused terdapat tombol reload untuk melakukan restart/retry permainan. Tampilan form permainan dalam keadaan paused dapat dilihat pada gambar 4.7 berikut:
Gambar 4.7 Tampilan permainan dalam keadaan paused
Pemain dapat melanjutkan permainan dengan menekan tombol play. Dan apabila pemain menekan tombol home akan muncul message dialog seperti gambar 4.8 berikut:
Universitas Sumatera Utara
56
Gambar 4.8 M essage dialog
Permainan congklak dikatakan berakhir apabila salah satu arena pemain sudah tidak terdapat biji congklak lagi. Dan pemain yang memiliki biji congklak yang lebih banyak pada lumbungnya adalah pemenang dari permainan ini. Tampilan ketika permainan sudah berakhir dapat dilihat pada gambar 4.9 berikut:
Gambar 4.9 Tampilan ketika permainan sudah berakhir
4.2.5 Tampilan f orm Rul es
Form Rules berisi tentang tata cara bermain congklak. Tampilan form Rules dapat dilihat pada gambar 4.9 berikut:
Universitas Sumatera Utara
57
Gambar 4.10 Tampilan for m Rul es
4.2.6 Tampilan for m About
Form About berisi informasi tentang pengembang aplikasi. Tampilan form About dapat dilihat pada gambar 4.10 berikut:
Gambar 4.11 Tampilan for m About
4.3 Pengujian
Pengujian aplikasi merupakan proses pemeriksaan atau evaluasi sistem untuk mengetahui apakah sistem yang dibangun telah memenuhi kebutuhan sesuai dengan
Universitas Sumatera Utara
58
yang diharapkan. Pengujian aplikasi permainan congklak dilakukan dengan menggunakan metode pengisian kuesioner oleh beberapa orang pengguna. Pengujian aplikasi permainan congklak dilakukan pada Samsung Galaxy Tab GT-P3100. Adapun spesifikasi Samsung Galaxy Tab GT-P3100 adalah :
1. Sistem operasi Android 4.0.4 (Ice Cream Sandwich). 2. Layar sentuh 7.0”. 3. Resolusi layar WSVGA (1024x600). 4. Mendukung audio MP3, OGG, AAC-LC / AAC / AAC+ / eAAC+, AC-3, AMR-NB / WB, WMA, WAV, MID, IMY, FLAC.
4.3.1 Pengujian Aplikasi
Pada tahap pengujian ini dilakukan evalusi pada setiap proses dalam aplikasi permainan congklak. Metode yang digunakan pada tahap pengujian ini adalah metode black box. Dengan metode black box pengujian hanya dilakukan pada representasi sistem yang terlihat tanpa perlu mengetahui bagaimana cara kerja sistem tersebut.
Dengan metode black box hasil eksekusi akan dibandingkan dengan hasil yang diharapkan. Bila hasil eksekusi sesuai dengan hasil yang diharapkan, maka aplikasi dianggap berhasil. Sebaliknya jika hasil eksekusi tidak sesuai dengan hasil yang diharapkan maka diperlukan perbaikan pada aplikasi.
4.3.2 Pengujian Antarmuka Aplikasi
Untuk memperoleh hasil penilaian pengguna terhadap antarmuka aplikasi penulis akan memberikan kuesioner kepada 10 orang pengguna yang bertindak sebagai responden. Aspek antarmuka yang akan dinilai meliputi desain aplikasi secara umum, tampilan papan dan biji congklak, warna papan dan biji congklak, tampilan animasi permainan, desain tombol menu, dan audio aplikasi. Tabel 4.1 Kategori Pemberian Nilai No. 1. 2.
Alternatif Jawaban Sangat Baik Baik
Bobot Nilai 5 4
Universitas Sumatera Utara
59
3. 4. 5.
Cukup Buruk Sangat Buruk
3 2 1
Untuk lebih jelasnya, hasil kuesioner dapat dilihat pada lampiran B. Hasil evaluasi antarmuka aplikasi yang diperoleh dapat dilihat pada Tabel 4.2.
Tabel 4.2 Hasil Kuesioner Antarmuka Aplikasi Hasil Penilaian No.
Sasaran Penilaian
1.
Desain aplikasi secara umum Tampilan papan dan biji congklak Warna papan dan biji congklak Tampilan animasi permainan Desain tombol menu Audio
2. 3. 4. 5. 6.
Sangat baik 6
Baik
Cukup
Buruk
4
-
-
Sangat buruk -
4
6
-
-
-
4
5
1
-
-
5 4 3
5 4 5
1 2
1 -
-
Dari hasil kuesioner aspek antarmuka kemudian dihitung nilai setiap sasaran penilaian dengan menggunakan persamaan (1).
Sk = (f/N) * Ik ................................................................................................ (1)
Keterangan : Sk
: Nilai untuk setiap k (k = sangat baik, baik, cukup, buruk, dan sangat buruk)
f
: total respon dalam k
N
: Jumlah responden
Ik
: Nilai k
Sehingga untuk masing-masing pertanyaan pada pengujian antarmuka aplikasi diperoleh nilai sebagai berikut:
1. Desain aplikasi secara umum Ssangat baik + S baik + Scukup + S buruk + Ssangat buruk
Universitas Sumatera Utara
60
= (6/10)*5 + (4/10)*4 + (0/10)*3 + (0/10)*2 + (0/10)*1 = 3 + 1,6 = 4,6 2. Tampilan papan dan biji congklak Ssangat baik + S baik + Scukup + S buruk + Ssangat buruk = (4/10)*5 + (6/10)*4 + (0/10)*3 + (0/10)*2 + (0/10)*1 = 2 + 2,4 = 4,4
3. Warna papan dan biji congklak Ssangat baik + S baik + Scukup + S buruk + Ssangat buruk = (4/10)*5 + (5/10)*4 + (1/10)*3 + (0/10)*2 + (0/10)*1 = 2 + 2 + 0,3 = 4,3
4. Tampilan animasi permainan Ssangat baik + S baik + Scukup + S buruk + Ssangat buruk = (5/10)*5 + (5/10)*4 + (0/10)*3 + (0/10)*2 + (0/10)*1 = 2,5 + 2 = 4,5
5. Desain tombol menu Ssangat baik + S baik + Scukup + S buruk + Ssangat buruk = (4/10)*5 + (4/10)*4 + (1/10)*3 + (1/10)*2 + (0/10)*1 = 2 + 1,6 + 0,3 + 0,2 = 4,1
6. Audio Ssangat baik + S baik + Scukup + S buruk + Ssangat buruk = (3/10)*5 + (5/10)*4 + (2/10)*3 + (0/10)*2 + (0/10)*1 = 1,5 + 2 + 0,6 = 4,1
Universitas Sumatera Utara
61
Kemudian dapat dihitung nilai total keseluruhan dari aspek antarmuka dengan menggunakan persamaan (2). Stotal = ∑Sk / n ................................................................................................ (2) Keterangan : Stotal
: Nilai untuk keseluruhan penilaian
n
: Jumlah sasaran penilaian
Maka diperoleh nilai keseluruhan dari aspek antarmuka sebagai berikut : Stotal
= 4,6+4,4+4,3+4,5+4,1+4,1 / 6 = 4,3
Dari nilai keseluruhan didapatkan nilai 4,3 maka dapat disimpulkan bahwa hasil penilaian pengguna terhadap aspek antarmuka aplikasi permainan congklak adalah ‘Baik’.
4.3.3 Pengujian Penggunaan Aplikasi
Pengujian penggunaan aplikasi ini dilakukan dengan tujuan untuk memperoleh informasi mengenai tingkat kesulitan menjalankan aplikasi oleh pengguna. Dari hasil pengujian ini dapat diperoleh apakah pengguna memahami aturan permainan yang telah tersedia serta memahami fungsi-fungsi dari menu yang ada. Aspek penggunaan aplikasi yang akan dinilai meliputi kemudahan menjalankan aplikasi, kemudahan memahami tombol menu yang ada, panduan permainan yang tersedia dan kesesuaian tingkat kesulitan pada setiap level. Hasil pengujian dari kuesioner terhadap penggunaan aplikasi permainan congklak ini dapat dilihat pada Tabel 4.3.
Tabel 4.3 Hasil Kuesioner Penggunaan Aplikasi Hasil Penilaian No.
1. 2. 3.
Sasaran Pertanyaan
Kemudahan menjalankan aplikasi Kemudahan memahami tombol menu Panduan permainan yang
Sangat baik 3
Baik
Cukup
Buruk
5
2
-
Sangat Buruk -
3
4
2
1
-
4
5
1
-
-
Universitas Sumatera Utara
62
4.
tersedia Kesesuaian tingkat kesulitan pada setiap level
3
6
1
-
-
Dari hasil kuesioner aspek penggunaan aplikasi kemudian dihitung nilai setiap sasaran penilaian dengan menggunakan persamaan (1) dan diperoleh nilai untuk aspek antarmuka sebagai berikut :
1. Kemudahan menjalankan aplikasi Ssangat baik + S baik + Scukup + S buruk + Ssangat buruk = (3/10)*5 + (5/10)*4 + (2/10)*3 + (0/10)*2 + (0/10)*1 = 1,5 + 2 + 0,6 = 4,1 2. Kemudahan memahami tombol menu Ssangat baik + S baik + Scukup + S buruk + Ssangat buruk = (3/10)*5 + (4/10)*4 + (2/10)*3 + (1/10)*2 + (0/10)*1 = 1,5 + 1,6 + 0,6 + 0,2 = 3,9
3. Panduan permainan yang terserdia Ssangat baik + S baik + Scukup + S buruk + Ssangat buruk = (4/10)*5 + (5/10)*4 + (1/10)*3 + (0/10)*2 + (0/10)*1 = 2 + 2 + 0,3 = 4,3
4. Kesesuaian tingkat kesulitan pada setiap level Ssangat baik + S baik + Scukup + S buruk + Ssangat buruk = (3/10)*5 + (6/10)*4 + (1/10)*3 + (0/10)*2 + (0/10)*1 = 1,5 + 2,4 + 0,3 = 4,2
Kemudian dihitung nilai total keseluruhan dari aspek penggunaan aplikasi dengan menggunakan persamaan (2) dan diperoleh nilai keseluruhan dari aspek penggunaan aplikasi sebagai berikut :
Universitas Sumatera Utara
63
Stotal
= 4,1+3,9 +4,3+4,2 / 4 = 4,1
Dari nilai keseluruhan maka didapatkan nilai 4,1 maka dapat disimpulkan bahwa hasil penilaian pengguna terhadap aspek penggunaan aplikasi permainan congklak adalah ‘Baik’.
Universitas Sumatera Utara
64
BAB 5
KESIMPULAN DAN SARAN
5.1 Kesimpulan
Berdasarkan pembahasan pada bab-bab sebelumnya, kesimpulan yang dapat diambil adalah sebagai berikut:
1. Algoritma Minimax dapat diimplementasikan sebagai kecerdasan buatan dalam permainan congklak dengan menerapkan strategi permainan congklak untuk mendapatkan nilai maksimum.
2. Algoritma Minimax kurang efesien apabila digunakan secara tunggal pada aplikasi permainan congklak ini karena ruang pencarian yang terlalu besar, sehingga perlu dilakukan pemotongan dengan Alpha Beta Pruning . 3. Tingkat kedalaman yang dilakukan pada algoritma pencarian berbanding lurus dengan tingkat kesulitan permainan. Semakin tinggi tingkat kedalaman yang dilakukan algoritma pencarian, maka semakin sulit agen tersebut dikalahkan.
4. Mobile application berbasis Android dapat dibangun dengan menggunakan bahasa pemrograman C++ yang kemudian dikonversi menjadi library yang dapat digunakan pada pemrograman Java di Eclipse.
5. Dari hasil pengujian aplikasi yang telah dilakukan kepada beberapa orang responden dapat disimpulkan bahwa aplikasi permainan congklak dapat berjalan dengan baik pada Galaxy Tab GT-P3100.
Universitas Sumatera Utara
65
5.2 Saran
Pada aplikasi permainan congklak ini penulis tidak memberikan batasan waktu bagi pemain untuk berpikir mengambil langkah permainan. Sehingga untuk penelitian selanjutnya dapat dikembangkan dengan memberikan batasan waktu bagi pemain serta memberikan pesan jika pemain salah mengambil langkah dalam permainan. Dan aplikasi permainan congklak yang dibangun dibatasi hanya satu kali putaran permainan saja. Sehingga untuk penelitian selanjutnya aplikasi permainan congklak ini dapat dikembangkan sampai beberapa putaran permainan.
Universitas Sumatera Utara
66
DAFTAR PUSTAKA
Adha, R. 2009. Implementasi Algoritma Greedy pada Permainan Congklak . Makalah. Bandung: Institut Teknologi Bandung. Akbar, K. S. R ., Algoritma Minimax Dalam Pengambilan Keputusan Pada Permainan Tic-Tac-Toe. Makalah. Bandung: Institut Teknologi Bandung. Akbar, M. A., Analisis dan Implementasi Kecerdasan Buatan Pada Permainan Checker Menggunakan Algoritma Minimax Dengan Negascout. Skripsi. Medan: Universitas Sumatera Utara. Ayuningtyas, N. 2008. Algoritma Minimax dalam Permainan Checker . Skripsi. Bandung: Institut Teknologi Bandung. Bakri, A. H. 2010. Analisis dan Implementasi Algoritma Backtracking Pada Permainan Congklak . Skripsi. Medan: Universitas Sumatera Utara. Burnette, E. 2009. Hello Android . Second Edition. Amerika Serikat: Pragmatic Bookshelf. Collins, C., Galpin, M., dan Käppler, M. 2012. Android in Practice. New York: Manning Publications. Coppin, B. 2004. Artificial Intelligence Illuminated . Massachusetts: Jones and Bartlett. Cormen, T. H., Leiserson, C. E., Rivest, R. L., dan Stein, C. 2009. Introduction to Algorithms. Third Edition. Massachusetts: MIT Press. Fowler, M. 2005. UML Distilled . Third Edition. Yogyakarta: Andi. Hoog, A. 2011. Android Forensics. Amerika Serikat: Elsevier. H, Jogiyanto. 2000. Pengenalan Komputer : Dasar Ilmu Komputer, Pemograman, Sistem Informasi, dan Intelegensi Buatan. Edisi Ketiga. Yogyakarta: Andi. Kusumadewi, S. 2003. Artificial Intelligence Teknik dan Aplikasinya. Graha Ilmu, Yogyakarta. Kusumadewi, S. dan Purnomo, H. 2005. Penyelesaian Masalah Optimasi dengan Teknik-Teknik Heuristik . Yogyakarta: Graha Ilmu. Leyton-Brown, K. dan Shoham, Y. 2008. Essentials of Games Theory. United States of America: Morgan & Claypool.
Universitas Sumatera Utara
67
Millington, I. dan Funge, J. 2009. Artificial of Intelligence for Games. Second Edition. Massachusetts: Morgan Kaufmann Publishers. Pribadi, A. 2011. The Role Of Playing Congklak For Indonesian Children. Jurnal. Medan: Universitas Sumatera Utara. Rich, E. dan Knight, K. 1991. Artificial Intelligence. McGraw-Hill Inc, New York. Russell, S. J. dan Norvig, P. 2010. Artificial Intelligence: A Modern Approach. Third Edition. New Jersey: Pearson Education. Salen, K. dan Zimmerman, E. 2003. Rules of Play: Game Design Fundamentals. Massachusetts: MIT Press. Tim Jones, M. 2008. Artificial Intelligence A Systems Approach. Hingham Massachusetts: David Pallai. Tyugu, E. 2007. Algorithm and Architectures of Artificial Intelligence. Estonia: Tallinn University of Technology.
Universitas Sumatera Utara
LAMPIRAN A
Universitas Sumatera Utara
LAMPIRAN. LISTING PROGRAM
Game::Game() { SimpleAudioEngine::sharedEngine()->preloadEffect("sound1.wav"); } Game::~Game() { SimpleAudioEngine::sharedEngine()->stopAllEffects(); SimpleAudioEngine::sharedEngine()->unloadEffect("sound1.wav"); } bool Game::init() { // 1. super init first if ( !CCLayer::init() ) { return false; } gameispaused = false; //ambil ukuran window size = CCDirector::sharedDirector()->getWinSize(); centerWin = ccp(size.width/2,size.height/2);// center ukuran window // tampilin backgorund AllScene = CCSprite::spriteWithFile("bg_game.jpg"); AllScene->setPosition(centerWin); this->addChild(AllScene, 1);
CCMenuItemImage * btnBack = CCMenuItemImage::itemFromNormalImage( "back_1.png", "back_2.png", this, menu_selector(Game::BtnSender)); btnBack->setPosition(ccp(440,30)); btnBack->setTag(1); btnPlay = CCMenuItemImage::itemFromNormalImage( "play_1.png", "play_2.png", this, menu_selector(Game::BtnSender)); btnPlay->setPosition(ccp(390,30)); btnPlay->setTag(2); btnPause = CCMenuItemImage::itemFromNormalImage( "pause_1.png", "pause_2.png", this, menu_selector(Game::BtnSender)); btnPause->setPosition(ccp(390,30)); btnPause->setTag(3);
Universitas Sumatera Utara
btnPause->setIsVisible(false); btnRetry = CCMenuItemImage::itemFromNormalImage( "retry_1.png", "retry_2.png", this, menu_selector(Game::BtnSender)); btnRetry->setPosition(ccp(340,30)); btnRetry->setTag(4); btnRetry->setIsVisible(false);
CCMenu* MenuGame = CCMenu::menuWithItems(btnBack,btnPlay, btnPause, btnRetry, NULL); MenuGame->setPosition(CCPointZero); AllScene->addChild(MenuGame, 1);
// posisi lubang PosLubang[0] PosLubang[1] PosLubang[2] PosLubang[3] PosLubang[4] PosLubang[5] PosLubang[6] PosLubang[7]
= = = = = = = =
ccp(395,130); ccp(345,130); ccp(294,130); ccp(241,130); ccp(190,130); ccp(138,130); ccp(86,130); ccp(30,151); // posisi lumbung player 1
PosLubang[8] = ccp(85,180); PosLubang[9] = ccp(140,180); PosLubang[10] = ccp(190,180); PosLubang[11] = ccp(243,180); PosLubang[12] = ccp(292,180); PosLubang[13] = ccp(347,180); PosLubang[14] = ccp(395,180); PosLubang[15] = ccp(445,156); // posisi lumbung player 2 //========================// CCPoint PosKotak[16]; PosKotak[0] = ccp(396,78); PosKotak[1] = ccp(345,78); PosKotak[2] = ccp(293,78); PosKotak[3] = ccp(241,78); PosKotak[4] = ccp(188,78); PosKotak[5] = ccp(137,78); PosKotak[6] = ccp(84,78); PosKotak[7] = ccp(33,242);
PosKotak[8] = ccp(84,242); PosKotak[9] = ccp(137,242); PosKotak[10] = ccp(188,242); PosKotak[11] = ccp(241,242); PosKotak[12] = ccp(293,242); PosKotak[13] = ccp(345,242); PosKotak[14] = ccp(396,242); PosKotak[15] = ccp(445,78);
Universitas Sumatera Utara
//=========================// for(int i=0; i<2; i++) { Kotak[i] = CCSprite::spriteWithFile("box.png"); Kotak[i]->setPosition(ccp(42,39)); AllScene->addChild(Kotak[i],1); Kotak[i]->setIsVisible(false); } Kotak[1]->setPosition(ccp(436,280));
for(int i=0; i<7; i++) { lubangkedip[i] = CCSprite::spriteWithFile("lubang_kedip.png"); lubangkedip[i]->setPosition(PosLubang[i]); AllScene->addChild(lubangkedip[i],1); lubangkedip[i]->setScale(0.85f);
lubangkedip[i]->setIsVisible(false); } idxkedip[0] = -1; idxkedip[1] = -1; idxkedip[2] = -1;
float px,py; int j = 0; int count = 0; for(int i=0; i<98; i++) { string filename = "biji_"; filename += intTostr(j+1) + ".png" ; px = (PosLubang[count].x + (rand()%-10)) ; py = (PosLubang[count].y + (rand()%-10)) ; Biji[i] = CCSprite::spriteWithFile(filename.c_str()); Biji[i]->setPosition(ccp(px,py)); AllScene->addChild(Biji[i],2); j+= 1; if(j>= 7) { j = 0; count += 1; // lumbung tidak ada biji if(count == 7 || count == 15) count += 1; }
if(i < 16) { NilaiLubang[i] = 0; if(i!= 7 && i!= 15) { txtBiji[i] = CCLabelTTF::labelWithString("7", "Century Gothic",14); NilaiLubang[i] = 7;
Universitas Sumatera Utara
}else{ txtBiji[i] = CCLabelTTF::labelWithString("0", "Century Gothic",14); NilaiLubang[i] = 0; } txtBiji[i]->setPosition(PosKotak[i]); txtBiji[i]->setColor(ccBLACK); AllScene->addChild(txtBiji[i],1); } }
PosWadah[0] = ccp(50,45); PosWadah[1] = ccp(445,288);
// isi idx biji congklak didalam lubang isilubang[0] = CreateAngka(0,6); isilubang[1] = CreateAngka(7,13); isilubang[2] = CreateAngka(14,20); isilubang[3] = CreateAngka(21,27); isilubang[4] = CreateAngka(28,34); isilubang[5] = CreateAngka(35,41); isilubang[6] = CreateAngka(42,48); isilubang[7] = ""; // lumbung milik player 1 isilubang[8] = CreateAngka(49,55); isilubang[9] = CreateAngka(56,62); isilubang[10] = CreateAngka(63,69); isilubang[11] = CreateAngka(70,76); isilubang[12] = CreateAngka(77,83); isilubang[13] = CreateAngka(84,90); isilubang[14] = CreateAngka(91,97); isilubang[15] = ""; // lumbung milik player 2 / AI txtDebug = CCLabelTTF::labelWithString("","Century Gothic",22); txtDebug->setPosition(ccp(centerWin.x,300)); txtDebug->setColor(ccBLACK); AllScene->addChild(txtDebug,2);
txtInfo = CCLabelTTF::labelWithString("","Century Gothic",24); txtInfo->setPosition(centerWin); txtInfo->setColor(ccWHITE); AllScene->addChild(txtInfo,3);
txtInfo->setScale(0.0f); txtGame = CCLabelTTF::labelWithString("","Century Gothic",18); txtGame->setPosition(ccp(65,300)); txtGame->setColor(ccWHITE); AllScene->addChild(txtGame,3);
if(AI == true) { CCLabelTTF * txtMode = CCLabelTTF::labelWithString("","Century Gothic",18); txtMode->setPosition(ccp(65,308));
Universitas Sumatera Utara
txtMode->setColor(ccWHITE); AllScene->addChild(txtMode,3); txtGame->setPosition(ccp(65,285)); if(levelgame == 1) { txtMode->setString("Level : Easy"); }else if(levelgame == 2) { txtMode->setString("Level : Medium"); }else{ txtMode->setString("Level : Hard"); } }
bg_paused = CCSprite::spriteWithFile("bg_paused.png"); bg_paused->setPosition(centerWin); AllScene->addChild(bg_paused,4); bg_paused->setIsVisible(false); // aktifkan touch screen this->setIsTouchEnabled(true);
// aktifkan shortcut exit button device this->setIsKeypadEnabled(true); // set varaiabel urut = 0; useristurn = true; canrun = false; gameover = false;
// konfirmasi main sfchoiceturn = CCSprite::spriteWithFile("bg_turn.png"); sfchoiceturn->setPosition(centerWin); this->addChild(sfchoiceturn,5); CCMenuItemImage * btnPlayer1 = CCMenuItemImage::itemFromNormalImage( "ply1_1.png", "ply1_2.png", this, menu_selector(Game::BtnSender)); btnPlayer1->setPosition(ccp(centerWin.x ,centerWin.y )); btnPlayer1->setTag(9); CCMenuItemImage * btnPlayer2 = CCMenuItemImage::itemFromNormalImage( "ply2_1.png", "ply2_2.png", this, menu_selector(Game::BtnSender)); btnPlayer2->setPosition(ccp(centerWin.x ,centerWin.y - 60)); btnPlayer2->setTag(10); CCMenu* MenuTurn = CCMenu::menuWithItems(btnPlayer1,btnPlayer2,NULL); MenuTurn->setPosition(CCPointZero); sfchoiceturn->addChild(MenuTurn, 1);
Universitas Sumatera Utara
// konfirmasi exit sfkonfirmasi = CCSprite::spriteWithFile("bg_exit.png"); sfkonfirmasi->setPosition(centerWin); this->addChild(sfkonfirmasi,11); CCMenuItemImage * btnYes = CCMenuItemImage::itemFromNormalImage( "yes_1.png", "yes_2.png", this, menu_selector(Game::BtnSender)); btnYes->setPosition(ccp(centerWin.x - 60,centerWin.y - 30)); btnYes->setTag(7); CCMenuItemImage * btnNo = CCMenuItemImage::itemFromNormalImage( "no_1.png", "no_2.png", this, menu_selector(Game::BtnSender)); btnNo->setPosition(ccp(centerWin.x + 60,centerWin.y - 30)); btnNo->setTag(8); CCMenu* MenuKonf = CCMenu::menuWithItems(btnYes,btnNo, NULL); MenuKonf->setPosition(CCPointZero); sfkonfirmasi->addChild(MenuKonf, 1); konfExit = false; sfkonfirmasi->setIsVisible(false); // particle saat game over m_emitter = CCParticleRain::node(); m_emitter->retain(); this->addChild(m_emitter, 10); m_emitter->setLife(4); m_emitter->setTexture( CCTextureCache::sharedTextureCache()->addImage ("star.png")); CCPoint p = m_emitter->getPosition(); m_emitter->setPosition( CCPointMake( p.x, p.y+100) ); ccColor4F ccColor4F ccColor4F ccColor4F
startClr = {0.8f,0.8f,0.8f,1.0f}; endClr ={0.1f,0.1f,0.1f,0.5f}; varstartClr ={0.5f,0.5f,0.5f,0.2f}; varendClr ={0.1f,0.1f,0.1f,0.1f};
// random perubahan warna m_emitter->setStartColor(startClr); m_emitter->setEndColor(endClr); m_emitter->setStartColorVar(varstartClr); m_emitter->setEndColorVar(varendClr); // random ukuran mulai dari 50 - 20 pixel m_emitter->setStartSize(50.0f); m_emitter->setEndSize(20.0f); // random perubahan ukuran dari 10-1 pixel m_emitter->setStartSizeVar(10.0f); m_emitter->setEndSizeVar(1.0f); m_emitter->stopSystem();
Universitas Sumatera Utara
this->schedule(schedule_selector(Game::CongklakUpdate)); // sembunyikan tombol pilih first turn if(AI == true) { sfchoiceturn->setIsVisible(false); urut = 5; useristurn = true;// first run : player 1 } return true;
} void Game::CongklakUpdate(cocos2d::ccTime dt) { if(gameispaused || konfExit) return;
switch(urut) { case 0: urut = 2; break; case 2: break; case 5:// tunggu touch tombol play // urut = 10; break;
case 10:// animasi muncul text turn player 1 and player 2 { for(int i=0; i<2; i++) Kotak[i]->setIsVisible(false); if(useristurn) { txtInfo->setString("Player 1 is turn"); txtGame->setString("Turn : Player 1"); Kotak[0]->setIsVisible(true); }else{ txtInfo->setString("Player 2 is turn"); txtGame->setString("Turn : Player 2"); Kotak[1]->setIsVisible(true); } txtInfo->setScale(0.1f); CCActionInterval* actionTo = CCScaleTo::actionWithDuration( 0.2f, 1.0f); CCActionInterval* actionBack = CCScaleTo::actionWithDuration(0.2f,0.0f); CCFiniteTimeAction* action = CCSequence::actions(actionTo,CCDelayTime::actionWithDuration(0.5f), actionBack,NULL); txtInfo->runAction(action); } urut
= 15;
Universitas Sumatera Utara
break; case 15: // tunggu animasi text info selesai if(txtInfo->getScale() <= 0.0f) { urut = 20; canrun = true; // boleh main if(AI && useristurn == false) { canrun = false; urut = 17; } // munculin hint ,saat player 1 mau main melawan AI if(AI && useristurn) { ShowHint(); } } break; case 17:// AI move { idxlubang = AIMove(); if(idxlubang >= 0) urut = 30; } break; case 20:// tunggu touch lubang break; case 30:// animasi move biji congklak ke kotak { for(int i=1; i<= NilaiLubang[idxlubang]; i++) { int idxbiji = atoi(GetItemPos(isilubang[idxlubang], i).c_str()); CCPoint pos = Biji[idxbiji]->getPosition(); CCPoint calc; calc.x = PosLubang[idxlubang].x - pos.x; calc.y = PosLubang[idxlubang].y - pos.y; CCPoint target; int j =0; if(!useristurn) j=1; target.x = PosWadah[j].x + calc.x; target.y = PosWadah[j].y + calc.y; if(useristurn) { calc.x = (float)(target.x + ((pos.x target.x)/2)); }else{ calc.x = (float)(target.x -(( target.x - pos.x)/2)); }
Universitas Sumatera Utara
calc.y = (float)(pos.y + 150); ccBezierConfig bezier; bezier.controlPoint_1 = calc; bezier.controlPoint_2 = target; bezier.endPosition = target; CCActionInterval* acbezier = CCBezierTo::actionWithDuration(0.3f, bezier); Biji[idxbiji]->runAction(acbezier); svidx = idxbiji; svpoint = target; } tmpIsi = isilubang[idxlubang]; jlhbiji = NilaiLubang[idxlubang]; NilaiLubang[idxlubang]= 0; txtBiji[idxlubang]->setString("0"); urut = 40;
// hilangkan hint kedip2 if(AI && useristurn == true) { HideHint(); } } break;
case 40:// cek animasi move apakah sudah selesai if(Biji[svidx]->getPosition().x == svpoint.x && Biji[svidx]->getPosition().y == svpoint.y ) { urut = 50; //txtDebug->setString(tmpIsi.c_str()); urutan = idxlubang; isilubang[idxlubang] = ""; cntidx = 0; } break; case 50:// animasi move ke lubang if(jlhbiji > 0) { jlhbiji -=1; cntidx += 1; urutan+=1; if(urutan > 15) urutan = 0; if(useristurn) { if(urutan == 15) urutan = 0;
Universitas Sumatera Utara
}else{ if(urutan == 7) urutan = 8; }
int idxbiji = atoi(GetItemPos(tmpIsi,cntidx).c_str()); CCPoint calc ; CCPoint target; target = PosLubang[urutan]; target.x = target.x + (rand()%-10); target.y = target.y + (rand()%-10); calc.x = Biji[idxbiji]->getPosition().x + ((target.x - Biji[idxbiji]->getPosition().x) /2); calc.y = PosLubang[urutan].y + 150; ccBezierConfig bezier; bezier.controlPoint_1 = calc; bezier.controlPoint_2 = target; bezier.endPosition = target; CCActionInterval* acbezier = CCBezierTo::actionWithDuration(0.3f, bezier); Biji[idxbiji]->runAction(acbezier);
svidx = idxbiji; svpoint = target; urut = 55; }else{ urut = 70; // cek free turn if(useristurn && urutan == 7) { useristurn = false; }else if(useristurn == false && urutan == 15) { useristurn = true; }else{ // cek tembak if(NilaiLubang[urutan] == 1 && ((useristurn && urutan <=6) || (useristurn == false && urutan >= 8))) { CCPoint target; int k; int g; k = (14-urutan); if(useristurn) { target = PosLubang[7]; g = 7; }else{ target = PosLubang[15]; g = 15; } if(NilaiLubang[k] > 0)
Universitas Sumatera Utara
{ target.x += (rand()%-10); target.y += (rand()%-10); NilaiLubang[g] += NilaiLubang[urutan] + NilaiLubang[k]; isilubang[g] += "," + isilubang[urutan] + "," + isilubang[k]; txtBiji[g]-> setString(intTostr(NilaiLubang[g]).c_str());
`
// tembak player 2 int a = atoi(isilubang[urutan].c_str()); CCActionInterval * move = CCMoveTo::actionWithDuration(0.5f,target); Biji[a]->runAction(move); svidx = a; svpoint = target; for(int i=1; i<= NilaiLubang[k]; i++) { int p = atoi(GetItemPos(isilubang[k],i).c_str()); CCActionInterval * move1 = CCMoveTo::actionWithDuration(0.5f,target); Biji[p]->runAction(move1); } isilubang[urutan] = ""; NilaiLubang[urutan] = 0; isilubang[k] = ""; NilaiLubang[k] = 0; txtBiji[urutan]-> setString(intTostr(NilaiLubang[urutan]).c_str()); txtBiji[k]-> setString(intTostr(NilaiLubang[k]).c_str()); urut = 90;
} }else if(NilaiLubang[urutan] > 1) { canrun = false; idxlubang = urutan; urut = 30; } } } break; case 55:// biji masuk ke lubang if(Biji[svidx]->getPosition().x == svpoint.x && Biji[svidx]->getPosition().y == svpoint.y ) { if(mutesound == false)
Universitas Sumatera Utara
unsigned int tSfx = SimpleAudioEngine::sharedEngine()-> playEffect("sound1.wav",false); NilaiLubang[urutan] += 1; isilubang[urutan] = AddItem(isilubang[urutan],intTostr(svidx)); txtBiji[urutan]-> setString(intTostr(NilaiLubang[urutan]).c_str()); urut = 60; } break; case 60: urut = 50; break; case 70:// cek game over { idxover = 1; gameover = true; for(int i=0; i<7; i++) { if(NilaiLubang[i] > 0) { gameover = false; i = 7; } } if(gameover == false) { gameover = true; idxover = 0; for(int i=8; i<15; i++) { if(NilaiLubang[i] > 0) { gameover = false; i = 15; } } } if(gameover == false) { urut = 80; }else{ urut = 100; gameover = true; canrun = false; } } break;
case 80:// tukar giliran pemain if(useristurn) { useristurn = false;
Universitas Sumatera Utara
}else{ useristurn = true; } urut = 10; break;
case 90: if(Biji[svidx]->getPosition().x == svpoint.x && Biji[svidx]->getPosition().y == svpoint.y ) { urut = 70; } break;
case 100: { int j = 0; int g = 7; if(idxover == 1) { j = 8; g = 15; } CCPoint target = PosLubang[g]; target.x += (rand()%-10); target.y += (rand()%-10); for(int i= j; i<(7+j); i++) { if(NilaiLubang[i]>0) { NilaiLubang[g] += NilaiLubang[i]; isilubang[g] = AddItem(isilubang[g],isilubang[i]); for(int k=1; k<= NilaiLubang[i]; k++) { int a = atoi(GetItemPos(isilubang[i],k).c_str()); CCActionInterval * move = CCMoveTo::actionWithDuration(0.5f,target); Biji[a]->runAction(move); svidx = a; svpoint = target; } NilaiLubang[i] = 0; isilubang[i] = ""; txtBiji[i]->setString("0"); } } txtBiji[g]-> setString(intTostr(NilaiLubang[g]).c_str()); urut = 105;
Universitas Sumatera Utara
} break; case 105: if(Biji[svidx]->getPosition().x == svpoint.x && Biji[svidx]->getPosition().y == svpoint.y ) { txtDebug->setString("Game Over"); urut = 110; } break;
case 110: { if(NilaiLubang[7] > NilaiLubang[15]) { txtInfo->setString("Player 1 is winner"); }else if(NilaiLubang[7] == NilaiLubang[15]) { txtInfo->setString("The Game is draw"); }else{ txtInfo->setString("Player 2 is winner"); } txtInfo->setScale(0.1f); CCActionInterval* actionTo = CCScaleTo::actionWithDuration( 0.2f, 1.0f); txtInfo->runAction(actionTo); urut = 115; // munculin particle (efek animasi) saat game over m_emitter->resetSystem(); } break;
case 115: if(txtInfo->getScale() >= 1.0f) { urut = 120; } break;
case 120: gameispaused = false; btnPlay->setIsVisible(true); btnPause->setIsVisible(false); urut = 130; break;
case 130: break; } }
Universitas Sumatera Utara
void Game::BtnSender(CCObject* pSender) { CCSprite * sSender = (CCSprite*)pSender; int tag = sSender->getTag(); if(sSender->getIsVisible() == false) return;
if(tag == 9 || tag == 10) { sfchoiceturn->setIsVisible(false); urut = 5; if(tag == 9) { useristurn = true;// first run : player 1 }else{ useristurn = false; // first run : player 2 } return; } if(tag == 7 && konfExit) // tekan tombol yes exit { CCDirector::sharedDirector()->popScene(); return; }else if(tag == 8 && konfExit) // tekan tombol no exit { konfExit = false; sfkonfirmasi->setIsVisible(false); return; } if(konfExit || urut < 5) return; if(tag == 1) // tekan tombol back { if(konfExit == false) { konfExit = true; sfkonfirmasi->setIsVisible(true); } }else if(tag == 2) // tombol play { if(gameispaused == false) { if(urut >= 130) // reset game { this->unscheduleAllSelectors(); this->setIsTouchEnabled(false); AllScene->removeAllChildrenWithCleanup(true); this->removeAllChildrenWithCleanup(true); this->init(); }else{ urut = 10; btnPlay->setIsVisible(false); btnPause->setIsVisible(true);
Universitas Sumatera Utara
} }else{ gameispaused = false; btnPlay->setIsVisible(false); btnPause->setIsVisible(true); bg_paused->setIsVisible(false); btnRetry->setIsVisible(false); } }else if(tag == 3) // tombol pause { gameispaused = true; btnPlay->setIsVisible(true); btnPause->setIsVisible(false); bg_paused->setIsVisible(true); btnRetry->setIsVisible(true); }else if(tag == 4) // retry game { this->unscheduleAllSelectors(); this->setIsTouchEnabled(false); AllScene->removeAllChildrenWithCleanup(true); this->removeAllChildrenWithCleanup(true); this->init(); } }
void Game::keyBackClicked() { // Back to Home // if(urut < 5) return;
if(konfExit == false) { konfExit = true; sfkonfirmasi->setIsVisible(true); } } if(urut > 100 || gameispaused || konfExit) return; string str = "x: "; str += intTostr((int)location.x) + " y: "+ intTostr((int)location.y); //txtDebug->setString(str.c_str());
if(canrun) { int j = 0; if(useristurn == false) j = 8 ; for(int i= (0+j); i <(7+j); i++)
Universitas Sumatera Utara
{ if(NilaiLubang[i] > 0) // cek touch area lubang kecil { if(location.x >= (PosLubang[i].x - 20) && location.x <= (PosLubang[i].x + 20)) { if(location.y >= (PosLubang[i].y - 20) && location.y <= (PosLubang[i].y + 20)) { //txtDebug->setString("Touch Area"); canrun = false; idxlubang = i; urut = 30; } } } } } } int Game::RandomMove() { int tmpi = -1; for(int i=8; i<15; i++) { if(NilaiLubang[i] > 0 ) { if((rand()%10) == 6) { tmpi = i; i = 15; break; } } } return tmpi; }
int Game::EasyMove() { // get free turn int tmpi= -1; for(int i=14; i>=8; i--) { if(GetNilaiLubang(i) == 15-i) { if(GetNilaiLubang(i) != 0) return i; } }
return RandomMove(); }
Universitas Sumatera Utara
int Game::MediumMove() { // get free turn int tmpi= -1; for(int i=14; i>=8; i--) { if(GetNilaiLubang(i) == 15-i) { if(GetNilaiLubang(i) != 0) return i; } }
int int int int int int
bestmove = 0; bestmovevalue = 0; pitvalue; pitlocation; otherpitlocation; otherpitvalue;
for (int i = 8; i < 14; i++) { pitvalue = GetNilaiLubang(i); pitlocation = i + pitvalue; if (pitvalue > 0) { if (pitlocation > 8 && pitlocation < 15) { if (GetNilaiLubang(pitlocation) == 0) {// cek bisa melakukan tembak otherpitlocation = ((15 - pitlocation) * 2 )+ pitlocation; otherpitvalue = GetNilaiLubang(otherpitlocation); if (otherpitvalue > 0 && bestmovevalue <= otherpitvalue) { bestmove = i; bestmovevalue = otherpitvalue; } } } } } if (bestmove > 0) return bestmove; return RandomMove(); } int Game::HardMove() { // get free turn int tmpi= -1; for(int i=14; i>=8; i--) { if(GetNilaiLubang(i) == 15-i) { if(GetNilaiLubang(i) != 0)
Universitas Sumatera Utara
return i; } } int int int int int int
bestmove = 0; bestmovevalue = 0; pitvalue; pitlocation; otherpitlocation; otherpitvalue;
for (int i = 8; i < 14; i++) { pitvalue = GetNilaiLubang(i); pitlocation = i + pitvalue; if (pitvalue > 0) { if (pitlocation > 8 && pitlocation < 15) { if (GetNilaiLubang(pitlocation) == 0) {// cek bisa melakukan tembak otherpitlocation = ((15 - pitlocation) * 2 )+ pitlocation; otherpitvalue = GetNilaiLubang(otherpitlocation); if (otherpitvalue > 0 && bestmovevalue <= otherpitvalue) { bestmove = i; bestmovevalue = otherpitvalue; } } } } } //if (bestmove > 0) //return bestmove;
//MiniMax - Alpha Beta Prunning
int ori[16]; for(int i=0; i<16; i++) { ori[i] = GetNilaiLubang(i); // original value }
//bestmove = 0; //bestmovevalue = 0; int AIvalue = 0; otherpitvalue = 0; int minval = -99; for(int i=8; i<15; i++) { AIvalue = 0; for(int j=0; j<16; j++) { tmpBoard[j] = ori[j];
Universitas Sumatera Utara
} // cek ada biji if(tmpBoard[i] > 0) { int tmpcnt = tmpBoard[i];// simpan jumlah biji congklak ditangan int istart = i;// urutan index tmpBoard[i] = 0; while(tmpcnt > 0) { istart += 1; if(istart == 7)// lompatin idx lumbung player istart += 1; if(istart > 15) istart = 0; tmpBoard[istart] += 1;// letakkan biji ke kotak simulasi if(istart == 15) { AIvalue += 1; // letakkan biji ke lumbung AI }
tmpcnt -=1; if(tmpcnt == 0) { // biji ditangan habis // cek apakah langkah AI mati atau melakukan tembakan atau lanjut main if(istart == 15) //langkah terakhir dilumbung AI,=> free turn { bestmove = i; i = 15; return bestmove; }else if(istart >= 8 && istart <= 14 && tmpBoard[istart] == 1) // cek melakukan tembakan { int a = ((15-istart)*2)+ istart; if(a >15) a = a -16; otherpitvalue = tmpBoard[a]; if(otherpitvalue > 0)// melakukan tembakan { otherpitvalue +=tmpBoard[istart]; AIvalue += otherpitvalue; } }else if(tmpBoard[istart] > 1) {// lanjut main tmpcnt = tmpBoard[istart]; tmpBoard[istart] = 0; }else{
Universitas Sumatera Utara
// mati langkah } } }
// Alpha Beta - Prunning if(bestmovevalue if(bestmovevalue <= AIvalue && AIvalue > 0) { if(bestmovevalue < AIvalue) { bestmovevalue bestmovevalue = AIvalue; bestmove = i; }else if(bestmovevalue == AIvalue) { int val = getMinPlayer(tmpBoard) * -1; if(val > minval) { minval = val; bestmovevalue bestmovevalue = AIvalue; bestmove = i; } } } } } if (bestmove > 0) return bestmove; return RandomMove(); } void Game::ShowHint() Game::ShowHint() { int ori[16]; for(int i=0; i<16; i++) { ori[i] = GetNilaiLubang(i); // original value } int tmpHint = getMinPlayer(ori); int idxHint = idxHintSv; if(idxHint != -1) idxkedip[0] = idxHint; for(int i=0; i<7; i++) { if(ori[i] > 0) { for(int j=0; j<3; j++) { if(idxkedip[j] == -1 && (i != idxkedip[0])) { idxkedip[j] = i; j =3; }
Universitas Sumatera Utara
} } } for(int i=0; i<3; i++) { if(idxkedip[i] != -1) { //if( i == 0) // buka code, untuk lihat hint terbaik //{ CCRepeatForever *repeat = CCRepeatForever::actionWithAction(CCBlink::actionWithDuration(2, 4)); lubangkedip[idxkedip[i]]->runAction(repeat); //} lubangkedip[idxkedip[i]]->setIsVisible(true); } }
} void Game::HideHint() Game::HideHint() { for(int i=0; i<3; i++) { if(idxkedip[i] != -1) { lubangkedip[idxkedip[i]]->stopAllActions(); lubangkedip[idxkedip[i]]->setIsVisible(false); } idxkedip[i] = -1; } } int Game::getMinPlayer(int board[16]) { idxHintSv = -1; int ori[16]; for(int i=0; i<16; i++) { ori[i] = board[i]; // original value } int int int int
bestmove = 0; bestmovevalue = 0; Playervalue = 0; otherpitvalue = 0;
for(int i=0; i<7; i++)// Player { Playervalue = 0; for(int j=0; j<16; j++) { tmpBoard[j] = ori[j]; } // cek ada biji if(tmpBoard[i] > 0) {
Universitas Sumatera Utara
int tmpcnt = tmpBoard[i];// tmpBoard[i];// simpan jumlah biji congklak ditangan // int istart = i;// urutan index tmpBoard[i] = 0; while(tmpcnt while(tmpcnt > 0) { istart += 1; if(istart == 15)// lompatin idx lumbung AI istart += 1; if(istart > 15) istart = 0; tmpBoard[istart] += 1;// letakkan biji ke kotak simulasi if(istart == 7) { Playervalue += 1; // letakkan biji ke lumbung Player }
tmpcnt -=1; if(tmpcnt == 0) { // biji ditangan habis // cek apakah langkah Player mati atau melakukan tembakan atau lanjut main if(istart >= 0 && istart <= 6 && tmpBoard[istart] == 1) // cek melakukan tembakan { int a = ((7-istart)*2)+ istart; if(a >15) a = a -16; otherpitvalue otherpitvalue = tmpBoard[a]; tmpBoard[a]; if(otherpitvalue > 0)// melakukan tembakan { otherpitvalue += tmpBoard[istart]; Playervalue += otherpitvalue; } }else if(tmpBoard[istart] > 1) {// lanjut main tmpcnt = tmpBoard[istart]; tmpBoard[istart] = 0; }else{ // mati langkah } } }
Universitas Sumatera Utara
// Alpha Beta - Prunning if(bestmovevalue <= Playervalue && Playervalue > 0) { bestmovevalue = Playervalue; bestmove = i; idxHintSv = bestmove; } } }
if (bestmovevalue > 0) return bestmovevalue; return 0; } int Game::AIMove() { int move; if(levelgame == 1) { move = EasyMove(); }else if(levelgame == 2) { move = MediumMove(); }else if(levelgame == 3){ move = HardMove(); } return move; } int Game::GetNilaiLubang(int idx) { while(idx > 15) idx = (idx-16); return NilaiLubang[idx]; }
string Game::intTostr(int val) { std::stringstream ss; ss << val; return ss.str(); } string Game::CreateAngka(int min, int max) { string tmp = ""; for(int i= min; i<=max; i++) {
Universitas Sumatera Utara
if(i < max) { tmp += intTostr(i) + "," ; }else{ tmp += intTostr(i); } } return tmp; } string Game::GetItemPos(string pstr,int pos) { string tmp = ""; int cnt; cnt = 1; uint32_t maxchar ; maxchar = pstr.length(); for(uint32_t i=0 ; i= pos) { return tmp; } tmp = ""; cnt += 1; }else{ tmp = tmp + pstr.substr(i,1); } } if((cnt+1) < pos) tmp = "";
// jika posisi item lebih kecil dr jlh item
return tmp; } string Game::AddItem(string source,string item) { string tmp = source; if(source.length() <= 0) return item; tmp += "," + item; return tmp; }
Universitas Sumatera Utara
LAMPIRAN B
Universitas Sumatera Utara
LAMPIRAN PERTANYAAN DAN HASIL KUESIONER
Pertanyaan Kuesioner
Aspek Antarmuka
Hasil Penilaian No.
Sasaran Penilaian
1.
Desain aplikasi secara umum Tampilan papan dan biji congklak Warna papan dan biji congklak Tampilan animasi permainan Desain tombol menu Audio
2. 3. 4. 5. 6.
Sangat baik
Baik
Cukup
Buruk
Sangat buruk
Aspek Penggunaan Aplikasi
Hasil Penilaian No.
1. 2. 3. 4.
Sasaran Pertanyaan
Sangat baik
Baik
Cukup
Buruk
Sangat Buruk
Kemudahan menjalankan aplikasi Kemudahan memahami tombol menu Panduan permainan yang tersedia Kesesuaian tingkat kesulitan pada setiap level
Universitas Sumatera Utara