Kamis, 31 Maret 2011

JarBOOM untuk N-Gage dan s60v1 lainnya






Jadi inget awal tahun 2010 lalu saat saya lagi seneng-senengnya mengkoleksi tool-tool (aplikasi) berbasis python. Setelah kagum dengan kemampuan aplikasi sisboom, saya nemu aplikasi sejenis yaitu jarboom. Langsung deh tanpa basa-basi saya sedot srooot... Saat dan dicoba... "Teet..!!!" pesan error muncul, lalu saya cari informasi di blog-blog ngagelover/gager senior (bang Yoto, bang Erwien, bang Redz & bang Alwane) ternyata aplikasi jarboom memang tidak mau jalan di s60 1st termasuk N-Gage. Kecewa banget waktu itu.



Alhamdulilah saya dan kang Gulam berhasil mengedit aplikasi sisboom agar bisa jalan di N-Gage dan s60v1 lainnya. Menurut informasi yang tercantum aplikasi ini, penciptanya adalah seoramg programer dari Turki (maaf kalau salah) dengan nickname White Tiger, dan di edit oleh rus929 pada tahun 2009.



Yang kita lakukan hanya mengubah fungsi-fungsi (dan nambah credit hehe...) aplikasi ini
agar dapat berjalan pada s60v1. Fitur, UI, dll sengaja saya biarkan standar untuk menghormati pembuat aplikasi ini (baca: males ngedit, hehe... ). Ok buat pengguna N-Gage dan s60v1 lainnya (masih ada ga ya yg pake s60 v1 selain N-Gage) yang mau utak-atik aplikasi/game java monggo download disini jarBOOM nya.

Ralat dari kang Gulam: D ngage klasik bs jalan, dg syarat d c:\\ harus ada folder DATA dg isi file powlite_fm.mbm,baru deh bisa ngacir jarboomnya.

Minggu, 27 Maret 2011

Tehnik looping atau perulangan




Masih membahas seputar graphics programing, untuk menampilkan banyak objek gambar pada canvas dapat menggunakan perulangan. Bahkan jika objek tersebut mempunyai karakteristik yang berbeda - beda sekalipun. Sebagai contoh, kita akan membuat efek hujan salju sederhana seperti screenshot diatas. Pada program ini satiap partikel salju mempunyai kordinat posisi (x, y) dan mempunyai ukuran yang berbeda - beda, kecepatan partikel turun (gravitasi) ditentukan dari besar kecilnya partikel tersebut.



Langkah awal, kita buat script untuk menampilkan tiga buah gambar point pada canvas (nanti kita perbanyak), posisi X, Y gambar terserah mau diisi berapa saja, namun jangan melebihi ukuran layar hp sobat, kodenya seperti ini:





import appuifw

import graphics

import e32

import random



def tutup():

>>global run

>>run=0



img=graphics.Image.new((176,208))



c=None

# agar program berjalan lebih cepat, gambar kita handel



def handel_gambar(rect):

>>if c: c.blit(img)



c=appuifw.Canvas(redraw_callback=handel_gambar)

appuifw.app.body=c



appuifw.app.screen='full'

appuifw.app.exit_key_handler=tutup

run=1







#posisi objek pertama

posX1=61

posY1=40

size1=1



#posisi objek kedua

posX2=10

posY2=89

size2=4



#posisi objek ketiga

posX3=75

posY3=23

size3=2





while run:



>>img.clear(0)

>>#menampilkan objek

>>img.point((posX1,posY1),0xdddddd,width=size1)

>>img.point((posX2,posY2),0xdddddd,width=size2)

>>img.point((posX3,posY3),0xdddddd,width=size3)



>># menjalankan semua objek ke bawah seolah-olah salju turun

>># agar lebih realistis, kecepatan objek turun ditentukan dari besar kecilnya objek tersebut



>>posY1+=size1

>>posY2+=size2

>>posY3+=size3



>># deteksi tubrukan, setiap Y objek lebih besar dari 208 (tinggi layar),

>># Y objek dipindahkan ke atas layar, sedangkan X objek di-random antara 0-176 (lebar layar), ukuran objek juga di random



>>#objek 1

>>if posY1>208:

>>>>posX1=random.randint(0,176)

>>>>posY1=0

>>>>size1=random.randint(1,5)



>>#objek 2

>>if posY2>208:

>>>>posX2=random.randint(0,176)

>>>>posY2=0

>>>>size2=random.randint(1,5)



>>#objek 3

>>if posY3>208:

>>>>posX3=random.randint(0,176)

>>>>posY3=0

>>>>size3=random.randint(1,5)





>>handel_gambar(())

>>e32.ao_yield()




Copas dan simpan kodenya menjadi file txt dengan exsistensi *.py. Ganti semua tanda ">" pada awal baris kode dengan spasi. Kode yang saya beri warna hijau adalah kode program aplikasi, sedangkan yang merah adalah kode program efek salju yang kita buat. Bingung membuat scriptnya? Monggo download scriptnya disini. Silahkan dilihat2 scriptnya, masih bingung membaca scriptnya? Monggo simak yang ini dulu. Sudah nggak bingung kan? Mari kita lanjut ...



Coba lihat kode yang saya tulis diatas. Untuk menampilkan 3 butir salju saja butuh 27 baris kode (kode yang berwarna merah, tidak termasuk penjelasan), bagaimana kalau butiran saljunya buanyak seperti pada screenshot? Pasti sampai ratusan baris. Wah bisa copot jempolnya... Karena kita semua sayang jempol, mari kita ubah kodenya agar program yang kita buat lebih pintar dan dapat melakukan semuanya. Sebelumnya, kita gabungkan semua variabel yang menyimpan data - data objek kedalam list, ubah kode yang berwarna merah menjadi seperti ini:





# semua X objek di masukkan dalam satu list

posX=[61, 10, 75]



# begitupun Y dan ukuran objek

posY=[40, 89, 23]

size=[1, 4, 2]





while run:



>># karena penyimpanan data objek nya di ubah menjadi list, cara pengambilan data nya juga harus dirubah



>>#menampilkan objek

>>img.point((posX[0],posY[0]),0xdddddd,width=size[0])

>>img.point((posX[1],posY[1]),0xdddddd,width=size[1])

>>img.point((posX[2],posY[2]),0xdddddd,width=size[2])



>># menjalankan semua objek ke bawah seolah-olah salju turun



>>posY[0]+=size[0]

>>posY[1]+=size[1]

>>posY[2]+=size[2]



>># deteksi tubrukan



# objek 1

>>if posY[0]>208:

>>>>posX[0]=random.randint(0,176)

>>>>posY[0]=0

>>>>size[0]=random.randint(1,5)



>>#objek 2

>>if posY[1]>208:

>>>>posX[1]=random.randint(0,176)

>>>>posY[1]=0

>>>>size[1]=random.randint(1,5)


>>#objek 3

>>if posY[2]>208:

>>>>posX[2]=random.randint(0,176)

>>>>posY[2]=0

>>>>size[2]=random.randint(1,5)




Simpan perubahan yang telah kita lakukan. Hmm... Sudah sedikit lebih ringkas, tapi masih belum bersahabat dengan jempol jika objek nya banyak. Yang kita lakukan diatas adalah menggabungkan semua data yang jenisnya sama (posX, posY, size). Selanjutnya meggabungkan pengolahan data yang prosesnya sama (program yang di while). Proses pengolahan pada program ini ada tiga macam, yaitu: proses menampilkan gambar, proses animasi salju turun kebawah, dan proses deteksi tubrukan. Salah satu cara penggabungannya adalah menggunakan perulangan "for". Apa itu "for"? Agar lebih jelas, saya ambil contoh perulangan for yang buanyak beredar diinternet seperti ini:



for i in range(2):

>>print i



hasil:

0

1

2




for menjalankan event yang berada didalamnya (pada contoh diatas event adalah print) sebanyak nilai yang kita tentukan (pada contoh diatas 2). Default nya dimulai dari angka nol. Didalam " i " tersimpan nilai - nilai proses perulangan. Berikut ilustrasi proses yang dilakukan for:



i = 0

print i # hasil: 0

i = i+1

print i # hasil: 1

i = i+1

print i # hasil: 2



Proses diatas akan terus berjalan sampai nilai " i " sama dengan nilai batasan yang ditentukan.



Seperti yang kita ketahui, untuk memanggil semua nilai list posX secara manual seperti ini:



print posX[0] # hasil: 61

print posX[1] # hasil: 10

print posX[2] # hasil: 75



Perhatikan angka - angka yang kita gunakan untuk memanggil list posX diatas (0, 1, 2). Angka - angka tersebut sama dengan nilai " i " pada contoh perulangan "for" bukan? Nah.. Jika kita memanggil semua list menggunakan for, kodenya:




for a in range(2):

>>print posX[a]



hasil:

61

10

75


Lho.. kok "a", Bukan "i"? "a" dan "i" adalah nama varibel, sama seperti nama list. Jadi terserah mau dikasih nama apa saja, misalnya:



for tomat in range(8):

>>print tomat



hasil:

0

1

2

3

4

5

6

7

8


Sebenarnya banyak variasi looping menggunakan for, tapi karena efek salju yang akan kita buat cukup menggunakan looping basic ini, jadi cuma satu ini yang saya jelaskan pada coretan ini. Silahkan googling jika ingin mengetahui lebih banyak tentang "for". Nah, sekarang pengaplikasian for pada program kita. Ubah semua kode yang berada didalam while yang berwarna merah menjadi seperti ini::




while run:



>># len() digunakan untuk mengetahui jumlah elmen yang terkandung pada sebuah list

>># kita menggunakan len(posX untuk memberi nilai batasannya agar kita tidak repot menggonta-ganti nilai batasan sesuai jumlah objek



>>for j in range(len( posX )):

>>>>img.point((posX[j],posY[j]),0xdddddd,width=size[j])



>>>>posY[j]+=size[j]



>>>>if posY[j]>208:

>>>>>>posX[j]=random.randint(0,176)

>>>>>>posY[j]=0

>>>>>>size[j]=random.randint(1,5)



Sekarang berapapun jumlah objek yang ingin kita tampilkan, for akan memproses semuanya. Untuk menambah objek, kita tinggal menambahkan nilai pada list posX, posY, dan size. Namun perlu diingat bahwa satu gambar point membutuhkan data posX, posY dan size. Jadi jumlah list posX, pos Y dan size harus sama.



Script diatas sudah selesai jika partikel salju yang ingin kita tampilkan sedikit misalnya 8. Masalah datang ketika kita ingin menampilkan banyak partikel. Misalnya 50 partikel maka list data nya juga akan panjang. Atau kita ingin mengubah jumlah salju yang ditampilkan kita harus mengedit - edit semua list tersebut. Agar masalah diatas tidak muncul kita tambahkan fungsi untuk men-generate data objek dengan sendirinya. Untuk membuat generator kita masih menggunakan perulangan juga, namun perulangan yang kita gunakan adalah " while ". Berbeda dengan for, while akan terus melakukan perulangan tanpa menyimpan proses perulangannya hingga exception terjadi. Kita tambahkan kode yang berfungsi sebagai generator sebelum while utama:





# Semua list kita kosongkan

posX=[]

posY=[]

size=[]



partikel=20 # jumlah partikel





# proses generating (bukan while utama)

while len(posX) < partikel:

>>proses pengisian data

>># data - data yang dimasukkan nilainya kita acak

>>posX.append(random.randint(0,176))

>>posY.append(random.randint(0,208))

>>size.append(random.randint(1,5))





while run:


Kode yang berwarna biru adalah generatornya. Nah, akhirnya selesai juga. Sekarang untuk mengubah jumlah butiran salju yang ditampilkan kita tinggal merubah nilai variabel "partikel". Awas!! Jangan menampilkan partikel salju terlalu banyak (misalnya 1000), jika dilakukan mungkin dapat menyebabkan ponsel hang karena keterbatasan kemampuan ponsel. Dengan Pys60 kita dapat membuat simulasi hujan salju, namun bukan berarti dapat membuat simulasi badai salju hehe... Jumlah partikel maksimal yang telah saya coba pada ponsel N-Gage QD adalah 100 dan sudah terasa beratnya. Jadi jika ponsel sobat nge-hang dikarenakan menampilkan partikel salju terlalu banyak jangan salahkan saya :D.



Tehnik perulangan ini tidak hanya digunakan untuk membuat efek salju saja, coba lihat pesawat - pesawat musuh pada game Sky Force reloaded ini:







Tehnik memunculkan banyak musuh pada game tersebut basic nya kurang lebih mirip dengan efek salju yang kita buat, namun kita tidak mungkin membuat game seperti ini pada Pys60 khususnya s60 1st dikarenakan banyak faktor.



Coretan ini hanya berdasarkan hasil coba - coba saya (trial & error), mohon maaf jika ada penjelasan - penjelasan yang salah. Sampai disini dulu, semoga bermanfaat dan happy coding ...


Updated:

Kelupaan ga nampilin hasil akhirnya hehe... Buat yang pengen langsung nyoba script yang sudah jadi download disini.


KarungBALAP



Akhirnya jadi juga game ini, setelah bolak - balik diterbangkan lewat email, antara email saya dengan email kang gulam entah berapa kali. Maklum namanya juga newbie2 yang belajar bikin game, jadinya ya banyakan bingungnya hehe ...

Kayaknya game ini kecepetan launchingnya ya, agustus masih lama nih (^_^). Ada tiga pembalap yang dapat dipilih pada game lomba balap karung ini, salah satunya adalah pembalap asing dan semuanya memakai karung. Ya iyalah... Namanya juga balap karung huhu .. Siapa aja pembalapnya? Monggo dicoba, download disini.

Kamis, 10 Maret 2011

Contoh script gambar (basic)

Coretan ini sekedar share penjelasan tentang basic script gambar pada pys60. Ceritanya beberapa waktu yang lalu kang Gulam request deskripsi game, nah karena penjelasan satu game utuh lumayan panjang, jadi saya cicil dikit-dikit, nanti jika saya dapat rejeki pasti saya lunasi (emangnya utang? Hehe...).



Gambar yang dimaksud disini bukan gambar dari file JPEG atau PNG, melainkan gambar berbasis RGB (sering disebut old graphics) dari module graphics. Dan agar lebih praktis, juga karena saya malas upload sepotong-sepotong maka langsung saya bungkus menjadi satu file zip.



Download disini



Setelah mengutak-atik script diatas, mungkin ada yang masih bingung pada baris2 script menggambar point, bulat kotak, dan line ( pengalaman pribadi :D). Berikut sedikit penjelasannya..



Rectangle dan Ellipse

img.rectangle((100,40,120,80),0x00dddd, fill=0xdd0000)
img.ellipse((100,40,120,80),0x00dddd, fill=0xdd0000)


- angka-angka dalam kurung adalah posisi objek tersebut (posisiX, posisiY, posisiX+lebarObjek, posisiY+tinggiObjek)

- kode yang berada ditengah (0x00dddd) adalah warna garis pinggir objek dalam mode RGB (Red, Green, Blue) 0xRRGGBB. Bisa juga menggunakan mode: (R,G,B). Contoh:

img.ellipse((100,40,120,80),(255,0,0), fill=(255,255,0))


- fill=0xdd0000 adalah warna objek. Jika ingin agar objek yang ditampilkan garis pinggir saja, tidak perlu menggunakan kode ini atau fill=None.




Point

img.point((50,20),0xdddddd, width=10)


Berbeda dengan ellipse, penggambaran point berdasarkan titik kordinat posisi x,y nya, width=10 adalah lebar point.



Line
img.line((60,90,80,70),0x00dd00)


line intinya, membuat sebuah garis yang menghubungkan dua buah titik. Maka pengaturan posisinya: (x1, y1, x2, y2).


Sampai disini dulu. Jika ada yang bingung dengan coretan saya ini, mohon komentarnya.

Sabtu, 05 Maret 2011

For Life: This my night


For Life 2 screenshot 1
For Life 2 screenshot 2
For Life 2 screenshot 3


Game Description:

For Life dengan versi berbeda. Kali ini musuh bukan lagi mahluk kloning, melainkan hantu - hantu gentayangan.

Terdapat 9 Stage, dan 3 jenis musuh.


Genre: action

Platform: Symbian s60 1st and 2nd.

Language: English

Info:

Download links:
http://tigan.fiz.su/files/games/ForLife2.zip
http://tigan.fiz.su/files/games/ForLife2v125.sis

Rabu, 02 Maret 2011

Game pys60: Test Pilot

Ini game hasil karya kang gulam yg sangat menghormati temannya, masa teman seperpys60an dia bilang master, pengetahuan saya tentang python masih sakiprit (sangat sedikit) bisa gawat nih kalau saya dikira master betulan ntar hehe.. Saya cukup salut pada dia karena bisa memasukkan unsur fun pada game ringan sperti ini.


Gamenya bisa didownload di rumah onlinenya http://gulammalug.xtgem.com. Wayo dicoba....

Edit: maaf2, lupa saya kalau game test pilot ini dibungkus dan diberinama A1. Silakan klik link A1 di situsnya kang gulam untuk mendownload (^_^)