U N I VE R S I T A S G U N A D A R M A

PENGANTAR TEKNOLOGI GAME

MAKALAH “SMART TROLL”
Nama NPM Fakultas Jurusan Dosen : Fitra Reza : 52410821 : Teknologi Industri : Teknik Informatika : Yuli Maharetta Arianti

Ditulis Guna Melengkapi Sebagian Syarat Mata Kuliah Pengantar Teknologi Game Jenjang S1

Universitas Gunadarma 2013

PENDAHULUAN

PENDAHULUAN 1.1 Game
Game adalah kata yang berasal dari bahasa inggris yang berarti permainan. Game atau permainan ini pun tidak sembarang dimana di dalamnya terdapat berbagai aturan yang harus dipahami oleh penggunanya. Dalam game juga perlu adanya sekenario agar alur permainan pun jelas dan terarah. Sekenario di sini bisa meliputi setting map, level, alur cerita, bahkan efek yang ada dalam game tersebut.

Jenis-jenis game :

1. Edutainment game Game jenis ini biasanya dibuat lebih sepesifik untuk tujuan tertentu, misalnya untuk balita untuk sekedar mengenal warna dan objek. Ada juga yang ditujukan ke anak sekolah, sebagai contoh game tentang pelajaran biologi dimana di dalam game tersebut menyediakan konten misalnya tentang fungsi organ tubuh manusia.

2. First person shooter Jenis game ini menampilkan sudut pandang orang pertama, biasanya yang nampak hanya tangan dan senjata player saja. Contoh game ini adalah CS (Counter strike), Saurbatten, dll.

3. Real time strategy Game ini lebih menekankan pada kehebatan strategi pemainya, dan biasanya pemain tidak hanya memainkan satu karakter melainkan lebih dari satu karakter.

4. Fighting

Game ini menuntut pemainya untuk lincah, cepat tanggap, respon yang baik. Sedikit berbeda dari game fighting lainya yang hanya melawan AI atau komputer saja, melainkan game ini akan teruji jika pemain sudah bisa mengalahkan pemain lainya atau dengan kata lain game ini merupakan game multi player.

5. Adventure Berbeda dengan game lain yang menuntut pemainya untuk lincah, refleks, respon. Dalam game petualangan pemain dituntut kemampuan berfikirnya untuk menganalisa tempat secara visual, memecahkan teka-teki maupun menyimpulkan rangkaian peristiwa dan percakapan karakter, menggunakan benda-benda yang tepat dan diletakan di tempat yang tepat.

Komponen game Dalam sebuah game atau permainan pastilah memiliki komponen dasar yang membuat game tersebut menjadi user friendly, misalnya : 1. Collision detection, dimana dalam sebuah game dapat mendeteksi efek atau aksi yang perlu dalam sebuah game. Misalnya, jika mobil menabrak maka mobil akan mengalami kerusakan pada body. 2. NPC, dimana dalam game tersebut player dapat berinteraksi dengan player lain. 3. Grafik 4. Suara 5. Artificial intelegent 6. Sekenario atau cerita.

1.2 Game tic-tac-toe

Permainan Tic-Tac-Toe sangatlah sederhana diilhami oleh permainan anak-anak. Dimainkan pada papan berukuran 3 x 3. Pada awal permainan, papan dikosongkan. Kedua pemain, X dan O, akan menempatkan biji-bijinya keatas papan, sekali pasang satu biji. Pemain yang mampu menempatkan tiga bijinya dalam satu garis (vertikal, horizontal, diagonal) itulah yang menang. Dan dikatakan seri apabila papan telah penuh maupun tidak ada yang menang.

Ada beberapa penelitian sejenis yang dilakukan. Misalnya seperti yang dilakukan Samuel dalam Some Studies in Machine Learning Using the game of Checkers [6]. Pada makalah tersebut, Samuel menganalisa pembelajaran mesin dan permainan chekers. Samuel menggunakan 26 parameter pada fungsi polinomialnya, berikut nilainilainya untuk menentukan bagaimana posisi biji pada papan yang tepat. Tujuannya adalah untuk mencari nilai Xn yang paling efektif dalam menerapkan strategi permainan checkers. Setelah beberapa kali percobaan dilakukan, diperoleh sebuah strategi yang mampu terbaik sehingga mampu bertahan sampai akhir permainan. Sayangnya, proses ini memerlukan waktu yang panjang. Akan tetapi, Samuel menemukan sebuah strategi yang bagus sehingga mampu mengalahkan manusia. Penelitian ini diharapkan mampu menemukan strategi yang serupa terkait dengan permainan Tic-Tac-Toe, dan lebih efektif dengan waktu yang tidak terlalu lama.

Penelitian lain yang sejenis juga telah dilakukan

oleh

Michie[5].

Michie

menganalisa proses pembelajaran mesin dan permainan Tic-Tac- Toe dan menemukan sekitar 300 posisi yang berbeda untuk pemain melakukan langkah awal. Percobaan dilakukan pada semua langkah tersebut dengan memberikan nilai pada tiap langkah, nilai yang tertinggi, akan memulai langkah terlebih dahulu. Pada bagian seleksi menggunakan rumus, jika langkah tersebut menghasilkan kemenangan, maka nilai langkah dinaikkan, dan sebaliknya, namun untuk langkah pertama, dilakukan secara acak. Setelah dilakukan beberapa kali permainan, mesin akhirnya mampu mempelajari permainan tic-tac-toe tersebut. Ini menunjukkan bahwa, algoritma genetika mampu mendapatkan strategi yang baru.

Beberapa tulisan juga telah dibuat untuk membahas misalnya dibandingkan dipecahkan. : Ginsberg permainan (1993)[2], lain Haykin (1994)[4],

permasalahan

sejenis,

Goldberg (1989)[3] dan

Bagley(1967)[1]. Tic-tac-toe, merupakan permasalahan permainan yang kompleks sejenis, misalnya ‘Hexapawn game’. Perbandingan konfigurasinya mencapai 52:612. ini menyebabkan permainan Tic- Tac-Toe sangat sulit

1.3 Game Engine Didalam kita membuat suatu aplikasi game, kita membutuhkan sebuah perangkat lunak untuk membuat game yang disebut dengan game engine. Fungsi utama yang diberikan oleh game engine meliputi rendering untuk 2D atau 3D graphic, collision detection, sound, scripting, animasi, artificial intelligence, networking, memory management, threading dan scene graph. Game engines memberikan perangkat untuk visual development dengan tambahan komponen perangkat lunak yang dapat dipakai berulang kali. Perangkat ini pada umumnya memberikan integrated development environment yang dapat mempermudah, serta mempercepat pengembangan game.Game engine juga sering disebut juga “Game Middleware”. Game Middleware adalah software yang didalamnya sudah terdapat elemen-elemen yang dibutuhkan oleh seorang game developer, kebanyakan dari game middleware memberikan fasilitas guna menunjang pengembangan game dengan mudah seperti graphics, sound dan Artificial intelligence.

Beberapa elemen yang ada di dalam game engine adalah :

-

Tools/Data

Dalam pengembangan game, dibutuhkan data yang tidak semudah menuliskan text files. Dalam pengembangan game, paling tidak dibutuhkan beberapa tools seperti 3d model editor, level editor dan graphics programs. Bahkan jika diperlukan, seringkali kita mengembangkan game engine tersebut dengan menambahkan beberapa code dan fitur yang diperlukan.
-

System

System sendiri adalah bagian dari game engine yang berfungsi untuk melakukan komunikasi dengan hardware yang berada di dalam mesin. Jika game engine sudah dibuat dengan baik maka system ini adalah satu-satunya bagian yang membutuhkan perubahan yang cukup banyak apabila dilakukan implementasi pada platform yang berbeda. Di dalam system sendiri terdapat beberapa sub system yaitu graphics, input, sound, timer, configuration. System sendiri bertanggung jawab untuk melakukan inisialisasi, update dan mematikan sub system yang terdapat di dalamnya.
-

Console Dengan menambahkan console, kita dapat merubah setting game dan setting game engine di dalam game tanpa perlu melakukan restart pada game tersebut. Console sendiri lebih sering digunakan dalam proses debugging. Apabila game engine tersebut mengalami error kita tinggal mengoutputkan error message tersebut ke dalam console tanpa harus melakukan restart. Console sendiri dapat dihidupkan dan dimatikan sesuai keinginan.

-

Support Support adalah bagian yang paling sering digunakan oleh system di dalam game engine. Support sendiri berisi rumus-rumus matematika yang biasa digunakan, vector, matrix, memory manager, file loader. Merupakan dasar dari game engine dan hampir digunakan semua projek game engine.

-

Renderer/Engine Core

Pada game engine, engine core / renderer terdiri dari beberapa sub yaitu visibility, Collision Detection dan Response, Camera, Static Geometry, Dynamic Geometry, Particle Systems, Billboarding, Meshes, Skybox, Lighting, Fogging, Vertex Shading, dan Output.
-

Game Interface Game interface sendiri merupakan layer diantara game engine dan game itu sendiri. Berfungsi sebagai control yang bertujuan untuk memberikan interface apabila di dalam game engine tersebut terdapat fungsi fungsi yang bersifat dinamis sehingga memudahkan untuk mengembangkan game tersebut.

-

The Game Merupakan inti dari penggunaan game engine sendiri, sehingga terserah kita bagaimana mengembangkan game tersebut. Saat sekarang ini sudah sangat banyak game engine yang hadir, dan sangat maju. Para pembuat game engine kini berlomba-lomba untuk menciptakan game engine dengan tampilan yang menarik agar menciptakan suasana permainan yang nyaman atau enak untuk dilihat dan dimainkan dalam PC ataupun Console. Dengan tampilan atau graphic yang menarik yang kini semakin mendekati realitas dalam segi fisik para tokoh serta gameplay-nya, akan membuat para gamers semakin antusias untuk memainkan game tersebut. Konsep dari game engine sebenernya cukup gampang, yaitu bahan dasar yang diperlukan sebuah game untuk menjalankan tugasnya, merender pixel demi pixel, menghitung physiscs, memperkirakan input tombol, dan lain hal, yang memungkinkan developer kreatif dapat membuat sebuah game dengan engine yang sama menjadi unik satu sama lain. Di analogikan sebagai sebuah mobil, game engine sudah merupakan bagian mobil, sekitar 50% jadi. Mesin dan rangkaian sistem pengapian, sampai pembuangan. Kurang body dan aksesoris. Sebuah game engine memungkinkan penggunaan kembali komponen komponen yang dapat mempercepat hadirnya game menjadi nyata di layar monitor mu. Beberapa diantara nya yang termasuk dengan itu adalah deteksi tubrukan, tampilan grafis, setting dalam game, artificial intelligence dan lain lain. Semua komponen tadi

disatukan dalam satu pake game engine. Artist dan Developer, dapat menambahkan pustaka texture dan model sendiri untuk dijadikan tokoh utama atau setting dunia dalam sebuah engine. Sekali lagi dalam analogi game, model dan texture dalam game engine bisa dibilang sebagai body dan aksesoris mobil. Sebuah game engine dibagi lagi menjadi dua bagian besar. Yaitu API dan SDK. API ( Applicaiton Programming Interfaces ) adalah bagian operating system, services dan libraries yang diperlukan untuk memanfaatkan beberapa feature yang diperlukan. Dalam hal ini contohnya DirectX. Sementara SDK adalah kumpulan dari libraries dan API yang sudah siap digunakan untuk memodifikasi program yang menggunakan operating system dan services yang sama. Biasanya, game engine menyertakan keduanya. Contohnya dalam Unreal Engine, menyiapkan antarmuka baku bagi programmer untuk menciptakan game nya dengan mudah, melalui scripting engine, yang disebut UnrealScript, dan juga libraries, yang berisi model standar dan texture standar dan juga world editor yang disebut sebagai UnrealED. 1.4 Strawberry Prolog Strawberry Prolog adalah dialek (perpanjangan dari bahasa yang tidak mengubah sifat intrinsiknya) dari bahasa pemrograman Prolog. Sintaks-nya adalah sangat dekat dengan ISOProlog tapi itu memiliki banyak ekstensi yang bukan bagian dari standar. Ide utama dari Strawberry Prolog menjadi sangat mudah untuk digunakan dan itulah mengapa beberapa universitas menggunakannya untuk program Prolog mereka. Strawberry Prolog diproduksi oleh Institut Matematika dan Informatika di Akademi Ilmu Pengetahuan Bulgaria. Versi pertama dirilis pada tahun 1996. Pemimpin tim Strawberry Dimiter Dobrev. kompiler Prolog adalah bagian dari proyek AI. Prolog singkatan dari Programming in Logic. Dikembangkan oleh Alain Colmenraurer dan P.Roussel di Universitas Marseilles Perancis, tahun 1972. Prolog populer di Eropa untuk aplikasi artificial intelligence, sedangkan di Amerika peneliti mengembangkan aplikasi yang sama, yaitu LISP. Konsep pemrograman prolog : Fakta dan Relasi  Prolog terdiri dari kumpulan data-data objek yang merupakan suatu fakta.  Fakta dibedakan 2 macam : menunjukkan relasi.dan menunjukkan milik/sifat.

Penulisannya diakhiri dengan tanda titik “.” Contoh :

FAKTA Slamet adalah ayah Amin Anita adalah seorang wanita Angga suka renang dan tenis Jeruk berwarna orange

PROLOG ayah (slamet, amin). wanita (anita). suka(angga, renang). dan suka(angga,tenis). orange(jeruk).

Aplikasi prolog :

Sistem Pakar (Expert System) yaitu program menggunakan teknik pengambilan kesimpulan dari data-data yang didapat, layaknya seorang ahli. Contoh dalam mendiagnosa penyakit.

Pengolahan Bahasa Alami (Natural Languange Processing) adalah program dibuat agar pemakai dapat berkomunikasi dengan komputer dalam bahasa manusia seharihari, layaknya penterjemah.

Robotik. Dalam robotic, prolog juga bisa digunakan untuk mengolah data masukan yang berasal dari sensor dan mengambil keputusan untuk menentukan gerakan yang harus dilakukan.

PEMBAHASAN

PEMBAHASAN
2.1 Smart Troll Dalam game Smart Troll yang merupakan modifikasi dari Tic Tac Toe akan digunakan algoritma minimax permainan ini mempunyai lebih sedikit kemungkinan solusi, sehingga kita akan mempunyai cukup komputasi untuk memainkan setiap kombinasi langkah dari setiap posisi dan kondisi. Namun hal ini dapat dihindari dengan membatasi sejauh mana komputer akan menganalisis hasil dari langkah-langkah yang mungkin (menentukan kedalaman pohon).Tetapi dengan hal ini, kita harus menambah kedalaman pohon tersebut setiap langkahnya agar kedalaman pohon pada state tersebut sama dengan state sebelumnya.

Tampilan soal

Tampilan awal game

Tampilan akhir game

2.2 Aturan Smart Troll  Harus menjawab pertanyaan yang muncul dalam kotak dialog, dimana mempunyai kondisi pada awal permainan player akan diberikan pertanyaan dan diberi percabangan untuk jawaban benar 3 soal dari 5 soal yang dirandom maka player berhak untuk mengambil jalan terlebih dahulu yang selanjutnya AI yang mengambil jalan, begitu juga sebaliknya jika player tidak berhasil menjawab pertanyaan makan AI yang mengambil jalan terlebih dahulu.  Dalam memnjawab pertanyaan akan dibatasi dengan waktu sebanyak 1 menit secara keseluruhan dan akan ditentukan siapa yang jalan terlebih dahulu dalam permainan.  Player yang berhasil menjawab dengan benar 3 pertanyaan dari 5 pertanyaan yang dirandom akan diberikan akan diberikan hak untuk jalan terlebih dahulu, namun ketika sebaliknya (player gagal menjawab pertanyaan) maka AI yang akan jalan terlebih dahulu.  Memilih kotak yang diinginkan lalu kotak akan diberikan tanda. Player bebas memilih kotak mana yang akan diisi terlebih dahulu.

 Komputer diberi pembelajaran untuk menghalangi setiap langkah yang player lakukan supaya player tidak mudah untuk memenangkan permainan ini.  Tanda player Troll Face dengan background coklat , sedangkan AI muka troll dengan background putih.  Tanda yang sudah berurut secara horizontal, vertikal ataupun diagonal terlebih dahulu maka ia akan menang dari permainan.

2.3 GOALS
Permainan ini dapat ditandai dengan pemberian gambar troll face dengan background coklat untuk player dan gambar troll face dengan background putih untuk AI.Pada permainan ini setiap pemain, baik player maupun AI saling berlomba untuk membuat lawannya sampai membentuk sebuah garis supaya dapat memenangkan permainan ini. Pemenang pada permainan ini ditandai dengan berhasilnya membuat satu line secara horizontal, vertical maupun diagonal. Namun ketika player dan AI sama kuat, maka akan terjadi draw atau seri yang berarti tidak ditemukan pemenang dalam permainan.

2.4 KONSEP AI
Pada game Smart Troll ini menggunakan algoritma minimax. Algoritma minimax merupakan basis dari semua permainan berbasis AI seperti permainan catur misalnya. AI permainan catur tentunya sudah sangat terkenal dimana AI tersebut bahkan dapat mengalahkan juara dunia sekalipun. Pada algoritma minimax, pengecekan akan seluruh kemungkinan yang ada sampai akhir permainan dilakukan. Pengecekan tersebut akan menghasilkan pohon permainan yang berisi semua kemungkinan tersebut. Tentunya dibutuhkan resource yang berskala besar untuk menangani komputasi pencarian pohon solusi tersebut berhubung kombinasi kemungkinan untuk sebuah permainan pada setiap geraknya sangat banyak sekali. Keuntungan yang didapat dengan menggunakan algoritma minimax yaitu algoritma minimax mampu menganalisis segala kemungkinan posisi permainan untuk menghasilkan keputusan yang terbaik karena algoritma minimax ini bekerja secara rekursif dengan mencari langkah yang akan membuat lawan mengalami kerugian minimum. Semua strategi lawan

akan dihitung dengan algoritma yang sama dan seterusnya. Ini berarti, pada langkah pertama komputer akan menganalisis seluruh pohon permainan. Dan untuk setiap langkahnya, komputer akan memilih langkah yang paling membuat lawan mendapatkan keuntungan minimum, dan yang paling membuat komputer itu sendiri mendapatkan keuntungan maksimum. Dalam penentuan keputusan tersebut dibutuhkan suatu nilai yang merepresentasikan kerugian atau keuntungan yang akan diperoleh jika langkah tersebut dipilih. Untuk itulah disini digunakan sebuah fungsi heurisitic untuk mengevaluasi nilai sebagai nilai yang merepresentasikan hasil permainan yang akan terjadi jika langkah tersebut dipilih. Biasanya pada permainan tic tac toe ini digunakan nilai 1,0,-1 untuk mewakilkan hasil akhir permainan berupa menang, seri, dan kalah. Dari nilai-nilai heuristic inilah komputer akan menentukan simpul mana dari pohon permainan yang akan dipilih, tentunya simpul yang akan dipilih tersebut adalah simpul dengan nilai heuristic yang akan menuntun permainan ke hasil akhir yang menguntungkan bagi komputer.

PENUTUP

PENUTUP

3.1 KESIMPULAN Dalam pembuatan game tic-tac-toe yang diberi nama “Smart Troll”, yang dimana sudah ditambahkan variasi soal-soal yang bertujuan untuk anak kelas 4 SD diharapkan mampu menambah wawasan dan kesenangan dengan gambar-gambar yang menarik di mata. Game ini menggunakan algoritma minimax dimana sebagai pondasi utama dalam pembentukan game smart troll ini.

3.2 SARAN Game ini bisa dimodifikasi lagi menjadi 4x4, 5x5 dan seterusnya. Apabila bisa disisipkan sebuah suara akan menjadi nilai tambah tersendiri pada game ini.

LISTING PROGRAM

?G_SUser := 0, array(su,9,0), G_SAI := 0, array(sa,9,0), G_Score := 0, G_W := 0, G_BG is bitmap_image("BG.bmp",_), G_User is bitmap_image("gambaruser.bmp",_), G_Ai is bitmap_image("gambarai.bmp",_), set(pos([[f,f,f], [f,f,f], [f,f,f]])), set(lose_flag(false)), G_M := 1, G_D := 1, G_JB:=0, G_JS:=0, array(a,5,0), acak(0), G_I := 0, soal(a(G_I)), window( G_Win, _, w_func(_), "The Question", 500, 300, 390, 150), G_Timer is set_timer( G_Win, 1, time_func). acak(Y):X is random(50), (Y<5-> a(Y):= X, bandinga(Y)). bandinga(Y):X:=0, (X=0 ->(Y>4 ->(a(Y)=:=a(4)-> (X=0 ->(Y>3 ->(a(Y)=:=a(3)-> (X=0 ->(Y>2 ->(a(Y)=:=a(2)-> (X=0 ->(Y>1 ->(a(Y)=:=a(1)-> (X=0 ->(Y>0 ->(a(Y)=:=a(0)-> Y:=Y+1, acak(Y)).

X:=1, X:=1, X:=1, X:=1, X:=1,

acak(Y)))), acak(Y)))), acak(Y)))), acak(Y)))), acak(Y))),

soal(X):( X =:= 0 -> G_Soal := " 9 9 9 6 9 3 ... ...", G_Jwbn := "B", G_JwbA := "19 dan 10", G_JwbB := "9 dan 0" else ( X =:= 1 -> G_Soal := " 12 13 ... ... 22 27", G_Jwbn := "B", G_JwbA := "19 dan 12", G_JwbB := "15 dan 18" else ( X =:= 2 -> G_Soal := " 2 10 4 8 ... ... 8 4", G_Jwbn := "A", G_JwbA := "6 dan 6", G_JwbB := "6 dan 0" else ( X =:= 3 -> G_Soal := " ... 34 35 39 40 44 45", G_Jwbn := "A", G_JwbA := "30", G_JwbB := "33"

else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA

=:= 4 -> := " 8 7 14 13 ... ...", G_Jwbn := "A", := "26 dan 25", G_JwbB := "26 dan 24" =:= 5 -> := " 5 10 8 40 80 78 ... ...", G_Jwbn := "A", := "390,388", G_JwbB := "330,338" =:= 6 -> := " 4 2 1 11 13 11 ... ...", G_Jwbn := "A", := "10 & 20", G_JwbB := "10 & 25" =:= 7 -> := " gelap, terang, sunyi,...", G_Jwbn := "A", := "ramai", G_JwbB := "senyap" =:= 8 -> := " satu, tiga, juni, ...", G_Jwbn := "B", := "oktober", G_JwbB := "september" =:= 9 -> := " kertas, putih, rambut, ...", G_Jwbn := "A", := "hitam", G_JwbB := "gelap" =:= 10 -> := " buku, baca, pulpen,... ", G_Jwbn := "B", := "coret", G_JwbB := "tulis" =:= 11 -> := " tisyu, basuh, siram, ... ", G_Jwbn := "A", := "air", G_JwbB := "leleh" =:= 12 -> := " panas, dingin, matahari,...", G_Jwbn := "B", := "hujan", G_JwbB := "salju" =:= 13 -> := " universitas, smp, ... ", G_Jwbn := "B", := "SD", G_JwbB := "TK" =:= 14 -> := " 9 3 6 2 ... ... ", G_Jwbn := "A", := "4 4/3", G_JwbB := "3 3/4" =:= 15 -> := " 1 1 3 15 15 ... ... ", G_Jwbn := "A", := "45 & 225", G_JwbB := "45 & 235" =:= 16 -> := " 2 10 20 18 9 ... ... ", G_Jwbn := "A", := "45 dan 90", G_JwbB := "30 dan 60" =:= 17 -> := " 1 2 -1 -4 -8 ... ...", G_Jwbn := "A", := "-11 & -22", G_JwbB := "-10 & -22" =:= 18 -> := " kasur, tikar, kapuk, ... ", G_Jwbn := "A", := "rotan", G_JwbB := "serabut" =:= 19 -> := " perahu, air, udara, ... ", G_Jwbn := "B", := "kapal", G_JwbB := "pesawat" =:= 20 -> := " karya:penjiplakan,dana:...", G_Jwbn := "A", := "penggelapan", G_JwbB := "pemakaian"

else ( X G_Soal "A", G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal G_JwbA else ( X G_Soal

=:= 21 -> := " tenggara:baratdaya,timurlaut:...", G_Jwbn := := "baratdaya", G_JwbB := "baratlaut" =:= 22 -> := " januari:maret,senin:...", G_Jwbn := "B", := "selasa", G_JwbB := "rabu" =:= 23 -> := " kulit:raba,lidah:...", G_Jwbn := "B", := "perasa", G_JwbB := "pengecap" =:= 24 -> := " anggaran = ... ", G_Jwbn := "A", := "aturan", G_JwbB := "laporan" =:= 25 -> := " efesien = ... ", G_Jwbn := "B", := "hemat", G_JwbB := "tepat guna" =:= 26 -> := " ekstensi = ... ", G_Jwbn := "A", := "perluasan", G_JwbB := "lembaga" =:= 27 -> := " generik = ...", G_Jwbn := "B", := "murah", G_JwbB := "umum" =:= 28 -> := " tersirat = ...", G_Jwbn := "A", := "tersirat", G_JwbB := "tersurat" =:= 29 -> := " kolektif = ... ", G_Jwbn := "A", := "bersama", G_JwbB := "titipan" =:= 30 -> := " konstruktif=...", G_Jwbn := "A", := "perbaikan", G_JwbB := "penyatuan" =:= 31 -> := " reguler =...", G_Jwbn := "B", := "runut", G_JwbB := "teratur" =:= 32 -> := " bagak =...", G_Jwbn := "B", := "bergaya", G_JwbB := "pemberani" =:= 33 -> := " eskavasi = ...", G_Jwbn := "A", := "penggalian", G_JwbB := "evakuasi" =:= 34 -> := " tangkal = ...", G_Jwbn := "A", := "cegah", G_JwbB := "lelang" =:= 35 -> := " ekspansi = ... ", G_Jwbn := "A", := "perluasan", G_JwbB := "pelebaran" =:= 36 -> := " propagandis = ...", G_Jwbn := "A", := "agigator", G_JwbB := "orator" =:= 37 -> := " aporisma = ... ", G_Jwbn := "B",

G_JwbA := "prima", G_JwbB := "maksimal" else ( X =:= 38 -> G_Soal := " insinuasi = ... ", G_Jwbn := "B", G_JwbA := "sinis", G_JwbB := "sindiran" else ( X =:= 39 -> G_Soal := " galat = ... ", G_Jwbn := "A", G_JwbA := "cacat", G_JwbB := "salah" else ( X =:= 40 -> G_Soal := " tetiran >< ...", G_Jwbn := "A", G_JwbA := "asli", G_JwbB := "imitasi" else ( X =:= 41 -> G_Soal := " ekspresi >< ...", G_Jwbn := "A", G_JwbA := "impresi", G_JwbB := "inovasi" else ( X =:= 42 -> G_Soal := " legislatif >< ... ", G_Jwbn := "B", G_JwbA := "yudikatif", G_JwbB := "eksekutif" else ( X =:= 43 -> G_Soal := " universal >< ... ", G_Jwbn := "B", G_JwbA := "fakultif", G_JwbB := "parsial" else ( X =:= 44 -> G_Soal := " fonem >< ... ", G_Jwbn := "B", G_JwbA := "klausa", G_JwbB := "morfem" else ( X =:= 45 -> G_Soal := " abolisi >< ...", G_Jwbn := "A", G_JwbA := "pemberatan", G_JwbB := "peringanan" else ( X =:= 46 -> G_Soal := " dialog >< ... ", G_Jwbn := "A", G_JwbA := "monolog", G_JwbB := "epilog" else ( X =:= 47 -> G_Soal := " insidentil >< ...", G_Jwbn := "A", G_JwbA := "rutin", G_JwbB := "khusus" else ( X =:= 48 -> G_Soal := " muskil >< ... ", G_Jwbn := "B", G_JwbA := "andil", G_JwbB := "mungkin" else ( X =:= 49 -> G_Soal := " takzim >< ... ", G_Jwbn := "A", G_JwbA := "acuh", G_JwbB := "lazim" )))))))))))))))))))))))))))))))))))))))))))))))))). w_func(paint):color_text(_,rgb(0,0,0)), color_text_back(G_Win,rgb(255,255,255)), text(_), fail. w_func(init):button( G_Button,_,a_funk(_),"Jawaban A",15,73,90,25), button( G_Button,_,b_funk(_),"Jawaban B",110,73,90,25), fail. text(_):-

text_out(15,28," "), text_out(15,51," "), text_out(15,5," Please Choise.!"), text_out(15,28,G_Soal), text_out(15,51,"A. "+G_JwbA),text_out(110,51,"B. "+G_JwbB), text_out(230,5,"Jawaban Benar : "+G_JB), text_out(230,28,"Jawaban Salah : "+G_JS), text_out(230,51,"Waktu :"). a_funk(press):time_func(end),(G_Jwbn = "A" -> G_JB:=G_JB+1,message("result","Jawaban Benar",_) else G_JS:=G_JS+1,message("result","Jawaban Salah",_)), G_I:=G_I+1,lihat(_). b_funk(press):time_func(end),(G_Jwbn = "B" -> G_JB:=G_JB+1,message("result","Jawaban Benar",_) else G_JS:=G_JS+1,message("result","Jawaban Salah",_)), G_I:=G_I+1,lihat(_). lihat(_):(G_JB<3-> (G_JS<3 -> soal(a(G_I)), w_func(_), update_window(G_Win) else close_window(G_Win), set(pos([[o,f,f], [f,f,f], [f,f,f]])), window( G_Win, _, win_func(_), "Answer Then Solve", 200, 100, 258, 295)) else close_window(G_Win), window( G_Win, _, win_func(_), "Answer Then Solve", 200, 100, 258, 295)). put_mark(Mark) :pos(Current_Pos), member(Current_Pos, L, Y), member(L, Mark, X), X1 is 40 + 60*X, Y1 is 40 + 60*Y, X2 is X1 + 40, Y2 is Y1 +40, write_mark(Mark, X1, Y1, X2, Y2), fail. put_mark(_). write_mark(x, X1, Y1, X2, Y2) :draw_bitmap(X1-8,Y1-8,G_User,_,_), (X1 = 40 -> (Y1 = 40 -> (su(0) =:= 0 -> G_SUser := G_SUser+1, su(0) := su(0)+1)

else (Y1 = 100 -> (su(1) =:= 0 -> G_SUser := G_SUser+1, su(1) := su(1)+1) else (Y1 = 160 -> (su(2) =:= 0 -> G_SUser := G_SUser+1, su(2) := su(2)+1, G_W := G_W+1)))) else (X1 = 100 -> (Y1 = 40 -> (su(3) =:= 0 -> G_SUser := G_SUser+1, su(3) := su(3)+1) else (Y1 = 100 -> (su(4) =:= 0 -> G_SUser := G_SUser+1, su(4) := su(4)+1, G_W := G_W+1) else (Y1 = 160 -> (su(5) =:= 0 -> G_SUser := G_SUser+1, su(5) := su(5)+1)))) else (X1 = 160 -> (Y1 = 40 -> (su(6) =:= 0 -> G_SUser := G_SUser+1, su(6) := su(6)+1, G_W := G_W+1) else (Y1 = 100 -> (su(7) =:= 0 -> G_SUser := G_SUser+1, su(7) := su(7)+1) else (Y1 = 160 -> (su(8) =:= 0 -> G_SUser := G_SUser+1, su(8) := su(8)))))))), banding(_), fail. write_mark(o, X1, Y1, X2, Y2) :draw_bitmap(X1-8,Y1-8,G_Ai,_,_), (X1 = 40 -> (Y1 = 40 -> (sa(0) =:= 0 -> G_SAI := G_SAI+1, sa(0) := sa(0)+1) else (Y1 = 100 ->

(sa(1) =:= 0 -> G_SAI := G_SAI+1, sa(1) := sa(1)+1) else (Y1 = 160 -> (sa(2) =:= 0 -> G_SAI := G_SAI+1, sa(2) := sa(2)+1)))) else (X1 = 100 -> (Y1 = 40 -> (sa(3) =:= 0 -> G_SAI := G_SAI+1, sa(3) := sa(3)+1) else (Y1 = 100 -> (sa(4) =:= 0 -> G_SAI := G_SAI+1, sa(4) := sa(4)+1) else (Y1 = 160 -> (sa(5) =:= 0 -> G_SAI := G_SAI+1, sa(5) := sa(5)+1)))) else (X1 = 160 -> (Y1 = 40 -> (sa(6) =:= 0 -> G_SAI := G_SAI+1, sa(6) := sa(6)+1) else (Y1 = 100 -> (sa(7) =:= 0 -> G_SAI := G_SAI+1, sa(7) := sa(7)+1) else (Y1 = 160 -> (sa(8) =:= 0 -> G_SAI := G_SAI+1, sa(8) := sa(8)))))))), banding(_), fail. banding(_):G_Score := G_SUser+G_SAI, ( G_W = 3 -> G_W := G_W+1, message("Great","You are winner !!.",i)), ( G_Score = 9 -> message("Pesan","Draw !!",i), G_SUser := G_SUser+1). win_func(paint) :draw_bitmap(0,0,G_BG,_,_), color_text(_,rgb(0,0,0)),

color_text_back(G_Win,rgb(177,229,20)), (G_JB>2-> text_out(90,0,"User First") else text_out(72,0,"Computer First")), pen(2, rgb(0, 0, 0)), % black line(30, 30, 30, 210), line(30, 210, 210, 210), line(210, 210, 210, 30), line(210, 30, 30, 30), line(90, 30, 90, 210), line(150, 30, 150, 210), line(30, 90, 210, 90), line(30, 150, 210, 150), put_mark(x), put_mark(o), fail. win_func(mouse_click(X, Y)) :(G_W<3-> lose_flag(false), X>30, Y>30, X<210, Y<210, X1 is (X - 30)//60, Y1 is (Y - 30)//60, pos(Current_Pos), member(Current_Pos, L, Y1), member(L, f, X1), !, replace(L2, L, x, X1), replace(Current_Pos2, Current_Pos, L2, Y1), set(pos(Current_Pos2)), not(win_func(paint)), think(Current_Pos2)). win_func(mouse_click(X, Y)) :(G_W<3->beep). win_func(init) :menu( pop_up, _, _, menu_func(_), "&Menu"). menu_func(init) :menu( normal, _, _, rulem_func(_), "&Rule"), menu( normal, _, _, exitm_func(_), "&Exit"). exitm_func(press):close_window(G_Win). rulem_func(press):message("Rule","Test",_). think(Pos) :try_to_win(Pos), !.

think(Pos) :try_nolose(Pos), !. try_nolose(Pos) :move(o, Pos, Sit2), nolose(x, Sit2), set(pos(Sit2)), not(win_func(paint)). try_to_win(Pos) :move(o, Pos, Sit2), is_it_win(Sit2). is_it_win(Sit2) :victory(o, Sit2), set(pos(Sit2)), not(win_func(paint)), set(lose_flag(true)), message("Sorry","You are loser!!.",s). is_it_win(Sit2) :win(x, Sit2), set(pos(Sit2)), not(win_func(paint)). member([Element, _, _], Element, 0). member([_, Element, _], Element, 1). member([_, _, Element], Element, 2). replace([Element, A, B], [_, A, B], Element, 0). replace([A, Element, B], [A, _, B], Element, 1). replace([A, B, Element], [A, B, _], Element, 2). victory( victory( victory( victory( victory( victory( victory( Who, Who, Who, Who, Who, Who, Who, [[Who, Who, Who], [_, _, _], [_, _, _]]). [[_, _, _], [Who, Who, Who], [_, _, _]]). [[_, _, _], [_, _, _], [Who, Who, Who]]). [[Who, _, _], [Who, _, _], [Who, _, _]]). [[_, Who, _], [_, Who, _], [_, Who, _]]). [[_, _, Who], [_, _, Who], [_, _, Who]]). [[Who, _, _], [_, Who, _], [_, _, Who]]).

win( o, Sit) :- move(o, Sit, Sit2), win(x, Sit2). win( x, Sit) :- victory(o, Sit). win( x, Sit) :- not(nowin( x, Sit)). nowin(x, Sit) :- move(x, Sit, Sit2), nowin(o, Sit2). nowin( o, Sit) :- victory(x, Sit). nowin(o, Sit) :- not(move(Sit)). % the last move belongs to X nowin(o, Sit) :- not(win(o, Sit)). lose( x, Sit) :- move(x, Sit, Sit2), lose(o, Sit2).

lose( o, Sit) :- victory(x, Sit). lose( o, Sit) :- not(nolose( o, Sit)). nolose(o, Sit) :- not(move(Sit)). % the last move belongs to X nolose(o, Sit) :- move(o, Sit, Sit2), nolose(x, Sit2). nolose( x, Sit) :- victory(o, Sit). nolose(x, Sit) :- not(lose(x, Sit)). move(P, Sit, Sit2) :member(Sit, L, Y), member(L, f, X), replace(L2, L, P, X), replace(Sit2, Sit, L2, Y). move(Sit) :member(Sit, L, _), member(L, f, _). time_func(end):((G_JB<3;G_JS<3)->(G_M=0->(G_D=1-> text_out(285,51,"Habis"), message("Sorry","Waktu Habis",s), G_JS:=3, close_window(G_Win), set(pos([[o,f,f], [f,f,f], [f,f,f]])), window( G_Win, _, win_func(_), "Answer Then Solve", 200, 100, 258, 295) else (G_D<11-> G_D:=G_D1,text_out(285,51,"00.0"+G_D) else G_D:=G_D1,text_out(285,51,"00."+G_D))) else (G_D=0-> G_M:=G_M1,G_D:=59,text_out(285,51,"0"+G_M+"."+G_D) else (G_D<11-> G_D:=G_D1,text_out(285,51,"0"+G_M+".0"+G_D) else G_D:=G_D1,text_out(285,51,"0"+G_M+"."+G_D))))).

REFERENSI

http://cakrawalamaya.blogspot.com/2012/03/pengertian-game.html http://dagdigdugweew.blogspot.com/2010/11/laporan-akhir-pkb.html http://id.wikipedia.org/wiki/Prolog http://stefanuskaparang.wordpress.com/ http://greenbel.wordpress.com/2011/11/13/strawberry-prolog-1/ http://informaticunsil.blogspot.com/2012/12/pengenalan-pemrograman-strawberryprolog.html http://cakrawalamaya.blogspot.com/2012/03/pengertian-game.html http://aldianapermatasari.blogspot.com/2013/01/pengertian-game.html http://www.omdading.com/2012/02/

For more info: bajajreza@gmail.com or Mention my twitter: @rezroot

Sign up to vote on this title
UsefulNot useful