Minggu, 11 Desember 2011

Ngebut 2 Speed Drift

Walaupun ini cuma game sederhana pembuatan game ini lumayan lama, saya sempat berpikir untuk tidak melanjutkan game ini. Namun akhirnya jadi juga walaupun sampai 4 kali mengulangi pembuatannya dari awal :).
Dan ini pertama kalinya saya puas dengan game bikinan ndiri hoho.



Gameplaynya masih sama dengan game sebelumnya, ngebut secepat mungkin sebelum waktu habis. Kekurangan utama, game ini sangat berat. Di N-Gage QD saya kecepatannya sekitar 5 frame perdetik.



Oya, game ini hanya membutuhkan module pys60 standar.





Title:

    NGEBUT 2 Speed Drift



Version:
    1.03


Genre:
    Racing, Arcade simulation


Game content:

    7 vehicles

    8 tracks

    1 vehicle bonus

    1 track bonus



Graphics:

    Flat graphics

    Pseudo 3D road

    True 3D 3 angle rotation vehicle

    2D Resizing road detail



Sound:
    Sunyi :D


Screenshot:

    Ngebut 2 Speed Drift
    Ngebut 2 Speed Drift
    Ngebut 2 Speed Drift
    Ngebut 2 Speed Drift


Download link:


Tutorial membuat game sederhana (bagian 2)

Pendefinisian variabel



Agar objek (bola dan keranjang) yang akan kita gambar dilayar dapat digerakkan, kita menambahkan variabel X,Y untuk menentukan posisi objek. Dalam kordinat kartesian, X sebagai kordinat horizontal dan Y sebagai kordinat vertikal. Selain X,Y, kita juga menambahkan variabel speed untuk menentukan kecepatan gerak objek. Pendefinisian variabel dilakukan diluar game loop. Yaitu diatas while:






bolaX dan keranjangX saya beri nilai 88 agar posisisinya ditengah layar karena resolusi hp saya 176x208 (176 / 2 = 88), silahkan disesuaikan dengan resolusi hp anda.




Penggambaran objek ke layar



Selanjutnya proses penggambaran. sebelum menambahkan gambar bola dan keranjang kita merubah background yang putih menjadi hitam dulu mengunakan attribut clear(warna). Penambahannya ditaruh didalam loop.






Sekarang background sudah menjadi hitam (run script untuk mengetes). Selanjutnya menggambar objek. Gambar yang akan kita pakai menggunakan gambar flat lingkaran untuk gambar bola dan kotak untuk gambar keranjang. Flat gambar ini menggunakan fungsi dari module graphics yaitu ellipse() dan rectangle(). Alasan saya menggunakan gambar flat ini karena setahu saya bisa berjalan pada semua type s60 mulai dari os6 (mohon dibenarkan kalau salah).
Sedangkan kalau pakai file gambar (.jpg, .png dll) pada os6 harus menggunakan module tambahan yaitu image1st untuk meload gambar dan masalah utamanya adalah tidak support transparansi pada os6. Tapi bukan masalah untuk os7 keatas. Back to topic, pertama kita membuat gambar keranjang dulu. Ukurannya 20x40 piksel.






Pada keranjangX-20 kita mengatur agar posisi kiri kotak selalu berada pada "posisi keranjang dikurangi 20". Angka 20 adalah "lebar keranjang dibagi 2" (40 / 2 = 20). Dan pada keranjangX+10 kita mengatur agar posisi kanan kotak selalu berada pada "posisi keranjang ditambah 20". Dengan begitu posisi keranjang (keranjangX) berada ditengah2 objek dan memudahkan untuk melakukan deteksi tumbukan. Dan pada keranjangY juga sama. Syntax 0x0000ff adalah warna keranjang.



Selanjutnya kita menggambar bola. Tehniknya sama, bedanya kita menggunakan ellipse(). Ukuran bolanya 20x20







Input player



Sekarang sudah ada gambar keranjang kotak dan gambar bola, tapi belum bisa bergerak. Agar keranjang dapat dikontrol oleh player. Kita membuat script untuk memberi output berdasarkan input player. Saat player memberi input dengan menekan tombol arah kanan, kita atur agar program memberi output yaitu menggerakkan objek keranjang ke kanan. Saat player memberi input kiri, kita atur agar program memberi output menggerakkan objek keranjang ke kiri.






Kode "if key.is_down(key_codes.EScancodeLeftArrow):" terdiri dari satu baris. Kode "keranjangX -= speedKeranjang" juga satu baris. Sekarang jika di run script, saat tombol kiri ditekan keranjang bergerak kekiri. Syntax ini menge-cek apakah tombol arah kiri ditekan atau tidak. Dan pada baris dibawahnya adalah mengupdate posisi keranjangX dengan cara mengurangi nilai keranjangX sebanyak nilai speedKeranjang. Cara kerjanya seperti ini:



keranjangX = 88

speedKeranjang = 1



dan pada loop:



- keranjangX = keranjangX-speedKeranjang

88-1 = 87

- keranjangX = keranjangX-speedKeranjang

87-1 = 86

- keranjangX = keranjangX-speedKeranjang

86-1 = 85


proses itu akan dilakukan terus - menerus selama tombol arah kiri ditekan. Hasilnya seolah2 gambar keranjang bergerak kekiri.



Cara yang sama digunakan untuk menggerakan keranjang ke kanan. Bedanya kita menambahkan nilai speedKeranjang ke keranjangX.







Untuk gerakan bola akan saya gabung dengan pembahasan deteksi tumbukan pada tahap selanjutnya. Script tahap ini bisa di download disini:

GameSayaTahap2.zip

Rabu, 30 November 2011

Tutorial membuat game sederhana (bagian 1)

Yok bikin game !! Coretan ini membahas dasar2 cara bikin game sederhana. Saya usahakan agar mudah diikuti oleh anda2 yg masih baru atau belum mengenal Pys60. Yang saya tulis disini sebagian sudah pernah saya bahas pada postingan2 sebelumnya dan akan saya jelaskan dengan bahasa yg lebih sederhana step by step.




Pendahuluan


Pastikan Python interpreter dan modul/library Python standar sudah terinstal pada hp anda. Jika kesulitan mencari yang sesuai untuk type hp anda, silahkan bertanya di Symbian & Pys60 Center (grup fb) atau di blog temen2 yang membahas Pys60.



Selain itu kita juga membutuhkan aplikasi text editor. Dalam contoh ini saya menggunakan aplikasi file manager X-plore versi 1.22 karena multifungsi dan pengoperasiannya mudah (bagi saya). Ok cukup itu saja, lanjut ketahap berikutnya.





Pengenalan


Dalam pembuatan game ini saya menggunakan hp s60v1, namun saya menggunakan syntax2 Python dasar jadi bisa diterapkan pada versi2 s60 yg lainnya (mungkin dengan sedikit penyesuaian). Gameplay yang akan kita buat cukup sederhana yaitu pemain menggerakkan keranjang ke kiri dan kekanan untuk menangkap bola yang berjatuhan dari atas untuk mengumpulkan skor. Game berakhir jika ada bola yang tidak berhasil ditangkap. Pernah memainkan game sejenis? Sekarang kita akan membuatnya.




Tahap awal


Download file ini GameSayaAwal.zip. Didalam file tesebut terdapat satu file text biasa yang saya beri eksistensi ".py" agar program Python tahu kalau itu adalah script python. Jalankan aplikasi X-plore dan extrax/unzip file tersebut ke dalam folder E:\\System\Apps\Python\My\. File tersebut berisi sebuah class bernama Keyboard yang berfungsi untuk meng-handel input dari keyboard. Anda tidak harus mengerti syntax2 pada file tersebut. Class tersebut tidak akan saya jelaskan dengan detail karena saya mengusahakan agar tutorial ini semudah mungkin untuk diikuti. Nantinya kita menggunakan class tersebut untuk mengetahui apakah ada key/tombol yang ditekan atau tidak.
Sekarang kita edit file GameSaya.py (tekan angka 8) lalu buat baris baru (tekan angka nol 3 kali untuk membuat baris baru) tepat dibawah kode return False". Baris ini cuma untuk memisahkan atau mengelompokkan kode script agar mudah dibaca. Lanjut ke tahap berikutnya.





Meng-import module


Apaan module? Module adalah sekumpulan kode script yang dapat kita gunakan. Pada s60 1st dan 2nd module2 ini terletak di folder E:\\System\Libs\. Untuk membuat game ini kita akan menggunakan beberapa module standar/bawaan Python yaitu: appuifw, graphics, e32, dan key_codes. Buat apa module2 itu? Nanti saya jelaskan penggunaannya pada game. Agar module2 tesebut dapat kita gunakan, kita harus meng-import terlebih dahulu. Caranya dengan menuliskan syntax import dilanjutkan dengan nama module. Seperti ini:



besar kecilnya huruf harus sama dengan yang saya tulis pada gambar (huruf kecil semua). Setelah itu kita import module graphics pada baris selanjutnya. Caranya sama dengan meng-import module appuifw diatas. Setelah itu dilanjutkan dengan module e32 dan key_codes. Seperti ini:



Ingat, simbol, huruf, angka, dan spasinya harus sama persis seperti pada gambar, kalau tidak bisa menyebabkan error. Oke sekarang semua module telah kita import. Lanjut..




Instance class Keyboard


Instance sederhananya adalah memberi nama panggilan untuk memanggil satu atau sekumpulan script dengan tujuan untuk memudahkan pemanggilan. Pada kasus ini kita memberikan nama key untuk class Keyboard. Caranya dengan menuliskan kode seperti ini:



Atur User Interface


UI game kita menggunakan fungsi2 pada module appuifw. Sekarang kita mengatur UI program kita. Kita mulai dengan mengatur agar layar game kita fullscreen:



Karena yang kita buat adalah game yang pada dasarnya menampilkan gambar ke layar, maka kita akan menggunakan salah satu fungsi yang terdapat pada module appuifw yaitu Canvas untuk menampilkan gambar. Kita buat instance canvas dan mengaturnya agar meng-handle key (ingat, 'key' adalah instance class Keyboard dan jangan lupa apa itu instance).



Perhatian!! Mulai dari kanvas sampai dengan handle_event) adalah satu baris. Karena layar hp saya tidak cukup, maka ditampilkan menjadi beberapa baris (inilah repotnya scripting pakai hp). Selanjutnya kita gunakan kanvas sebagai body aplikasi.:



Pengaturan UI sudah selesai.




Atur graphics/gambar


Yang akan kita lakukan disini adalah mengatur gambar bukan menampilkan gambar pada layar (belum saatnya). Seperti menyiapkan kertas gambar dan pensil. Dimulai dengan membuat variabel berisi informasi ukuran layar hp:



Variabel? Apaan lagi nih?? Variabel adalah sebuah nama seperti nama panggilan pada instance. Tapi nama pada variabel berisi suatu data. Dan pada kasus diatas, variabel yang saya namai resolusiLayar menyimpan data (176,208).
Buat sebuah gambar dengan module graphics dan menggunakan varibel resolusiLayar sebagai ukuran gambar:



yang kita buat diatas adalah sebuah gambar putih polos sebesar ukuran hp kita. Nanti kita mengisi "gbr" dengan gambar bola dan keranjang. script diatas juga hanya satu baris.




Pengaturan game loop


Buat apa sih loop? Teori dasar animasi (ga tau ini pelajaran SMP ato SMA karena dulu saya ga di ajarin ini di SD) yaitu menampilkan sebuah gambar, lalu dilanjutkan dengan gambar selanjutnya secara cepat dan terus - menerus hingga seolah2 bergerak. Begitu juga pada game. Dan loop atau perulangan yang akan menjalankan teori animasi diatas. Sebelum loop dilakukan, kita harus membuat semacam saklar untuk mengatur loop tersebut. Jika saklar bernilai 1 maka proses loop berjalan, jika bernilai 0 maka proses loop dihentikan dengan kata lain game ditutup. Kita buat variabel saklar:



sebenanya bisa diberi nama apa saja, saya beri nama saklar untuk kemudahan. Dan kita beri nilai 1 agar saat script dijalankan looping juga berjalan.
Saklar sudah kita definisikan, sekarang membuat fungsi untuk menghentikan game:



Script diatas terdiri dari 3 baris. Pada baris pertama kita membuat fungsi yang saya beri nama keluarGame, sedangkan dua baris selanjutnya (yang mempunyai beberapa spasi sebelum kode syntax) adalah isi fungsi tersebut. Jika fungsi dipanggil maka semua isi fungsi akan dijalankan. Kegunaan "fungsi" adalah untuk mengelompokan beberapa kode script agar lebih mudah karena untuk menjalankan syntax2 yang berada didalam fungsi tersebut kita tinggal memanggil nama fungsinya. Pada baris kedua, global saklar adalah mengatur agar variabel saklar didalam fungsi tersebut menjadi variabel global. Pada baris ketiga, kita mengupdate nilai variabel saklar menjadi nol (nonaktif/menghentikan loop).
Selanjutnya kita mengatur tombol exit (right softkey) untuk menjalankan fungsi keluarGame saat ditekan.



syntax diatas terdiri dari satu baris.




Game loop


Sekarang masuk ke tahap perulangan. Untuk ini kita menggunakan while.



While akan menjalankan kode script didalamnya secara terus - menerus selama variabel saklar bernilai 1. Satuan proses perulangan disebut "frame".
Selanjutnya kita mengisi while dengan gbr dan sebuah fungsi dari module e32:



dua baris kode script diatas yang akan dijalankan while secara berulang-ulang. Pada baris kanvas.blit(gbr) kita menampilkan gbr pada kanvas. Pada baris dibawahnya kita menggunakan fungsi dari module e32 yang bernama ao_sleep. Fungsi ini digunakan untuk menghentikan loop selama 0.01 detik sebelum frame berikutnya dijalankan. Proses penghentian ini setahu saya untuk memberi waktu kepada UI untuk memproses setiap frame sebelum memproses ke frame berikutnya (tolong dibenarkan kalau salah).



Test script


Pada tahap ini script sudah dapat dijalankan. Cara menjalankannya:


  • Buka aplikasi Python

  • Tekan "Options" lalu pilih "Run script"

  • Cari script bernama "my\GameSaya.py" dan tekan ok



Jreng!! Muncul blank putih. Cuma itu? Iya, kan dari tadi kita cuma membuat gambar putih polos seukuran layar hp :). Cara menambah gambar bola yang jatuh dari atas? Cara menambah gambar keranjang yang bisa digerakkan kekiri dan kekanan? Insyaallah kita bahas pada bagian berikutnya.


Script yang anda buat error? Coba dibandingkan dengan script ini:

GameSayaTahap1.zip

Selasa, 29 November 2011

Kumpulan game pys60

ini adalah kumpulan game2 saya yang filenya di wap pada berubah jadi virus sms plus. Tadinya saya bingung karena saya ga punya backupan game2 nya untung kang Gulam masih menyimpan semua game2 ane, matur suwun kang. Sementara link download pada posting gamenya belum saye perbaiki karena saya gagal terus saat upload di wen.Ru. Buat yang mbelum dan mau nyoba game2 saya silahkan download dari gumalgamul.mywapblog.com. Link gamenya: http://gumalgamul.mywapblog.com/files/5gameamir.zip



Isinya:

For Life

For Life 2

Ngebut QD Indonesian Street

Part Of War

Shark Area 2

Rabu, 16 November 2011

Woro woro

Posting ini sekedar pemberitahuan. Tadinya saya tidak bisa mengakses dashbor blogger karena saya iseng nge-klik link "coba antar muka blogger yg diperbaharui" jadinya ga bisa diakses dari hp jadul (parah2). Alhmdulillah saya bisa posting di blog ini lagi setelah minta tulung kang Gulam. Matur nuwun kang.


Oya, HATI2 BUAT YG DOWNLOAD FILE DARI TIGAN.FIZ.SU KARENA SAYA DAPET LAPORAN KALAU SEBAGIAN BERISI VIRUS !!!. Maaf saya belum bisa benerin, belum nebus paket internet haha.. Mohon diteliti dulu sebelum di instal. Terimakasih kunjungannya.

Kamis, 06 Oktober 2011

Ball 3D

inget script ball.py bawaan module pack pys60? Ane coba bikin script
3D yang mirip dengan script tersebut. Insyaallah script ini jalan pada
s60 v1,v2,v3. Untuk yang ngetes pada s60 versi 3 keatas mohon
laporannya. Dan buat yang ngetes pada s60 2nd keatas mohon laporan
FPS-nya (Frame Per Scound) Scriptnya masih berantakan dan belum
dioptimasi. Download dimari:
http://www.tigan.fiz.su/files/Pys60_script/Ball3d.zip

Selasa, 27 September 2011

Ammo 3D aplikasi modelling sederhana

Ammo 3d
Ammo 3d
Ammo 3d
Ammo 3d

Dah lama bikin aplikasi ini tp karena hp jadul saya ngos-ngosan ngejalanin aplikasi ini jadi pembuatannya tidak saya lanjutkan. Sengaja saya share aplikasi unfinished ini siapa tau bisa buat nambah ide aplikasi atau apalah gitu :D. Ammo 3D singkatan dari "3d gAMe MOdeling" karena rencananya mau dipake buat bikin model2 3d sederhana buat dipake pada game. Aplikasi ini belum sempurna, tapi udah bisa dipake buat bikin model 3d rigid sederhana. Fitur Ammo 3d:




  • manage (build,edit or delete) vertex and polygon

  • dinamic control, support rotating (x,y,z), moving, and zooming model

  • 2 cursor modes: vertex and polygon mode

  • 3 display options: vertex, polygon, and fill polygon

  • load and/or save model as .txt file

  • only need python application and standart modules for run this application



Buat yang masih blank tentang 3d saya jelaskan dikit istilah2 dasar 3d untuk memudahkan penggunaan Ammo 3d. Sebuah model 3d terdiri dari banyak bidang datar yang disebut "polygon". Setiap polygon terdiri dari beberapa garis yang disebut Edge. Setiap edge terdiri dari dua titik yang disebut "Vertex". Posisi vertex ditentukan oleh tiga nilai kordinat yaitu: X,Y, dan Z. Kordinat X dan Y pada 3d sama seperti kordinat X dan Y pada 2d yaitu kordinat horizontal dan vertikal, sedangkan Z adalah kedalaman objek.



Tombol - tombol yang dipake pada Ammo 3d:


  • Tombol arah, bintang dan pagar pada mode Rotation digunakan untuk memuter - muter model, sedangkan pada mode Camera moves untuk mengeser posisi X,Y dan Z kamera.

  • Tombol 1 dan 2 untuk menggeser cursor.

  • Softkey kiri untuk membuka pilihan menu.




Contoh cara membuat model 3d:

  • jalankan script Ammo 3d. Muncul gambar segitiga yang bisa diputer2, ini adalah model 3d dasar yang akan kita edit

  • tekan softkey kiri, pilih "Display options" lalu pilih "vertices". Sekarang vertex nya keliatan

  • misalnya mau menambah vertex. Tekan softkey kiri, pilih "Vertex editor", sekarang tool vertex editor aktif

  • tekan softkey kiri dan pilih "Append" masukkan nilai X misalnya 2 dan tekan ok

  • masukkan nilai Y misalnya -2 dan tekan ok

  • masukkan nilai Z misalnya 2 dan tekan ok. Maka muncul vertex baru

  • tekan softkey kiri lalu pilih "Back"

  • untuk menambah polygon caranya sama, tapi yang dimasukkan adalah nomor vertex. Ammo 3d ini hanya support polygon berbentuk segitiga

  • untuk meng-edit atau menghapus vertex atau polygon, arahkan cursor ke vertex atau polygon yang ingin di edit atau dihapus



Aplikasi ini bebas di apa-apain. Kalau ada yang mengedit aplikasi ini mohon beritahu saya agar aplikasinya saya tampilkan disini.

Download Ammo 3D

Kamis, 08 September 2011

Dasar urutan kode logic game

Program game agar bisa jalan ada tahapan - tahapan tertentu. Berikut ini tahapan - tahapan dasar pada program gameplay:




- update objek

- gameplay logic

- render



- Update objek

Objek pada game misalnya karakter. Saat karakter begerak/berjalan, posisi karakter diupdate keposisi baru. Proses update disini bukan cuma update posisi objek tapi juga semua hal yang yang dibutuhkan tiap objek, misalnya: build objek, status, dll.



- Gameplay logic

contoh logic gameplay misalnya: proses tumbukan, pengecekan gameover, penambahan skor, dll.



- Render

render adalah proses menampilkan objek ke layar setelah diupdate



Jika tahapan - tahapan diatas terbalik dapat menjadi bug.



Contoh kasus:

Pada deteksi tumbukan, saat karakter berjalan dan menabrak tembok karakter berhenti berjalan. Urutan tahapan yang baik seperti ini:



- karakter berjalan

- logic tumbukan dengan tembok

- render karakter



jika urutannya terbalik misalnya seperti ini:



- karakter berjalan

- render karakter

- logic tumbukan dengan tembok



maka yang terjadi karakter berjalan masuk beberapa piksel (tergantung kecepatan berjalan) kedalam tembok lalu kembali kedepan tembok. Tidak langsung berheti didepan tembok.



Itulah contoh dasar urutan kode logic game. Semoga bermanfaat :D


Selasa, 17 Mei 2011

Puzzle Masters

Puzzle Masters ScreenshotPuzzle Masters ScreenshotPuzzle Masters Screenshot


Bikin game bareng kang Gulam lagi !!!. Sbenernya game ini sudah agak lama jadinya, tapi ntah kenapa gagal terus saat mau upload jadi baru di post sekarang setelah di aplod sama kang Gulam.


Cara mainnya pasti udah pada familiar lah, geser kotak-kotak ke kanan, kiri, atas, bawah atau ke timur, barat, selatan, utara sampai membentuk suatu gambar. Saya dulu pernah main game macam ini di Resident Evil 4 Ps2 (sebagai mini games), kalau ga salah saat Ashley dikejar2 zombie mirip mumi. Halah, malah ngelantur bahas Resident Evil 4. Ukeh, buat yang mau coba gamenya, atau yang mau ngebandingin dengan mini game RE 4, atau yang mau ngintip scriptnya silakan didonlot, buat yang ga mau ya ga papa, tapi harus donlot, haha... Ini link download nya:
dc347.4shared.com/download/jQkT8Org?tsid=20110516-231146-2e0dd329

Minggu, 08 Mei 2011

Part Of War


Part Of War screenshot 1
Part Of War screenshot 2
Part Of War screenshot 3


Game requestan kang Gulam, requestnya game heli 3d (sebenarnya bukan request, lha wong bantu bikinnya juga) tapi karena 3d terlalu sulit buat saya, jadinya buat game 2.5d shoot them up atau shmup. Player dapat menembakkan peluru sepesial juga dapat menembakkan dua peluru sekaligus untuk meledakkan musuh-musuh kuat misalnya Tank dengan lebih cepat, tapi penggunaan amunisi juga meningkat 2x lipat. Pemodelan kendaraan tempur masih menggunakan isometrik 1 rotasi angle seperti Shark Area 2.



Oiya, dapet saran dari brot Cebri Nugraha agar menyertakan script zip agar bisa buat belajar, makasih bro sarannya. Script yang di game saya konversi ke *.pyc untuk menghindari file ga sengaja ke edit dan membuat game error.



Maaf saya tidak bisa membuat deksripsi game dengan detail karena bisa panjang banget ni posting jadi saya coret2 sedikit. Dan script game ini jangan dijadikan patokan karena strukturnya acak2an.



Game ini menggunakan sistem OOP (tapi masih sangat kacau). Berikut garis besar penjelasan tiap file:




* Bgm.mid

file midi untuk background game diambil dari game java Kyushu Devil *ngumpet*.



* DrawPlus.py

Module yang mempunyai 2 fungsi yaitu menampilkan popup teks (help,about,gameover, dll.) dan menampilkan query (hanya saya gunakan untuk pause game). Module ini rencananya mau saya jadikan alternatif buat yang bosan dengan popup & query standar dari appuifw. Namun saat ini fungsi2nya masih bergantung dengan program game inti (Main.py).



* HeliBlack.py, HeliGreen.py, TankGreen.py, FighterGreen.py

Ini adalah script model2 objek (kendaraan tempur). Dalam script ini tersimpan data titik kordinat objek, proses transformasi kordinat sederhana dan penggambaran polygon objek juga dilakukan di file2 ini.



* GPclass.py

Fungsi mesin pencari target. Pada game Shark Area2 ini digunakan untuk AI hiu agar bisa mengejar ikan. Namun pada game ini hanya digunakan untuk merotasi objek kendaraan tempur agar arah objek sesuai pola gerakan karena game ini tidak menggunakan AI. Algoritmanya ngawur, yang penting jalan hehe...



* MenuClass.py

Fungsi menu ini digunakan pada main menu dan select stage. Script ini masih sulit dipakai dan masih ada bug terkadang harus menekan tombol berulang2 untuk membuka pilihan, namun bug tidak berpengaruh pada kinerja program.



* SL.py

Fungsi untuk meload dan menyimpan data (game.dt). Contoh script saya dapat dari Ini.



* game.dt

File tempat penyimpanan data game



* Viewer.py

Fungsi untuk menampilkan model kendaraan tempur yang diputer2 (biar kayak show room game Asphalt N-Gage gitu :p).



* Main.py

Ini adalah script inti game (file ini pada game bernama POW.py). Gameplay, tumbukan, scoring, dan semua script diatas dipanggil/diolah pada script ini. Looping utama juga dilakukan disini.


*cek satu2, hmm... Kayaknya ga ada yang kelewat* Itu garis besar sistemnya yang awut2an. Monggo kalau mau diobok2 *ngarep ada yg mau :D* . Link download? Ini dia:



Part_Of_War.sis

POW_script.zip

Rabu, 20 April 2011

List, fungsi, class

Haha.. Bingung mau kasih judul apa, intinya cuma contoh bagaimana mengelompokan script dengan penggunaan multi dimensional list:




nama_list=[[nilai,nilai],[nilai,nilai]]



fungsi berargumen:




def nama_fungsi(argumen):

>>>>isi_fungsi




dan class:




class nama_class:

>>>>isi_class




Sekali lagi ini hanyalah contoh, bukan struktur script yang baik, sampai saat ini saya masih coba ini, coba itu berusaha membuat struktur yang rapi dan fleksibel, tp belum berhasil.. Hehe... Ganti tanda ">" pada awal syntax dengan spasi. Sebagai contoh, data disimpan dalam multi dimensional list




type1 = ["Alas kaki", ["sepatu","sandal"]]

type2 = ["Tutup kepala", ["topi","peci"]]




Lalu misal kita ingin membuat fungsi untuk memproses nilai2 list diatas




def cek_type1():

>>>>print "kategori "+type1[0]+" berisi:"

>>>>>>>>for i in range(len(type1[1])):

>>>>>>>>>>>>print type1[1][i]




def cek_type2():

>>>>print "kategori "+type2[0]+" berisi:"

>>>>>>>>for i in range(len(type2[1])):

>>>>>>>>>>>>print type2[1][i]




#pemanggilan
cek_type1()

cek_type2()



Jika list type banyak macamnya misalnya type1,type2,type3...type40, kita harus mencari cara yang lebih efisien. Salah satu solusinya yaitu membuat mesin untuk melakukan proses (dalam hal ini proses pengecekan). Untuk ini kita dapat menggunakan fungsi berargumen




def mesin_cek(type_barang):

>>>>print "kategori "+type_barang[0]+" berisi:"

>>>>>>>>for i in range(len(type_barang[1])):

>>>>>>>>>>>>print type_barang[1][i]



# pemanggilan

mesin_cek(type1)

mesin_cek(type2)





Fungsi mesin_cek diatas memproses data argumen yang dimasukkan. Dengan begini, kita cukup menggunakan satu fungsi diatas untuk mengecek semua data list type kita.



Jika fungsi kita banyak akan lebih mudah diorganisir jika disimpan didalam class. Jika script diatas dikelompokkan dengan class:




class pakaian:

>>>>type1=["Alas kaki", ["sepatu","sandal"]]

>>>>type2=["Tutup kepala", ["topi","peci"]]


>>>>def mesin_cek(self,type_barang):

>>>>>>>>print "kategori "+type_barang[0]+" berisi:"

>>>>>>>>>>>>for i in range(len(type_barang[1])):

>>>>>>>>>>>>>>>>print type_barang[1][i]




#pemanggilan

p=pakaian()

p.mesin_cek(p.type1)

p.mesin_cek(p.type2)






"self" digunakan untuk menandai bahwa objek tersebut berada pada class yang sama. Jika kita tidak menyertakan self maka objek yang dipanggil adalah objek global, dan jika tidak ada objek global yang dimaksud, maka pesan error muncul. Contoh:



#global variabel angka

angka=1


class percobaan:

>>>>#lokal variabel angka

>>>>angka=6

>>>>def test(self):

>>>>>>>>print angka # global

>>>>>>>>print self.angka # lokal



c=percobaan()

c.test()

# jika variabel lokal angka dipanggil dari luar class, harus menyertakan instance class nya



print c.angka

print angka



Udah ah, cape nulis hehe... Happy coding..

Minggu, 17 April 2011

Shark Area 2






Game Description:

Sequel Shark Area yang merupakan game percobaan kenalan dengan Python (sampai sekarang pun masih belum akrab dengan Python (-.-)). Gameplay nya masih sama, yaitu cari makan dan hindari serangan Hiu. Perbedaannya adalah karakter atau objek ikan dalam game ini menggunakan 3D polygonal. Namun belum 3D murni, hanya 1 angle rotation dan prespektifnya juga belum sempurna.



Genre: action, simulation


Platform: s60 1st and 2nd.


Language: Bahasa Indonesia


Info: Kemungkinan game ini juga dapat berjalan pada s60 v3 dengan merubah system aplikasi nya


Download links: http://tigan.fiz.su/files/games/SharkArea2.sis


Galery:

Sabtu, 09 April 2011

Meload gambar external dengan module image1st

Melanjutkan coretan Contoh script gambar (basic), kali ini coretan tentang cara meload gambar eksternal khususnya pada s60 1st, namun bisa juga digunakan pada s60 2nd.




Fungsi pada module graphics yang berfungsi untuk meload dan menampilkan gambar pada appuifw.canvas() yaitu: graphics.Image.open(). Sayangnya fungsi tersebut hanya berjalan pada s60v2 keatas dan tidak jalan pada N-Gage saya yang masih s60 v1. Beruntung ada modul buatan pihak ketiga yang berfungsi untuk menampilkan gambar pada s60 v1. Modul tersebut bernama "image1st". Sebenarnya ingin membahas fungsi Image.open() juga, tapi karena saya ndak punya hp buat ngetest jadi hanya cara menampilkan gambar dengan image1st yang saya bahas. Sebelumnya simpan gambar dibawah ini dan taruh di folder E:\images\




Dan monggo download scriptnya disini




Sekilas tentang blit


nah buat yang melanjutkan membaca coretan ini karena pengen tau apa itu "blit()" monggo diteruskan. Buat yang sudah tahu apa itu "blit" mohon koreksi penjelasan saya kalau salah (^_^).. Pada Pys60 setahu saya, blit() berfungsi untuk menampilkan gambar baik gambar external ataupun old graphics didalam ataupun diluar objek gambar external atau old graphics juga.



Dalam contoh script yang telah didownload, blit untuk menampilkan gambar external:


img.blit(file_gambar)

gambar tersebut ditampilkan
apa adanya dengan posisi pada pojok kiri atas. Posisi gambar dapat kita atur target posisinya:


img.blit(file_gambar, target=(20,20))


penjelasan:

target=(x, y)



selain mengatur posisi target, kita juga dapat memotong gambar yang ingin ditampilkan (croping):


img.blit(file_gambar, target=(20,20), source=(20,20,20,20))


penjelasan:

source=(PotongGambarKiri, PotongGambarAtas,PotongGambarKanan, PotongGambarBawah)

pemotongan sebanyak nilai yang dimasukkan (dalam piksel)



Masih kurang? Kita juga dapat me-resize gambarnya:


img.blit(file_gambar, target=(30,30,30,30), scale=1)


penjelasan:

python akan meresize gambar sebesar/sesuai target yang kita masukkan. Pengaturan posisi target sama dengan source. Misalnya kita ingin meresize ukuran gambar menjadi fullscreen 176x208 (resolusi layar hp saya) maka posish target dirubah menjadi (0,0,176,208). Namun resize gambar ini lumayan berat.



Ada satu pengaturan lagi yaitu "mask" ini digunakan untuk mentransparansi gambar sayang, masking ini hanya support pada s60 2nd fp2 keatas. Maaf, saya belum mencoba masking ini jadi tidak saya bahas.



Itulah penggunaan fungsi blit() yang saya tahu dan telah saya coba. Buat yang ingin tahu lebih banyak tentang blit(), silahkan googling hehe...


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 (^_^)

Rabu, 16 Februari 2011

Contoh program game Gunting batu kertas

Pada coretan ini ane akan kasih contoh pembuatan program game sederhana. Game yang akan kita buat adalah sebuah game text based "Gunting batu kertas". Sebagai contoh penggunaan variabel, dictionary, definisi dan percabangan (else if) pada program game. Ok mari kita mulai:


- Import beberapa module yang akan kita gunakan



import appuifw, e32, random

- Mendefinisikan dictionary bernama "pilih" yang berisi tiga pasang key value, yaitu key Gunting yang kita beri value 0, key Batu yang kita beri value 1, key Kertas yang kita beri value 2



pilih = {"Gunting": 0, "Batu": 1, "Kertas": 2}

- Membuat variabel yang kita kasih nama "Pemain". Nantinya variabel ini akan kita gunakan untuk mendefinisikan nilai yang dipilih player/pemain nilainya diambil dari dictionary (0, 1, atau 2). Saat ini variabel ini kita buat tidak terdefinisi (None).



Pemain=None


- Kita buat variabel lagi yang kita kasih nama "Musuh". Nantinya variabel ini akan kita gunakan untuk mendefinisikan nilai yang dipilih cpu/musuh nilainya kita acak (0, 1, atau 2). Saat ini variabel ini kita buat tidak terdefinisi (None).



Musuh=None


- Membuat variabel kosong yang kita kasih nama "konf" (konfirmasi) yang akan dipakai untuk menyimpan konfirmasi "menang", "kalah", atau "seimbang".



konf=None


- Mendefinisikan fungsi yang kita berinama "gameplay" sebagai otak game untuk membandingkan apa yang dipilih pemain dengan apa yang dipilh musuh (random) dan menentukan siapa yang menang.


Skripnya disini




- Untuk memanggil fungsi gameplay diatas kita buat tiga fungsi, masing2 memberi nilai berbeda kepada gameplay yaitu 0 (Gunting), 1 (Batu), 2 (Kertas).


Skripnya disini



- Agar player dapat meng-input apa yang dipilih kita membutuhkan fungsi untuk menerima data dari player. Pada game sebenarnya menggunakan tombol navigasi dan keypad, namun pada program ini kita memakai menu dari module appuifw.



appuifw.app.menu=[(u"Pilih gunting", memilihGunting),(u"Pilih batu", memilihBatu),(u"Pilih kertas", memilihKertas)]


- Membuat fungsi penutupan aplikasi dan menunggu tombol exit ditekan dengan module appuifw dan e32


Skripnya disini



- Mengetes game (^_^). Silahkan download script lengkapnya:



http://tigan.fiz.su/files/blog/gbk/Gunting_batu_kertas.zip

Coretan diatas hanya berdasarkan apa yang ane bisa, jika ada penjelasan yang salah, mohon dibenarkan. Atau jika punya yang algoritma yang lebih bagus, mohon dishare. Selamat koding... :D

Minggu, 06 Februari 2011

Sedikit penjelasan identasi pada Python

Dalam pemrograman kita sering mengelompokkan beberapa kode dengan tujuan agar lebih mudah dibaca. Atau terkadang kode memang harus dibuat dalam blok-blok statement agar dapat berjalan, misalnya kita membuat sekumpulan kode yang akan berjalan ketika suatu event terjadi.



Blok - blok statement pada Pyhon di tandai dengan jumlah spasi pada awal kode pada setiap baris, perhatikan contoh berikut ini:



Ilustrasi 1



Penjelasan:

kode X=2 adalah sebuah statement, kode Y=2 juga merupakan sebuah statement. Setiap statement pada python dipisahkan dengan ganti baris



kode if X == Y: merupakan awal sebuah blok statement (kita sebut saja blok statement pertama), sedangkan kode print"Tubrukan terdeteksi" adalah statement blok pertama tersebut (ditandai dengan memberi spasi pada awal baris, ane gunakan 2 spasi).



Sedangkan kode else: merupakan awal sebuah blok statement kedua dan print "Tidak terjadi tubrukan" adalah statement blok kedua.



Berikut ilustrasi yang menjelaskan penggunaan blok statement dalam psoudo code:



Ilustrasi 2



contoh kedua:



Ilustrasi 3




Berikut ilustrasi contoh penulisan kode yang salah:



Ilustrasi 4



Sebuah statement juga dapat dipotong2 menjadi beberapa baris dengan menggunakan tanda "\" berikut contohnya:



print "Sudah adzan\
saatnya sholat"

BULAN


BULAN screenshot 1
BULAN screenshot 2
BULAN screenshot 3
BULAN screenshot 4


Game Description:

Sebuah perbedaan pendapat mengakibatkan perang besar di angkasa, Player harus menggagalkan sebuah proyek besar sendirian. Proyek yang berpotensi menghancurkan bulan.



Genre: SHMUP (Shoot Em Up)

Platform: Symbian s60 1st and 2nd.

Language: English, Indonesian (on story)

Info:

Download links: http://gulammalug.xtgem.com/files/BULAN.zip (Upload by Gulam, makasih kang bantuannya :D)