Category Archives: Programming

State Settings Dengan Bitwise Operation

Ok, a little confession.. I know minggu ini saya seharusnya melanjutkan bagian 3 dari seri  Blackberry Game Development Tutorial, hanya saja minggu ini saya masih relatif sibuk sehingga belum sempat menyelesaikan artikelnya (itu, dan karena ngejar ngabisin nonton The Big Bang Theory season 2 :P ). So instead, untuk minggu ini saya akan menulis mini-article tentang bitwise state setting sebagai gantinya. Teori ini sebenarnya bisa diaplikasikan ke berbagai macam programming language, namun karena Java adalah bahasa yang paling saya kuasai, maka sample-sample yang saya berikan akan saya tulis dengan Java juga. Okay, on to the topic..

Asumsikan kita dihadapkan pada problem berikut: Kita akan membuat sebuah game rock-paper-scissors. Pada model yang sederhana, rule-nya adalah sebagai berikut:

  • Rock beats scissors
  • Scissors beats paper
  • Paper beats rock
Untuk kasus ini, kita bisa membuat method sederhana untuk mengecek pemenang:
private static final int ROCK = 1;
private static final int PAPER = 2;
private static final int SCISSORS = 3;

public String checkWin(int myHand, int enemyHand) {
   //bila sama, maka seri
   if (enemyHand == myHand)
       return "It's a Tie!";
    switch(myHand) {
       case PAPER:
          if (enemyHand == ROCK)
              return "You Win!";
          break;
       case ROCK:
          if (enemyHand == SCISSORS)
              return "You Win!";
          break;
       case SCISSORS:
          if (enemyHand == PAPER)
              return "You Win!";
          break;
    }

    //pemain kalah
   return "You Lose!"
}

Namun bagaimana bila melakukan perhitungan yang lebih kompleks, seperti perbandingan elemen? Katakanlah kita memiliki sebuah kasus sbb: kita ingin membuat game seperti rock-paper-scissors, namun ketimbang menggunakan gunting, batu dan kertas kita ingin membuatnya lebih kompleks dengan menggunakan elemen-elemen seperti air, api dan tanah sebagai pembandingnya. Rule-nya adalah sebagai berikut:

  • Water defeats Fire
  • Fire defeats earth
  • Earth defeats Water
  • Wind defeats Earth and Fire, but loses to Water
  • Thunder defeats Earth, Wind and Water, but loses to Fire
(Note: bukan contoh yang paling realistis memang, but please bear with me :P )
Untuk kasus ini, kita bisa menyelesaikannya dengan menggunakan beberapa if-then-else statement, namun kita bisa membuatnya lebih sederhana dengan menggunakan bitwise operation. Sebelumnya, mari kita bahas beberapa bitwise operation yang bisa kita gunakan.

bhimz

BhimZ adalah seorang Mobile Development Manager di salah satu perusahaan swasta di Jakarta, membantu mengembangkan berbagai macam aplikasi mobile khususnya untuk platform smartphone. Bersama rekan-rekannya sesama hobbyist, BhimZ juga membentuk Pokkon Studio sebagai project after office dan memulai mengembangkan beberapa game baik web-based maupun mobile, beberapa di antaranya sedang dirilis untuk Blackberry AppWorld dan Android Market.

Tambahkan musuh, tambahkan ketegangan

Di artikel pertama saya, kita membuat pesawat kita bergerak sesuai tombol yang ditekan. Di artikel kedua, pesawat kita sudah bisa menembakkan peluru di arah mouse. Sekarang kita akan menambahkan musuh untuk kita lawan. Langsung saja, tambahkan sprite berikut ke folder asset

 


sprite seperti ini disebt spritesheet, yaitu satu file gambar / image terdapat beberapa sprite yang nantinya bisa dianimasikan oleh engine, dalam hal ini flashpunk. Buatlah class enemy yang meng-inherit class Entity.

 

package
{
	import net.flashpunk.Entity;
	import net.flashpunk.graphics.Spritemap;
	import net.flashpunk.FP;

	/**
	 * ...
	 * @author Aryadi Perwira Subagio
	 */
	public class Enemy extends Entity
	{
		private var img:Spritemap;
		private var logic:EnemyAI;

		public function Enemy(sprite:*, AI:EnemyAI)
		{
			img = new Spritemap(sprite, 32, 32);
			img.add("fly", [0, 1, 2], 10);
			graphic = img;
			img.play("fly");

			logic = AI;
			logic.actor = this;
		}

		override public function update():void
		{
			logic.update(FP.elapsed);
		}

	}

}

Read more …

Aryadi Perwira

Self-proclaimed AS3 blackbelt.

More Posts

Exploring Alternativa3D – Part 1

Baru baru ini Adobe telah meluncurkan update terbarunya untuk Flash Playernya,  yaitu Flash Player 11 . Flash Player 11 ini bukan hanya update bug ataupun performa semata, tetapi juga memperkenalkan fitur baru untuk developer yaitu Stage3D . Apakah itu Stage3D? secara mudahnya stage3D adalah metode rendering 3D dengan dukungan GPU , jadi segala komputasi 3D dilakukan di GPU bukan CPU lagi. Stage3D ini memungkinkan konten 3D dengan jutaan poly dirender oleh flash dengan kecepatan 60 fps. Sounds Cool eh? bayangkan game sekelas Crysis 2 dimainkan lewat browser.

Read more …

fugogugo

undergraduate student at UGM, co-founder and Game Programmer at Amagine Interactive.

More Posts

Stop SOPA