PENGGUNAAN ALGORITMA BRUTE FORCE DALAM PERMAINAN PERMAINAN THE LEGEND OF DRUNKEN MAN

dokumen-dokumen yang mirip
Strategi Algoritma Penyelesaian Puzzle Hanjie

Penggunaan Algoritma Backtracking pada Permainan Mummy Maze

Penerapan Algoritma Runut-Balik (Backtracking) pada Permainan Nurikabe

Aplikasi Algoritma Greedy untuk Pergerakan Musuh pada Permainan Pac-Man

PENCARIAN SOLUSI TTS ANGKA DENGAN ALGORITMA RUNUT BALIK BESERTA PENGEMBANGANNYA

IMPLEMENTASI ALGORITMA GREEDY PADA PERMAINAN OTHELLO

Penerapan Algoritma Brute Force dan Backtracking pada Permainan Skycraper

Algoritma Divide and Conquer untuk Optimasi Pemberian Efek Aura pada Permainan DotA (Defense of the Ancient)

PERBANDINGAN APLIKASI ALGORITMA BRUTE-FORCE DAN KOMBINASI ALGORITMA BREADTH FIRST SEARCH DAN GREEDY DALAM PENCARIAN SOLUSI PERMAINAN TREASURE HUNT

Perbandingan Algoritma Brute Force dan Backtracking dalam Permainan Word Search Puzzle

AlgoritmaBrute Force. Desain dan Analisis Algoritma (CS3024)

Penerapan Algoritma Brute Force pada Teka-teki Magic Square 3 x 3

Penerapan Algoritma Brute Force pada permainan Countdown Number

ANTIMAGIC PUZZLE. Alwi Afiansyah Ramdan

PENERAPAN ALGORITMA BACKTRACKING PADA PERMAINAN WORD SEARCH PUZZLE

Algoritma Brute Force (Bagian 1) Oleh: Rinaldi Munir

Penerapan Algoritma Brute Force pada Permainan Kartu 24 (24 game)

Aplikasi Algoritma Brute Force dan Backtracking pada Permainan Slitherlink

Penggunaan Algoritma Greedy untuk menyelesaikan Permainan Othello

Penyelesaian Permainan Pacman yang disederhanakan dengan Algoritma Backtracking

Algoritma Brute Force

Penggunaan Brute Force dalam Mencari Pergerakan pada Permainan Pokémon Shuffle

PERBANDINGAN ALGORITMA GREEDY DAN BRUTE FORCE DALAM SIMULASI PENCARIAN KOIN

Penerapan Algoritma Greedy pada Permainan Tower Defense

Penerapan Algoritma DFS pada Permainan Sudoku dengan Backtracking

Penerapan Algoritma Greedy pada Artificial Inteligence dalam Permainan Defence of the Ancient

Penerapan Algoritma Runut-Balik untuk Menyelesaikan Permainan Pencarian Kata

Pencarian Solusi Permainan Fig-Jig Menggunakan Algoritma Runut-Balik

Algoritma Brute Force pada Fluid Particle Engine

Penerapan Strategi Algoritma Menyelesaikan Kompleksitas Pixel Maze secara Otomatis pada Virupizxel

Implementasi Algoritma Greedy pada Permainan Ludo

Penerapan Algoritma Greedy Pada Game Tower Defense: Tower of Greece

Penyelesaian Sum of Subset Problem dengan Dynamic Programming

PENGGUNAAN ALGORITMA DIVIDE AND CONQUER UNTUK OPTIMASI KONVERSI BILANGAN DESIMAL KE BINER

Penerapan Algoritma Brute Force dalam mencari Faktor Prima pada suatu Bilangan

Penyelesaian Berbagai Permasalahan Algoritma dengan Kombinasi Algoritma Brute Force dan Greedy

Penerapan Algoritma Runut-balik pada Permainan Math Maze

ALGORITMA RUNUT-BALIK (BACKTRACKING ALGORITHM) PADA MASALAH KNIGHT S TOUR

Penerapan Algoritma Greedy untuk Permainan Halma

Analisis dan Strategi Algoritma

SOLUSI ALGORITMA BACKTRACKING DALAM PERMAINAN KSATRIA MENYEBRANG KASTIL

PENERAPAN ALGORITMA RUNUT-BALIK (BACKTRACKING) DALAM PENYELESAIAN PERMAINAN SUDOKU

PENGGUNAAN ALGORITMA BRANCH AND BOUND UNTUK MENYELESAIKAN PERSOALAN PENCARIAN JALAN (PATH-FINDING)

Penerapan Algoritma Backtracking pada Game The Lonely Knight

Penerapan Algoritma Greedy dan Backtrackng Dalam Penyelesaian Masalah Rubik s Cube

Penggunaan Algoritma Brute Force dan Greedy dalam Permainan Atomas

Penerapan Algoritma Greedy untuk Permainan Flood It

Perbandingan Algoritma Brute Force dan Breadth First Search dalam Permainan Onet

Algoritma Brute Force

Penerapan DFS dan BFS dalam Pencarian Solusi Game Japanese River IQ Test

PENGGUNAAN ALGORITMA BACKTRACKING DALAM PENCARIAN KOEFISIEN ROOK POLYNOMIAL

PENGGUNAAN EXHAUSTIVE SEARCH SEBAGAI SOLUSI PERMAINAN SCRAMBLE

PERMAINAN KNIGHT S TOUR DENGAN ALGORITMA BACKTRACKING DAN ATURAN WARNSDORFF

Penyelesaian Game Lights Out dengan Algoritma Runut Balik

Pohon Biner Sebagai Struktur Data Heap dan Aplikasinya

Analisis Beberapa Algoritma dalam Menyelesaikan Pencarian Jalan Terpendek

Implementasi Brute Force dan Greedy dalam Permainan Big Two (Capsa)

Penerapan Algoritma Greedy pada Intelegensia Buatan untuk Transfer Pemain dalam Permainan Simulasi Sepakbola

ALGORITMA RUNUT-BALIK UNTUK MENGGANTIKAN ALGORITMA BRUTE FORCE DALAM PERSOALAN N-RATU

PERBANDINGAN ALGORITMA BFS DAN DFS DALAM PEMBUATAN RUTE PERJALANAN OBJEK PERMAINAN 2 DIMENSI

Analisis Pengimplementasian Algoritma Greedy untuk Memilih Rute Angkutan Umum

Penyelesaian Permasalahan Nonogram dengan Algoritma Runut Balik

Kompleksitas Algoritma Pengurutan Selection Sort dan Insertion Sort

Aplikasi Algoritma Runut Balik dalam Pembangkitan Elemen Awal Permainan Sudoku

Penyelesaian Permainan 3 missionaries and 3 cannibals Dengan Algoritma Runut-Balik

Pencarian Solusi Permainan Flow Free Menggunakan Brute Force dan Pruning

Implementasi Algoritma Runut Balik dalam Pengenalan Citra Wajah pada Basis Data

PENGGUNAAN BRUTE FORCE UNTUK MERETAS PASSWORD FILE RAR

Penerapan Algoritma Greedy dalam Pembuatan Artificial Intelligence Permainan Reversi

Penerapan Algoritma Greedy dalam Permainan Othello

Penggunaan Algoritma Runut-balik Pada Pencarian Solusi dalam Persoalan Magic Square

Penerapan Algoritma Backtracking untuk Menyelesaikan Permainan Hashiwokakero

Penerapan Algoritma Greedy Best First Search untuk Menyelesaikan Permainan Chroma Test : Brain Challenge

Penggunaan Algoritma DFS dan BFS pada Permainan Three Piles of Stones

Penerapan Algoritma Branch & Bound dan Backtracking pada Game Flow

Studi Mengenai Perbandingan Sorting Algorithmics Dalam Pemrograman dan Kompleksitasnya

KOMPLEKSITAS ALGORITMA PENGURUTAN (SORTING ALGORITHM)

Algoritma Heap Sort. Sekolah Teknik Elektro & Informatika Departemen Teknik Informatika, Institut Teknologi Bandung Jl. Ganesha 10, Bandung

IMPLEMENTASI ALGORITMA GREEDY PADA PERMAINAN CONGKLAK

Decrease and Conquer

Algoritma Pencarian String Knuth-Morris-Pratt Dalam Pengenalan Tulisan Tangan

Pengantar Strategi Algoritmik. Oleh: Rinaldi Munir

Penggunaan Graf dalam Pemodelan Matematis Permainan Delapan Jari

Strategi Optimized Brute Force Pada Tent Puzzle Solver

Implementasi Algoritma Greedy dalam Pembagian kerja pada Mesin yang Identik

PENGGUNAAN ALGORITMA HUNGARIAN DALAM MENYELESAIKAN PERSOALAN MATRIKS BERBOBOT

Aplikasi Algoritma Branch and Bound dalam Pencarian Solusi Optimum Job Assignment Problem

PENERAPAN ALGORITMA RUNUT BALIK DALAM PERMAINAN TEKA-TEKI SILANG

I. PENDAHULUAN II. DASAR TEORI. Contoh lainnya: Solusi: 0= V,1= I,2= O,3= R, 4= N,5= L,7= A,8= F,9= E.

Algoritma Greedy untuk Pengambilan Keputusan dalam Permainan Kartu Hearts

Penerapan Algoritma Brute force dan Greedy pada Penjadwalan Disk

Penentuan Keputusan dalam Permainan Gomoku dengan Program Dinamis dan Algoritma Greedy

PENERAPAN ALGORITMA BFS PADA CHINESE SLIDE BLOCK PUZZLE (KLOTSKI)

Algoritma Brute Force

Penggunaan Algoritma Greedy Dalam Perancangan Papan Teka Teki Silang

Analisis Penerapan Algoritma Backtracking Pada Pencarian Jalan Keluar di Dalam Labirin

TELAAH WAKTU EKSEKUSI PROGRAM TERHADAP KOMPLEKSITAS WAKTU ALGORITMA BRUTE FORCE DAN DIVIDE AND CONQUER DALAM PENYELESAIAN OPERASI LIST

MAKALAH ALGORITMA DIVIDE AND CONQUER

Pelacakan dan Penentuan Jarak Terpendek terhadap Objek dengan BFS (Breadth First Search) dan Branch and Bound

Teknik Pengurutan Kartu Remi

Transkripsi:

PENGGUNAAN ALGORITMA BRUTE FORCE DALAM PERMAINAN PERMAINAN THE LEGEND OF DRUNKEN MAN Wiradeva Ar Kristawarman 13505053 Program Studi Informatika Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung Jl.Ganesa 10, Bandung Indonesia e-mail: 15053@students..itb.ac.id ABSTRAK Saat ini algoritma brute force sudah jarang dipakai untuk kecerdasan buatan (articial intelligence) dalam sebuah permainan (games) terlebih lagi dalam permainan yang sudah sangat kompleks baik dari segi grafis ataupun articial intelligence seperti Winning Eleven 10, Final Fantaxy XII, atau permainan yang paling populer saat ini yaitu Warcraft III Frozen Throne DoTA. Walaupun begitu, untuk program permainan sederhana algoritma brute force masih cukup mangkus digunakan terutama dari segi implementasi. Hal ini dikarenakan game-game kecil tersebut biasanya dibuat untuk kesenangan pembuatnya dan dibuat dalam waktu yang singkat sehingga mereka lebih memilih algoritma yang mudah diimplementasikan, seperti brute force untuk kecerdasan buatan daripada algoritma lain seperti backtracking, IDA*, atau branch and bound yang lebih sukar diimplementasikan. Program permainan yang menggunakan algoritma brute force sebagai algoritma kecerdasan buatannya yang akan dibahas pada makalah ini adalah permainan The Legend of DrunkenMan. Permainan The Legend of DrunkenMan ini merupakan tugas dari Mata Kuliah IF2281 Pemrograman Berorientasi Objek di Informatika ITB yang dibuat secara kelompok dan salah satu anggotanya adalah penulis. Harapan penulis menulis makalah ini adalah agar memberikan pandangan kepada pembaca bahwa dengan algoritma yang sederhana kita bisa membuat kecerdasan buatan yang sudah cukup baik namun tetap mengingatkan pembaca untuk tetap mengembangkan algoritma yang lebih cerdas agar permainan menjadi lebih menarik. Kata kunci: brute force, permainan, optimasi, kecerdasan buatan, The Legend of DrunkenMan. 1. PENDAHULUAN 1.1. Deskripsi Masalah Permainan The Legend of DrunkenMan merupakan permainan yang dikembangkan oleh kelompok CiWork++ dengan penulis sebagai salah satu anggotanya. Permainan ini pertama kali dibuat bertujuan untuk melengkapi tugas dalam mata kuliah pemrograman berorientasi objek. Oleh karena itu, elemen yang paling diutamakan dalam permainan ini adalah Graphical User Interface yang menari dan interakt (syarat sebuah permainan), sedangkan articial intelligence yang ada di permainan ini bukan menjadi elemen yang utama. Permainan ini sendiri bercerita tentang seorang jagoan yang tinggal di sebuah kota ajaib. Orang ini dikenal dengan sebutan DrunkenMan oleh penduduk sekitar karena setiap malam selalu ada di bar yang ada di kota untuk minum-minum bersama teman-temannya yang lain. Penduduk di kota ajaib ini setiap malam selalu terganggu oleh keberadaan serigala dan monster yang banyak berkeliaran yang kemunculannya disebabkan oleh sesuatu yang misterius. Oleh karena itu, raja dari kota ajaib ini menyelenggarakan sayembara bagi siapa yang bisa mengembalikan ketentraman kota ajaib dengan cara membasmi serigala dan monster yang ada di kota akan mendapatkan harta yang berlimpah. Dan tentu saja jagoan kota DrunkenMan tidak ingin ketinggalan sayembara ini karena dia sangat membutuhkan uang untuk melanjutkan kebiasaannya minum-minum di bar. Dalam sayembara ini raja hanya menerima 2 orang paling sakti saja yang boleh mengikuti sayembara ini. Permainan The Legend of DrunkenMan adalah game dengan tampilan 2 dimensi dengan sudut pandang kamera dari atas. Tampilannya sendiri diimplementasikan sebagai matrix of PictureBox. Setiap grid(titik koordinat yang ada di matriks) pada matriks itu bisa berupa tembok atau jalan yang melambangkan keadaan kota ajaib tersebut, atau bisa juga berupa pemabuk, serigala, monster, pedang, pedang super, buah, atau fly wing yang merupakan elemen game yang berinteraksi satu sama lain. MAKALAH IF2251 STRATEGI ALGORITMIK TAHUN 2007

Gambar 1. Tampilan permainan The Legend of DrunkenMan Karena raja hanya menyelenggarakan sayembara ini untuk dua kontestan saja, maka permainan ini hanya terdiri dari dua pemabuk sebagai tokoh utama. Untuk mode permainan dua pemain, maka kedua pemabuk digerakkan oleh dua orang pemain dan untuk mode permainan satu pemain, maka pemabuk yang pertama digerakkan oleh pemain sedangkan pemabuk yang kedua digerakkan oleh sistem pada komputer yang menggunakan diberikan kecerdasan buatan. Permainan ini boleh dibilang sangat sederhana. Sehingga untuk menggerakkan pemabuk yang digerakkan oleh sistem, kami membuat algoritma brute force yang na sebagai kecerdasan buatan dalam permainan ini. Pergerakan pemabuk yang digerakkan oleh komputer secara garis besar memiliki kelakuan sebagai berikut : a. Jika nyawanya masih banyak (melebihi batas yang ditetapkan, dalam hal ini 20 atau 40% dari nyawa maksimum pemabuk) dan pemabuk masih menggunakan tangan kosong, maka pemabuk akan berusaha mencari pedang yang ada dalam radius 3 kotak dari pemabuk (kota 7 x 7 dengan pemabuk ada di tengah). Namun jika tidak ada pedang dalam radius tersebut maka pemabuk akan bergerak menuju monster atau harimau yang paling dekat. Jika pemabuk sudah memiliki pedang pemabuk akan berusaha mencari item seperti buah atau sayap untuk teleport yang ada dalam radius 3 kota dari pemabuk (kotak 7 x 7 dengan pemabuk ada di tengah). Namun jika tidak ada item dalam radius tersebut, maka pemabuk akan bergerak menuju monster atau harimau yang paling dekat dengan pemabuk. b. Jika nyawa pemabuk sudah kritis (kurang dari batas yang ditetapkan, dalam hal ini 20), pemabuk akan berusaha mencari peri untuk mendapatkan penyembuhan sehingga nyawa pemabuk menjadi maksimum lagi. Pencarian peri ini tidak mempedulikan keadaan pemabuk memakai senjata atau masih tangan kosong. Kelakuan yang begitu mementingkan nyawa dibuat karena dalam permainan ini jika seorang pemabuk mati, maka pemabuk lainnya lah yang kemungkinan besar akan menjadi pemenang sayembara atau dengan kata lain menjadi pemenang permainan ini. 1.2. Dasar Teori Metode pemecahan masalah yang paling sederhana dan paling mudah adalah algoritma brute force. Istilah lain yang bertalian dengan brute force adalah exhaustive search. Brute force adalah sebuah pendekatan yang lempeng (straightforward)untuk memecahkan suatu masalah, biasanya didasarkan langsung pada pernyataan masalah (problem statement) dan definisi konsep yang dilibatkan. brute force memecahkan masalah dengan sangat sederhana, langsung dan dengan cara yang jelas(obvious way). brute force pada umumnya tidak cerdas dan tidak mangkus, karena ia membutuhkan jumlah langkah yang besar dalam penyelesainnya, terutama bila masalah yang dipecahkan berukuran besar(dalam hal ini ukuran masukannya). Kata force sendiri mengindikasikan kesan tidak intelektual. Kadangkadang algoritma brute force disebut juga algoritma na (naive algorithm). brute force seringkali merupakan pilihan yang kurang disukai karena ketidakmangkusannya itu, tetapi dengan mencari pola-pola yang mendasar, keteraturan, atau trik-trik khusus, biasanya akan membantuk kita menemukan algoritma yang lebih cerdas dan lebih mangkus. Untuk masalah yang ukurannya kecil, kesederhanaan brute force biasanya lebih diperhitungkan daripada ketidakmangkusannya. brute force sering digunakan sebagai basis bila membandingkan beberapa alternat algoritma yang mangkus. Misalnya pada perhitungan a n jika diselesaikan dengan algoritma brute force mudah diperlihatkan bahwa kompelksitas waktunya adalah dalam O(n). Bila perhitungan a n diselesaikan dengan metode Divide and Conquer, maka kompleksitas waktunya jauh lebih baik daripada teknik brute force yaitu O(log n). Meskipun brute force bukan merupakan teknik pemecahan masalah yang mangkus, namun metode brute force dapat diterapkan pada sebagian besar masalah. Agak sukar menunjukkan masalah yang tidak dapat dipecahkan dengna metode brute force. Bahkan ada masalah yang hanya dapat dipecahkan secara brute force. Beberapa pekerjaan mendasar di dalam komputer dilakukan secara brute force, seperti menghitung jumlah dari n buah bilangan, mencari elemen terbesar di dalam tabel, dan sebagainya. Selain itu, algoritma brute force seringkali lebih mudah diimplementasikan daripada algoritma yang lebih canggih, dan karena kesederhanaannya, kadang-

kadang algoritma brute force dapat lebih mangkus(dtinjau dari segi implementasi). 2. METODE Untuk membuat algoritma brute force yang akan digunakan sebagai kecerdasan buatan dalam permainan ini akan dibuat beberapa prosedur dan fungsi. Prosedur yang paling utama dibuat terlebih dahulu yang akan memanggil prosedur-prosedur lain yang ada di bawahnya. Prosedur ini yang akan menentukan kapan pemabuk akan mencari monster dan harimau, peri, senjata, atau item sesuai dengan keadaan pemabuk saat itu. Berikut ini adalah pseudo-code dari prosedur tersebut : procedure pemabukmelangkah(input mykota:kota, P:Pemabuk) senjata, atau item-item lainnya} temp:integer; (P.nyawa>20) then If (P.weapon=tanganKosong) then temp=carisenjata(mykota,p) temp=cariitem(mykota,p) (temp=0) then {jika tidak ada item atau pedang dalam radius 3 kotak maka akan mencari musuh} temp=carimusuh(mykota,p) temp = cariperi(mykota,p) P.arah=temp P.maju Jadi ada 4 fungsi yang salah satunya akan dipanggil oleh prosedur pemabukmelangkah yaitu carisenjata, cariitem,carimusuh, cariperi. Keempat fungsi ini akan mengembalikan integer yang merepresentasikan arah yang harus dituju jika pemabuk akan melangkah maju. Jika nyawa pemabuk misalnya 40 dan sedang tidak memakai senjata, maka yang akan dilakukan adalah mencari senjata dalam radius 3 kotak, jika tidak ada (temp=0) maka dia akan mencari musuh yang paling dekat dari posisinya sekarang kemudian melangkah sesuai arah yang didapat. Jika nyawa pemabuk misalnya 40 dan sedang memakai pedang, maka yang akan dilakukan adalah mencari item dalam radius 3 kotak. Jika tidak ada, maka dia akan mencari musuh. Jika nyawa pemabuk misalnya 11 dan memakai pedang, maka dia akan tetap melangkah mendekati peri. Fungsi carisenjata sendiri mempunyai pseudo-code seperti berikut : function carisenjata(input mykota:kota, P:Pemabuk) senjata, atau item-item lainnya Keluaran adalah integer 1,2,3,4, atau 0. 1 untuk utara,2 timur,3 selatan,4 barat, 0 untuk tidak ada arah yang cocok} i,j:integer; for i=p.x-3 to P.x do (mykota.grid[i,p.y]=pedang)or(mykota.grid[i,p.y]=pedangsuper) then 4 for i=p.x+3 downto P.x do (mykota.grid[i,p.y]=pedang)or(mykota.grid[i,p.y]=pedangsuper) then 2 for i=p.x-3 to P.x+3 do for j=p.y-3 to P.y do (mykota.grid[i,j]=pedang)or(mykota.grid[i,j ]=pedangsuper) then 1 for i=p.x-3 to P.x+3 do for j=p.y+3 downto P.y do (mykota.grid[i,j]=pedang)or(mykota.grid[i,j ]=pedangsuper) then 3 0 Maksud dari algoritma ini adalah, pada loop pertama dia memeriksa apakah ada senjata di 3 kotak sebelah barat(kiri) dari pemabuk jika ada dia akan melangkah ke kiri(arah 4). Jika tidak ada berpindah ke loop berikutnya, algoritma akan memeriksa apakah ada senjata di 3 kotak sebelah timur(kanan) dari pemabuk. Jika ada pemabuk akan melangkah ke kanan (arah 2). Jika tidak ada berpindah ke loop bersarang setelahnya, algoritma akan memeriksa apakah ada senjata di daerah utara(atas)

pemabuk, jika ada maka pemabuk akan melangkah ke atas(mengembalikan integer 1). Jika tidak ada akan berpindah ke loop bersarang yang terakhir. akan memeriksa apakah ada senjata di daerah selatan (bawah) pemabuk, jika ada maka pemabuk akan melangkah ke bawah (fungsi mengembalikan integer 3). Jika tetap tidak ada senjata setelah pemeriksaan sekitar pemabuk, maka fungsi akan mengembalikan integer 0 yang berarti tidak ada senjata di sekitar pemabuk. Untuk pembagian daerah yang lebih jelas silakan melihat gambar berikut: Gambar 2. Gambaran pembagian region fungsi carisenjata dan cariitem Grid yang diberi titik berwarna biru adalah daerah yang diperiksa pada loop pertama (mengembalikan 4 jika ada senjata). Grid yang diberi titik berwarna hijau adalah daerah yang diperiksa pada loop yang kedua (mengembalikan 2 jika ada senjata). Grid berwarna merah muda adalah daerah yang diperiksa pada loop yang ketiga yang berupa loop bersarang dan akan mengembalikan 1 jika ada senjata di daerah tersebut. Grid yang berwarna merah adalah daerah yang diperiksa pada loop yang terakhir dan akan mengembalikan 3 jika ada senjata di daerah tersebut. Untuk contoh gambar diatas, function carisenjata akan menghasilkan integer 1, karena senjata ada di daerah yang diberi titik pink. ini mempunyai kekurangan yaitu urutan pemeriksaan lebih diutamakan ke arah kiri, kanan, lalu kemudian baru daerah atas, dan bawah. Sehingga jika ada senjata yang terletak 1 kotak di atas pemabuk, namun ada lagi senjata 3 kotak di kiri pemabuk. Maka pemabuk akan bergerak ke kiri bukannya ke atas. Hal ini karena urutan pemeriksaan adalah kiri, kanan, atas, kemudian bawah. Fungsi selanjutnya adalah fungsi cariitem. Fungsi cariitem sangat mirip pseudo-code dan cara kerjanya dengan fungsi carisenjata sehingga pseudo-code dan cara kerjanya tidak perlu dituliskan ulang. Perbedaan di pseudo-code hanyalah pada pengecekan grid. Jika di fungsi carisenjata, di dalam tiap diperiksa apakah grid kota pedang atau pedangsuper, maka di fungsi cariitem, di dalam tiap nya yang diperiksa apakah grid kota tersebut potion atau flywing. Fungsi yang ketiga adalah fungsi carimusuh. Berbeda algoritmanya dengan carisenjata atau cariitem, carimusuh cakupan pemeriksaannya adalah satu kota. Hal ini dikarenakan dia harus terus bergerak walaupun letak musuhnya sangat jauh. Artinya fungsi carimusuh dan cariperi(akan dijelaskan kemudian) lebih diutamakan daripada carisenjata dan cariitem, karena salah satu objekt permainannya adalah membunuh monster atau serigala sebanyak mungkin. Berikut ini adalah pseudo-code fungsi carimusuh : function carimusuh(input mykota:kota, P:Pemabuk) senjata, atau item-item lainnya Keluaran adalah integer 1,2,3,4, atau 0. 1 untuk utara,2 timur,3 selatan,4 barat, } min,dxmin,dymin:integer dx,dy : integer min=1 dxmin=0 dymin=0 dx=0 dy=0 for i=2 to mykota.nbmakhluk do dxmin=abs(mykota.makhluk[min].x-p.x) dymin=abs(mykota.makhluk[min].y-p.y) dx=abs(mykota.makhluk[i].x-p.x) dy=abs(mykota.makhluk[i].y-p.y) (dx<dxmin)and(dy<dymin)and(mykota.grid[myko ta.makhluk[i].x,mykota.makhluk[i].y]=harima u or monster)then min=i; dxmin>dymin then mykota.makhluk[min].x-p.x>0 then 2 4 mykota.makhluk[min].y-p.y>0 then 3 1 carimusuh diatas idenya adalah mencari jarak terdekat dari makhluk ke i untuk i=1 to nbmakhluk. Yang dilakukan dalam algoritma ini pertama adalah menghitung jarak untuk tiap makhluk ke pemabuk. Setelah itu dibandingkan jaraknya dengan jarak minimum yang sebelumnya. Jika jarak makhluk yang sedang dihitung lebih kecil dari jarak minimum yang sebelumnya

maka makhluk yang sedang dihitung yang menjadi patokan minimum. Mengapa indeks i mulai dari 1 padahal array untuk menyimpan makhluk dimulai dari 0, hal ini dikarenakan makhluk yang ke 0 adalah peri yang jumlahnya dalam permainan hanya 1. cariperi hanya membandingkan posisi peri dengan pemabuk jika lebih dekat ke kiri maka pemabuk akan berjalan ke kiri, jika lebih dekat ke kanan maka pemabuk akan berjalan ke kanan, jika lebih dekat ke atas maka pemabuk akan berjalan ke atas, sedangkan jika lebih dekat ke bawah maka pemabuk akan berjalan ke atas. Namun ada kekurangan dalam algoritma ini, yaitu jika ada pembatas tembok antara pemabuk dengan makhluk terdekat, yang membuat pemabuk akan berhenti sementara untuk beberapa saat, sampai ada monster atau serigala yang mendekat kepadanya. Namun, hal ini tidak akan berpengaruh banyak terhadap keasyikan bermain karena monster dan serigala yang cukup banyak di dalam kota yang sempit sehingga kemungkinan pemabuk diam karena menabrak tembok jarang terjadi. Kompleksitas dari di atas keseluruhan adalah O(n) dengan n maksimum 49 atau banyak makhluk maksimum(dalam program permainan ini 20). Hasil ini didapat dari penjumlahan untuk tiap prosedur atau fungsi. Prosedur pemabukberjalan kompleksitasnya adalah O(n). Sedangkan kompleksitas waktu asimtotik untuk fungsi carisenjata dan cariitem adalah O(n) karena ada 2 loop bersarang yang jumlah perbandingan isi di dalam loop fix 49 kali. Kompleksitas fungsi carimusuh adalah O(n) untuk n adalah jumlah makhluk dengan jumlah makhluk maksimum di dalam permainan ini dibatasi 20. Kompleksitas fungsi cariperi adalah O(1). Sehingga jika dijumlahkan kompelksitas waktu asimtotik algoritma brute force ini adalah O(n). canggih, karena masih adanya kekurangan dalam algoritma brute force yang diimplementasikan di permainan ini, yaitu masalah jika pemabuk menabrak tembok yang membuat pemabuk akan terdiam beberapa saat. REFERENSI [1] Munir, Rinaldi, Diktat Kuliah IF2251 Strategi Algoritmik, Program Studi Teknik Informatika Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung, 2007 3. KESIMPULAN brute force lumayan cocok digunakan untuk kecerdasan buatan permainan sederhana seperti dalam permainan The Legend of DrunkenMan ini. Hal ini dikarenakan jenis permainan seperti ini yang sederhana. brute force seperti ini malah lebih mangkus diimplementasikan dalam permainan sederhana karena lebih mudah dimodelkan dan struktur data yang diperlukan lebih kecil, tidak seperti algoritma lain yang lebih canggih yang biasanya memerlukan tree dan antrian atau tumpukan. Untuk kompleksitas waktunya sendiri algoritma ini sudah cukup baik karena kompleksitas waktu asimtotiknya yang linier. Hal disebabkan karena memang permainannya yang sederhana dan berukuran kecil. Sehingga sangat disayangkan untuk menggunakan resource resource yang banyak untuk merancang kecerdasan buatan yang kompleks untuk permainan ini. Meskipun begitu tidak ada salahnya berusaha mengembangkan algoritma kecerdasan buatan yang lebih