Sedikit Share - ZOO APP Flash Game

Ngeshare hasil oprek asik kali ya. 
Jadi selama masa nganggur tahun kemarin (+/- 6 bulan) Alhamdulillah saya dapet proyek dari beberapa teman, mulai dari bikin web sampe bikin game. Lumayan buat ngisi dompet dan menjaga biar otak tetep anget dan ga beku hehe.
Dalam pemikirian saya, nggak ada gunanya kita punya pengetahuan tapi nggak dipake buat ngebantu orang lain. Kan ada quote nya juga tuh "Knowledge without action is useless, and action without knowledge is futile".
Dalam kesempatan kali ini, saya akan share hasil oprek proyek "Zoo App" yaitu aplikasi yang berisi informasi tentang hewan-hewan seperti singa, gajah, burung, jerapah, dll. Tidak hanya berisi informasi, tapi aplikasi ini juga berisi game, lebih tepatnya mini game, yaitu dimana terdapat beberapa karakter yang bisa digunakan dalam bermain untuk menangkap makanan sesuai karakter hewan tersebut. Tapi hati-hati jika yang muncul adalah gunting atau bom, jangan dimakan ya hehe.
Ini screenshot aplikasi nya:

Gambar di atas adalah screenshot untuk halaman "zoo"


Gambar di atas adalah screenshot untuk detail hewan yang diklik

Saya akan lebih concern untuk sharing tentang game nya aja ya, nah berikut ini screenshot untuk halaman "game". Dalam proyek ini hanya dibuat 3 karakter yang bisa dimainkan, dan tentu saja dapat dikembangkan untuk berapa banyak karakter yang diinginkan.



Saya share codingan intinya aja ya untuk bikin game kayak yang di atas. Logika yang dipake super simple kok, cekidot:

public function gajahPlay():void{

ourGajah = new Gajah(stage, _apel);
stage.addChild(ourGajah);
ourGajah.x = stage.stageWidth / 2;
ourGajah.y = stage.stageHeight / 1.4;
addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyOn);
stage.addEventListener(KeyboardEvent.KEY_UP,keyOff);
}

private function loop(e:Event) : void{
if ((Math.floor(Math.random() * 90) == 5)&&(_counter <= 9))
{
_counter++;
trace("count: "+_counter);
var _apel:Apel = new Apel(stage, ourGajah);
_apel.addEventListener(Event.REMOVED_FROM_STAGE, remove_apel, false, 0, true);
_apelList.push(_apel);
stage.addChild(_apel);
}

        if ((Math.floor(Math.random() * 90) == 11)&&(_counter4 <= 9))
{
_counter2++;
trace("count4: "+_counter4);
var _bom:Bomb = new Bomb(stage, ourGajah);
_bom.addEventListener(Event.REMOVED_FROM_STAGE, remove_bom, false, 0, true);
_bomList.push(_bom);
stage.addChild(_bom);
}

        for (var i:int = 0; i < _apelList.length; i++)
{
//trace("length1: "+i);
if(ourGajah.hitTestObject(_apelList[i]))
{
_apelList[i].y = 2000;
takeHit1();
}
}

        for (var l:int = 0; l < _bomList.length; l++)
{
//trace("length4: "+l);
if(ourGajah.hitTestObject(_bomList[l]))
{
_bomList[l].y = 2000;
takeHit2();
}
}

        if((_apelList.length == 10) && (_bomList.length == 10)){
               endGame();}
        }
}

private function keyOn(e:KeyboardEvent){
        if(e.keyCode == 37){
kiri = true;}
else if(e.keyCode == 39){
kanan = true;}
}
private function keyOff(e:KeyboardEvent){
if(e.keyCode == 37){
kiri = false;}
else if(e.keyCode == 39){
kanan = false;}
}

public function takeHit1():void{
       poinn++;
}

public function takeHit2():void{
       poinn2++;
}

Nah di atas ini adalah potongan code di main class. Dapat dilihat di atas, saya memanfaatkan fungsi Math.random() untuk meng-generate angka random sebagai kondisi bagi apel ataupun bom untuk keluar. Saya hanya mencontohkan codingan untuk apel dan bom, karena untuk yang lainnya seperti gunting, daun, dan anggur menggunakan logika yang sama dengan apel ataupun bom.
Berikut ini potongan code di dalam class Apel:

public class Apel extends MovieClip{

     private var stageRef:Stage;
     private var vy:Number = 3;
     private var ay:Number = .4;
     private var target:Gajah;
     public function Apel(stageRef:Stage, target:Gajah) : void{

    this.stageRef = stageRef;
    this.target = target;

    x = Math.random() * stageRef.stageWidth;
    y = 0;
    addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
     }
     private function loop(e:Event) : void {
    y += 4;
    if (y > stageRef.stageHeight
            {
      y = 2000;
            }
     }
}

Dan berikut ini adalah potongan code pada class Gajah:

public class Gajah extends MovieClip{

private var speed:Number = 0.5;
private var vx:Number = 0;
private var vy:Number = 0;
private var friction:Number = 0.93;
private var maxspeed:Number = 8;
public function Gajah(stage, target:Apel) : void
{
addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
}

public function loop(e:Event) : void
{
if (Utama.kiri == true)
vx -= speed;
else if (Utama.kanan == true)
vx += speed;
else
vx *= friction;
x += vx;
if (vx > maxspeed)
vx = maxspeed;
else if (vx < -maxspeed)
vx = -maxspeed;
if (vy > maxspeed)
vy = maxspeed;
else if (vy < -maxspeed)
vy = -maxspeed;
rotation = vx;
scaleX = (maxspeed - Math.abs(vx))/(maxspeed*4) + 0.75;
if (x > stage.stageWidth) 
{
x = stage.stageWidth;
vx = -vx;
}
else if (x < 0) 
{
x = 0;
vx = -vx;
}
}
}

Yap, untuk menggerakkan karakter gajah, saya menggunakan logika true or false. Pada main class terdapat variabel kiri dan kanan yang akan bernilai true jika keycode pada keyboard ditekan. Untuk arah kiri menggunakan keycode 37 sedangkan arah kanan menggunakan keycode 39.
friction digunakan agar setelah keycode pada keyboard dilepas karakter gajah tidak langsung begitu saja berhenti, sedangkan scaleX digunakan untuk membuat sedikit animasi saat gajah bergerak ke kiri ataupun kanan.

Hmm kayaknya segini aja dulu deh ya posting saya kali ini.
Ada yang penasaran dengan codingan full nya? Silahkan komen, dan InsyaAllah akan saya berikan full source code nya. :)
Oiya ini bikinnya di Adobe Professional CS 5.5 dan pake AS3 yaa.
Dan maaf ya kalo masih banyak kekurangan, semata-mata itu karena kemalasan saya dan kekurangan saya sebagai seorang manusia dan pemula :)

Komentar

Posting Komentar

Postingan populer dari blog ini

Ustadz Adi Hidayat, Lc., MA

precious song - Jayalah Telkom Indoensia -