Latest Blog
Multimedia Interaktif Tata Surya
Membuat Multimedia Pembelajaran Interaktif tentang tata surya
ALL BLOG
;
Membuat Kecerdasan Buatan Sederhana
Pada dasarnya Artificial Intelegence atau kecerdasan buatan adalah beberapa logika yang diterapkan dalam sebuah aplikasi untuk menyelesaikan masalah tertentu. Pembuatan AI tergantung dari masing-masing kebutuhan, sebagai contoh dalam sebuah game kita dapat menentukan AI yang sedikit "bodoh" untuk level-level awal, dan semakin "pintar" setelah naik level. Menentukan "bodoh" atau "pintar" nya sebuah AI pada dasarnya hanya dengan mengadaptasi apa yang dilakukan oleh manusia dalam menanggapi kejadian yang ada ditambahkan sedikit unsur acak atau random.
Dalam tutorial ini kita akan menambahkan kecerdasan buatan sederhana untuk menggerakkan movieclip board_2. Movieclip board_2 tersebut nantinya akan merespon posisi movieclip ball, sehingga seolah-olah bergerak secara pintar. Dalam pengembangan selanjutnya anda dapat menambahkan kecerdasan buatan yang lebih baik, agar permainan menjadi lebih menarik. Perhatikan langkah-langkah berikut :
- Pada langkah sebelumnya kita sudah dapat mengendalikan board_1 dengan input keyboard dan movieclip ball sudah dapat memantul ketika tertabrak papan pemain ataupun papan lawan, walaupun demikian papan lawan masih diam saja ketika bola mendekat.
- Untuk menambahkan gerakan responsive movieclip board_1, kita perlu mendeteksi posisi movieclip ball dan menambahkan beberapa baris kode pada fungsi game_loop() menjadi sebagai berikut
- Penambahan kode untuk AI di atas sangat sederhana, yaitu dengan mendeteksi posisi bola apakah bergerak mendekati papan lawan (if (ball.y < 300 && speed_y < 0) dan jika iya, maka papan akan digerakkan ke kanan atau ke kiri sesuai dengan posisi bola.
- Jalankan (ujicoba) aplikasi dengan menekan Ctrl+Enter apabila anda tidak menemui kendala, maka anda akan mendapatkan aplikasi bola pantul sebagai berikut :
private function game_loop(e:Event):void {
if (!is_goal){
ball.x += speed_x;
ball.y += speed_y;
if (ball.y<30 || ball.y>770) speed_y*=-1;
if (ball.x<30 || ball.x>450) speed_x*=-1;
//Player
if (board_1.x < 400 && is_right) board_1.x += 10;
if (board_1.x > 80 && is_left) board_1.x -= 10;
//AI
if (ball.y < 300 && speed_y < 0) {
if (board_2.x < ball.x && board_2.x < 400 ) board_2.x += 5;
if (board_2.x > ball.x && board_2.x > 80) board_2.x -= 5;
}
if (ball.hitTestObject(board_1) && just_hit == 0) {
just_hit = 10;
speed_y *= -1;
}
if (ball.hitTestObject(board_2) && just_hit == 0) {
just_hit = 10;
speed_y *= -1;
}
if (just_hit > 0) just_hit--;
}
}
Secara keseluruhan kode pada Main.as sampai dengan tutorial ini adalah sebagai berikut :
package
{
import flash.display.Bitmap;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.KeyboardEvent;
/**
* ...
* @author Wandah
*/
public class Main extends Sprite
{
[Embed(source = "../bin/arena.jpg")]
private var arena_bmp:Class;
[Embed(source = "../bin/board_1.png")]
private var board_1_bmp:Class;
[Embed(source = "../bin/board_2.png")]
private var board_2_bmp:Class;
[Embed(source = "../bin/ball_bmp.png")]
private var ball_bmp:Class;
private var board_1:MovieClip;
private var board_2:MovieClip;
private var ball:MovieClip;
private var game:MovieClip;
private var speed_x:Number = 0;
private var speed_y:Number = 0;
private var is_goal:Boolean = false;
private var is_left:Boolean = false;
private var is_right:Boolean = false;
private var just_hit:Number = 0;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
setup();
}
private function setup():void {
game = new MovieClip();
addChild(game);
var arena:Bitmap = new arena_bmp();
game.addChild(arena);
board_1 = new MovieClip();
var board_bmp:Bitmap = new board_1_bmp();
board_bmp.x = -63;
board_bmp.y = -11;
board_1.addChild(board_bmp);
board_1.x = 240;
board_1.y = 650;
game.addChild(board_1);
board_2 = new MovieClip();
board_bmp = new board_2_bmp();
board_bmp.x = -63;
board_bmp.y = -11;
board_2.addChild(board_bmp);
board_2.x = 240;
board_2.y = 150;
game.addChild(board_2);
ball = new MovieClip();
var ball_bitmap:Bitmap = new ball_bmp();
ball_bitmap.x = -28;
ball_bitmap.y = -28;
ball.addChild(ball_bitmap);
ball.x = 240;
ball.y = 400;
game.addChild(ball);
speed_x = Math.random() * 3+2;
speed_y = -20 + Math.random() * 10;
game.addEventListener(Event.ENTER_FRAME, game_loop);
stage.addEventListener(KeyboardEvent.KEY_DOWN, myKeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, myKeyUp);
}
private function game_loop(e:Event):void {
if (!is_goal){
ball.x += speed_x;
ball.y += speed_y;
if (ball.y<30 || ball.y>770) speed_y*=-1;
if (ball.x<30 || ball.x>450) speed_x*=-1;
//Player
if (board_1.x < 400 && is_right) board_1.x += 10;
if (board_1.x > 80 && is_left) board_1.x -= 10;
//AI
if (ball.y < 300 && speed_y < 0) {
if (board_2.x < ball.x && board_2.x < 400 ) board_2.x += 5;
if (board_2.x > ball.x && board_2.x > 80) board_2.x -= 5;
}
if (ball.hitTestObject(board_1) && just_hit == 0) {
just_hit = 10;
speed_y *= -1;
}
if (ball.hitTestObject(board_2) && just_hit == 0) {
just_hit = 10;
speed_y *= -1;
}
if (just_hit > 0) just_hit--;
}
}
private function myKeyDown(e:KeyboardEvent):void {
if (e.keyCode == 39) is_right = true;
if (e.keyCode == 37) is_left = true;
}
private function myKeyUp(e:KeyboardEvent):void {
if (e.keyCode == 39) is_right = false;
if (e.keyCode == 37) is_left = false;
}
}
}
Selanjutnya
Pada tahapan berikutnya kita akan Menambahkan Sistem Score
Share ( Ayo Berbagi )
Leave me a comment
untuk pertanyaan lebih baik di email langsung ke wandah [at] wandah [dot] com agar cepat direspon




