Nama Kelompo%& D'EA BU(UNG PILIANG 1A2ALUDIN SANUR AND( SUR(O PRA(OGO )*+,-*.-/0 )*3,-*45/0 )*3,-*6..0
LABORATORIU2 PE2ROGRA2AN PROGRA2 STUDI TEKNIK INFOR2ATIKA FAKULTAS TEKNIK UNI7ERSITAS 2U'A22ADI(A' 2ALANG 4*.6
I8 TU1UAN
Mahasiswa mampu : 1. Mahasiswa mampu untuk membuat AI pada game Angry Birds 2. Mahasiswa mampu mengimplementasikan algoritma fuzzy pada game Angry Birds
menambah ke(epatan dan daya rusak' burung hitam yang bisa meledak' dan burung putih yang bisa men)atuhkan bom telur' burung hi)au yang bisa men)adi bumerang' burung merah atau hi)au berukuran besar yang bisa menghan(urkan lebih banyak struktur'burung orange yang bisa memperbesar diri' dan burung ungu bisa menembak tepat sasaran. Babi )uga mun(ul dalam ukuran yang berbeda. Babi ke(il relatif lemah dan mudah dihan(urkan baik oleh tembakan langsung atau dengan puing+puing dari bangunan yang rusak' babi lebih besar mampu mempertahankan diri dari banyak kerusakan. "uga' beberapa babi mengenakan helm ba)a' membuat mereka lebih tahan terhadap kerusakan struktur' sedangkan babi dengan mahkota paling banyak bisa menahan kerusakan. -etiap tingkat dimulai dengan )umlah' )enis' dan keterlibatan burung yang telah ditentukan. "ika semua babi bisa dikalahkan pada saat burung terakhir digunakan' tingkat selesai dan tingkat berikutnya terbuka. Poin diperoleh untuk setiap babi yang dikalahkan serta dari setiap kerusakan atau kehan(uran struktur' serta poin bonus yang akan diberikan untuk setiap burung yang tidak dipakai. -etelah menyelesaikan setiap tingkat' pemain menerima satu' dua' atau tiga bintang' tergantung pada nilai yang diterima. Pemain dapat kembali berusaha membuka tingkat sebanyak yang mereka inginkan agar berhasil menyelesaikan atau untuk mendapatkan poin tambahan dan & atau bintang+bintang tambahan.
Arti9i:ial Intelligen:e ./e(erdasan buatan 0artifi(al intelligen(e1 merupakan kawasan penelitian' aplikasi dan instruksi yang terkait dengan pemrograman komputer untuk melakukan sesuatu hal yang dalam pandangan manusia adalah 2 (erdas. 0 3. A. -imon 14561. *alam Encyclopedia Britannica diterangkan bahwa /e(erdasan Buatan 0AI1 merupakan (abang dari ilmu komputer yang dalam merepresentasi pengetahuan lebih banyak menggunakan bentuk simbol+simbol daripada bilangan dan memproses informasi berdasarkan metode heuristi( atau dengan berdasarkan se)umlah aturan. Artifi(ial Intelligen(e 0AI1 atau ke(erdasan buatan merupakan (abang dari ilmu komputer yang berhubungan dengan tingkah laku (erdas. /e(erdasan buatan dapat memungkinkan komputer untuk 7berpikir7. /e(erdasan Buatan dapat menirukan proses bela)ar manusia sehingga informasi baru dapat diserap dan digunakan sebagai a(uan di masa+masa yang akan datang. ,eknik yang digunakan dalam /e(erdasan Buatan memungkinkan dibuatnya sebuah program yang setiap bagiannya mengandung langkah+
langkah independen dan dapat diidentifikasi dengan baik untuk dapat meme(ahkan sebuah atau se)umlah persoalan yang dihadapi nantinya. /e(erdasan buatan dapat membantu kita untuk menyelesaikan kesulitan permasalahan nyata. 1. -e)arah Artifi(ial Intelligen(e ,ahun 1489 Alan ,uring mengusulkan tes 0,uring ,est1 untuk mengetahui mesin dikatakan (erdas. ,ahun 148: AI dimun(ulkan oleh Profesor dari Massa(husetts Institu of ,e(hnology bernama "ohn M(!arthy pada *artmouth !onferen(e yang dihadiri oleh peneliti AI. -elan)utnya se)ak saat itu bermun(ulan program AI diantaranya : + Logic Theorist diperkenalkan pada *artmouth !onferen(e membuktikan 2teorema matematika. + Sad Sam diprogram oleh ;obert / <indsay 14:9 mengetahui kalimat+kalimat sederhana yang ditulis dalam bahasa inggris dan memberi )awaban dari fakta+fakta yang didengar dari per(akapan. Eliza diprogram oleh "oseph =eizenbaum 14:6 melakukan terapi terhadap pasien dengan memberikan beberapa pertanyaan. -e)arah AI dari tahun ke tahun: + + + + + + + %ra /omputer %lektronik 014>11 Masa Persiapan AI 014>$+14811 Masa Perkembangan AI 01482+14:41 Perkembangan AI melambat 014:4+146>1 -istem Berbasi Pengetahuan 0146>+14641 AI men)adi sebuah industri 01459+14551 /embalinya "-, 01455+sekarang1 teorema
2. AI 0/e(erdasan buatan1 dalam game. -alah satu unsur yang berperan penting dalam sebuah game adalah /e(erdasan buatan. *engan /e(erdasan buatan' elemen+elemen dalam game dapat berperilaku sealami mungkin layaknya manusia. Pada dasarnya AI game terdiri dari dua kategori yaitu Deterministic dan ?ondeterministi(. Deterministic merupakan simple algoritma' dimana sebuah
nonplayer pada komputer game bergerak sesuai dengan koordinat yang bergerak maupun berperilaku sesuai koordinat dan respon yang telah diatur sedemikian rupa' seakan+akan sebuah nonplayer dapat bergerak sesuai kemaunannya sendiri' tetapi mudah ditebak apa yang akan dilakukan selan)utnya. -edangkan nondeterministic adalah kebalikan dari deterministi(. Pergerakan nonderterministic tidak dapat diprediksi oleh pemain dan menggunakan algoritma yang lebih kompleks. -ehingga membuat game semakin menarik dan tidak men)adi membosankan. $. *efinisi Fuzzy logic Fuzzy logic memungkinkan nilai keanggotaan antara 9 dan 1' tingkat keabuan dan )uga hitam dan putih dan dalam bentuk linguistik' konsep tidak pasti seperti .sedikit.' .lumayan. dan .sangat. 0*r. <otfi @adeh 14:81. Fuzzy logic merupakan peningkatan dari logika Boolean yang berhadapan dengan suatu konsep kebenaran tidak penuh 0hanya sebagian1' dimana peran logika klasik menyatakan bahwa segala hal dapat diekspresikan dalam istilah binary 09 atau 1' hitam atau putih' ya atau tidak1. Fuzzy logic menggantikan kebenaran Boolean dengan tingkat kebenaran. Fuzzy logic digunakan untuk mener)emahkan suatu besaran yang diekspresikan dengan pelan' agak (epat' (epat dan sangat (epat. ,anpa disadari' Fuzzy logic banyak digunakan dalam kehidupan sehari+hari' karena logika ini mengadopsi pemahaman serta penilain otak manusia terhadapa sesuatu hal tertentu. *alam kehidupan sehari+hari manusia banyak dihadapi dengan situasi pertimbangan yang tidak pasti )awabannya ya atau tidak. 3al seperti inilah adalah salah satu (ontoh sederhana Fuzzy logic dalam kehidupan sehari+hari. Alasan digunakannya Fuzzy logic : Ada beberapa alasan mengapa orang menggunakan Fuzzy logic' antara lain : 1. /onsep logika fuzzy mudah dimengerti. /onsep matematis yang mendasari penalaran fuzzy sangat sederhana dan mudah dimengerti. 2. $. >. 8. Fuzzy logic sangat fleksibel. Fuzzy logic memiliki toleransi terhadap data+data yang tidak tepat. Fuzzy logic mampu memodelkan fungsi+fungsi nonlinear yang sangat kompleks. Fuzzy logic dapat membangun dan mengaplikasikan pengalaman+pengalaman para pakar se(ara langsung tanpa harus melalui proses pelatihan.
:. 6.
Fuzzy logic dapat beker)a sama dengan teknik+teknik kendali se(ara kon#ensional. Fuzzy logic didasarkan pada bahasa alami.
Eutput yang di blok diatas' menun)ukkan ada 2 strategi. -trategi tersebut didapat dari fungsi estimateLaunch oint dari kelas Trajectory lanner. -trategi yang pertama akan menabrak 2 kayu' sedangkan strategi yang kedua menabrak 1 kayu. -ehingga AI akan menggunakan strategi kedua dikarenakan mempunyai bobot0kayu1 lebih sedikit dibanding strategi pertama.
SOURCE CODE import )a#a.awt.PointF import )a#a.awt.;e(tangleF import )a#a.awt.image.BufferedImageF import )a#a.util.Array<istF import )a#a.util.<istF import )a#a.util.;andomF import ab.demo.other.A(tion;obotF import ab.demo.other.%n#F import ab.demo.other.-hotF import ab.demo.util.-tateAtilF import ab.planner.,ra)e(toryPlannerF import ab.#ision. ame-tate%Gtra(tor. ame-tateF import ab.#ision.HisionF import )a#a.util.<inked<istF import )a#a.util.,reeMapF publi( (lass Eur?ai#eAgent$ implements ;unnable I pri#ate int fo(usJGF pri#ate int fo(usJyF pri#ate A(tion;obot arF publi( int (urrent<e#el D 1F ,ra)e(toryPlanner tpF pri#ate boolean first-hotF pri#ate Point pre#,argetF <istK;e(tangleL redJbirdsF <istK;e(tangleL blueJbirdsF <istK;e(tangleL yellowJbirdsF <istK;e(tangleL pigsF <istK;e(tangleL wallJi(eF <istK;e(tangleL wallJwoodF <istK;e(tangleL wallJtntF <istK;e(tangleL wallJstoneF && a standalone implementation of the ?ai#e Agent publi( Eur?ai#eAgent$01 I ar D new A(tion;obot01F tp D new ,ra)e(toryPlanner01F pre#,arget D nullF first-hot D trueF && +++ go to the Poa(hed %ggs episode le#el sele(tion page +++ A(tion;obot. oMromMainMenu,o<e#el-ele(tion01F N
publi( int get!urrentJle#el01 I return (urrent<e#elF N publi( #oid set!urrentJle#el0int (urrentJle#el1 I this.(urrent<e#el D (urrentJle#elF N && run the (lient publi( #oid run01 I ar.load<e#el0(urrent<e#el1F while 0true1 I ame-tate state D sol#e01F if 0state DD ame-tate.=E?1 I try I ,hread.sleep0$9991F N (at(h 0Interrupted%G(eption e1 I e.print-ta(k,ra(e01F N int s(ore D +2F while 0s(ore OD -tateAtil.(he(k!urrent-(ore0ar.proGy11 I try I ,hread.sleep08991F N (at(h 0Interrupted%G(eption e1 I && ,E*E Auto+generated (at(h blo(k e.print-ta(k,ra(e01F N s(ore D -tateAtil.(he(k!urrent-(ore0ar.proGy1F N -ystem.out.println0PQQQQQQ ,he game s(ore is P R s(ore R PQQQQQQQQP1F ar.load<e#el0RR(urrent<e#el1F && make a new tra)e(tory planner whene#er a new le#el is entered tp D new ,ra)e(toryPlanner01F && first shot on this le#el' try high shot first first-hot D trueF N else if 0state DD ame-tate.<E-,1 I -ystem.out.println0PrestartP1F ar.restart<e#el01F N else if 0state DD ame-tate.<%H%<J-%<%!,IE?1 I -ystem.out .println0PuneGpe(ted le#el sele(tion page' go to the lasts (urrent le#el : P R (urrent<e#el1F ar.load<e#el0(urrent<e#el1F N else if 0state DD ame-tate.MAI?JM%?A1 I -ystem.out .println0PuneGpe(ted main menu page' go to the lasts (urrent le#el : P R (urrent<e#el1F
A(tion;obot. oMromMainMenu,o<e#el-ele(tion01F ar.load<e#el0(urrent<e#el1F N else if 0state DD ame-tate.%PI-E*%JM%?A1 I -ystem.out .println0PuneGpe(ted episode menu page' go to the lasts (urrent le#el : P R (urrent<e#el1F A(tion;obot. oMromMainMenu,o<e#el-ele(tion01F ar.load<e#el0(urrent<e#el1F N N N pri#ate double distan(e0Point p1' Point p21 I return Math .sSrt00double1 00p1.G + p2.G1 T 0p1.G + p2.G1 R 0p1.y + p2.y1 T 0p1.y + p2.y111F N publi( ame-tate sol#e01I && (apture Image BufferedImage s(reenshot D A(tion;obot.do-(reen-hot01F && pro(ess image Hision #ision D new Hision0s(reenshot1F ;e(tangle sling D #ision.find-lingshot01F while 0sling DD null UU ar.(he(k-tate01 DD ame-tate.P<ACI? 1 I -ystem.out.println0Pno slingshot dete(ted. Please remo#e pop up or zoom outP1F ar.fully@oom01F s(reenshot D A(tion;obot.do-(reen-hot01F #ision D new Hision0s(reenshot1F sling D #ision.find-lingshot01F N redJbirds D #ision.find;edBirds01F blueJbirds D #ision.findBlueBirds01F yellowJbirds D #ision.findCellowBirds01F pigs D #ision.findPigs01F wallJi(e D #ision.findI(e01F wallJwood D #ision.find=ood01F wallJtnt D #ision.find,?,s01F wallJstone D #ision.find-tones01F int birdJ(ount D 9F birdJ(ount D redJbirds.size01 R blueJbirds.size01 R yellowJbirds.size01F
-ystem.out.println0P...found P R pigs.size01 R P pigs and P R birdJ(ount R P birdsP1F -ystem.out.println0Pwall wood DPRwallJwood.size01R P wallJi(e DPRwallJi(e.size01R P wall tnt DPRwallJtnt.size01R P wallJstoneDPRwallJstone.size011F ame-tate state D ar.(he(k-tate01F && if there is a sling' then play' otherwise )ust skip. if 0sling OD null1 I ar.fully@oom01F if 0Opigs.is%mpty011 I && Initialise a shot list Array<istK-hotL shots D new Array<istK-hotL01F Point releasePointF I && random pi(k up a pig ;andom r D new ;andom01F int indeG D r.neGtInt0pigs.size011F ;e(tangle pig D pigs.get0indeG1F Point Jtpt D new Point00int1 pig.get!enterB01'0int1 pig.get!enterC011F -ystem.out.println0Pthe target point is P R Jtpt1F && if the target is #ery (lose to before' randomly (hoose a && point near it if 0pre#,arget OD null UU distan(e0pre#,arget' Jtpt1 K 191 I double Jangle D r.neGt*ouble01 T Math.PI T 2F Jtpt.G D Jtpt.G R 0int1 0Math.(os0Jangle1 T 191F Jtpt.y D Jtpt.y R 0int1 0Math.sin0Jangle1 T 191F -ystem.out.println0P;andomly (hanging to P R Jtpt1F N pre#,arget D new Point0Jtpt.G' Jtpt.y1F && estimate the tra)e(tory Array<istKPointL pts D tp.estimate<aun(hPoint0sling' Jtpt1F
if0pts.size01 L 11I &&(he(k weight for 9 ,reeMap tp9 D get=eight0sling' pts.get091' pig1F ,reeMap tp1 D get=eight0sling' pts.get011' pig1F
double weightJwood D 2.9F double weightJi(e D 1.8F double weightJtnt D >.9F double weightJstone D $9F double weightJtotalJ9 D 9F double weightJtotalJ1 D 9F &&tp 9 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD DDDDD weightJtotalJ9 D 0 0<inked<ist1 tp9.get0PwoodP1 1.size01 T weightJwoodF weightJtotalJ9 RD 0 0<inked<ist1 tp9.get0Pi(eP1 1.size01 T weightJi(eF weightJtotalJ9 RD 0 0<inked<ist1 tp9.get0PtntP1 1.size01 T weightJtntF weightJtotalJ9 RD 0 0<inked<ist1 tp9.get0PstoneP1 1.size01 T weightJstoneF -ystem.out.println0P tra)e(tory 9 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDP1F -ystem.out.println0P supposed to hit wood D PR 0 0<inked<ist1 tp9.get0PwoodP1 1.size01RP i(e D PR0 0<inked<ist1 tp9.get0Pi(eP1 1.size01RP tnt D PR0 0<inked<ist1 tp9.get0PtntP1 1.size01RP stone D PR 0 0<inked<ist1 tp9.get0PstoneP1 1.size011F -ystem.out.println0P total weight tra)e(tory 9 D PRweightJtotalJ91F &&tp 1 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD DDDDD weightJtotalJ1 D 0 0<inked<ist1 tp1.get0PwoodP1 1.size01 T weightJwoodF weightJtotalJ1 RD 0 0<inked<ist1 tp1.get0Pi(eP1 1.size01 T weightJi(eF weightJtotalJ1 RD 0 0<inked<ist1 tp1.get0PtntP1 1.size01 T weightJtntF weightJtotalJ1 RD 0 0<inked<ist1 tp1.get0PstoneP1 1.size01 T weightJstoneF -ystem.out.println0P tra)e(tory 1 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDP1F -ystem.out.println0P supposed to hit wood D PR 0 0<inked<ist1 tp1.get0PwoodP1 1.size01RP i(e D PR0 0<inked<ist1 tp1.get0Pi(eP1 1.size01RP tnt D PR0 0<inked<ist1 tp1.get0PtntP1 1.size01RP stone D PR 0 0<inked<ist1 tp1.get0PstoneP1 1.size011F -ystem.out.println0P total weight tra)e(tory 1 D PRweightJtotalJ11F if0weightJtotalJ9 KD weightJtotalJ11I releasePoint D pts.get091F
NelseI releasePoint D pts.get091F -ystem.out.println0Pnot (al(ulate weight' only one optionP1F N Point refPoint D tp.get;eferen(ePoint0sling1F &T et the (enter of the a(ti#e bird T& fo(usJG D 0int1 00%n#.getMo(uslist01.(ontains/ey0(urrent<e#el11 V %n#.getMo(uslist01 .get0(urrent<e#el1.getB01 : refPoint.G1F fo(usJy D 0int1 00%n#.getMo(uslist01 .(ontains/ey0(urrent<e#el11 V %n#.getMo(uslist01 .get0(urrent<e#el1.getC01 : refPoint.y1F
-ystem.out.println0P-hootOOP1F if 0releasePoint OD null1 I double releaseAngle D tp.get;eleaseAngle0sling' releasePoint1F -ystem.out.println0P ,he release angle is : P R Math.to*egrees0releaseAngle11F int base D 9F if 0releaseAngle L Math.PI & >1 base D 1>99F else base D 889F int tapJtime D 0int1 0base R Math.random01 T 18991F
shots.add0new -hot0fo(usJG' fo(usJy' 0int1 releasePoint .getB01 + fo(usJG' 0int1 releasePoint.getC01 + fo(usJy' 9' tapJtime11F N else -ystem.err.println0PEut of /nowledgeP1F N && (he(k whether the slingshot is (hanged. the (hange of the && slingshot indi(ates a (hange in the s(ale. I ar.fully@oom01F s(reenshot D A(tion;obot.do-(reen-hot01F #ision D new Hision0s(reenshot1F ;e(tangle Jsling D #ision.find-lingshot01F if 0sling.eSuals0Jsling11 I state D ar.shoot=ith-tateInfo;eturned0shots1F && update parameters after a shot is made if 0state DD ame-tate.P<ACI? 1 I s(reenshot D A(tion;obot.do-(reen-hot01F #ision D new Hision0s(reenshot1F <istKPointL tra) D #ision.find,ra)Points01F tp.ad)ust,ra)e(tory0tra)' sling' releasePoint1F first-hot D falseF N N else -ystem.out.println0Ps(ale is (hanged' (an not eGe(ute the shot' will re+segement the imageP1F N N N return stateF N pri#ate ,reeMap get=eight0;e(tangle sling' Point releasePoint' ;e(tangle pig1 I <inked<ist hitJwood D new <inked<ist01F <inked<ist hitJi(e D new <inked<ist01F <inked<ist hitJtnt D new <inked<ist01F <inked<ist hitJstone D new <inked<ist01F for0int rangeD9F rangeKpig.GF rangeRR1I int (urrentB D rangeRfo(usJGF
int (urrentC D tp.getC!oordinate0sling' new Point00int1releasePoint.getB01' 0int1releasePoint.getC011' (urrentB1F &&(he(k if hit wood wall for0int iJwoodD9F iJwoodKwallJwood.size01F iJwoodRR1I int minB D wallJwood.get0iJwood1.GF int maGB D minB R wallJwood.get0iJwood1.widthF int minC D wallJwood.get0iJwood1.yF int maGC D minC R wallJwood.get0iJwood1.heightF if0 0(urrentBLminB UU (urrentBKmaGB1UU 0(urrentCLminC UU (urrentCKmaGC1 1I if0OhitJwood.(ontains0wallJwood.get0iJwood111I hitJwood.add0wallJwood.get0iJwood11F N N N &&(he(k if hit wall i(e for0int iJi(eD9F iJi(eKwallJi(e.size01F iJi(eRR1I int minB D wallJi(e.get0iJi(e1.GF int maGB D minB R wallJi(e.get0iJi(e1.widthF int minC D wallJi(e.get0iJi(e1.yF int maGC D minC R wallJi(e.get0iJi(e1.heightF if0 0(urrentBLminB UU (urrentBKmaGB1UU 0(urrentCLminC UU (urrentCKmaGC1 1I if0OhitJi(e.(ontains0wallJi(e.get0iJi(e111I hitJi(e.add0wallJi(e.get0iJi(e11F N N N &&(he(k if hit tnt for0int iJtntD9F iJtntKwallJtnt.size01F iJtntRR1I int minB D wallJtnt.get0iJtnt1.GF int maGB D minB R wallJtnt.get0iJtnt1.widthF int minC D wallJtnt.get0iJtnt1.yF int maGC D minC R wallJtnt.get0iJtnt1.heightF if0 0(urrentBLminB UU (urrentBKmaGB1UU 0(urrentCLminC UU (urrentCKmaGC1 1I if0OhitJtnt.(ontains0wallJtnt.get0iJtnt111I hitJtnt.add0wallJtnt.get0iJtnt11F N N N &&(he(k if hit stone for0int iJstoneD9F iJstoneKwallJstone.size01F iJstoneRR1I
int minB D wallJstone.get0iJstone1.GF int maGB D minB R wallJstone.get0iJstone1.widthF int minC D wallJstone.get0iJstone1.yF int maGC D minC R wallJstone.get0iJstone1.heightF if0 0(urrentBLminB UU (urrentBKmaGB1UU 0(urrentCLminC UU (urrentCKmaGC1 1I if0OhitJstone.(ontains0wallJstone.get0iJstone111I hitJstone.add0wallJstone.get0iJstone11F N N N N ,reeMapK-tring' <inked<istL result D new ,reeMapK-tring' <inked<istL01F
result.put0PwoodP' hitJwood1F result.put0Pi(eP' hitJi(e1F result.put0PtntP' hitJtnt1F result.put0PstoneP' hitJstone1F return resultF N publi( stati( #oid main0-tring argsWX1 I Eur?ai#eAgent$ na D new Eur?ai#eAgent$01F if 0args.length L 91 na.(urrent<e#el D Integer.parseInt0argsW9X1F na.run01F N N
78 KESI2PULAN