Implementasi Map Aditya Wikan M Peta Grid/Tile – Struktur Data • Struktur data untuk peta grid/tile terbagi menjadi struktur data tile dan struktur data objek • Struktur data grid/tile harus memuat dua hal, yaitu posisi relatif tile (menurut koordinat grid yang disarankan pada slide “game world representation”), dan posisi eksak tile. • Struktur data objek minimal memuat posisi relatif tile yang ditempati objek tersebut Struktur Data Tile • Struktur data grid/tile harus memuat dua hal, yaitu posisi relatif tile (menurut koordinat grid yang disarankan pada slide “game world representation”), dan posisi eksak tile. • Posisi relatif tile digunakan untuk hit-test antar objek • Posisi eksak tile (koordinat layar) diperlukan untuk plotting/penggambaran Struktur Data Tile • Posisi relatif tile dapat berupa penomoran, dapat juga berupa koordinat Struktur Data Tile • Posisi eksak tile berupa koordinat kartesian pada layar, yang diwakili oleh satu titik saja yang mumpuni untuk menggambarkan sebuah posisi relatif tile Struktur Data Tile • tile[r, c] struktur data posisi relatif tile dalam bentuk koordinat dua dimensi • tile[r, c].x tile[r,c].y struktur data posisi eksak tile dalam bentuk koordinat kartesian layar dua dimensi Struktur Data Tile Korelasi dengan struktur data objek: • objek[a].tile_r = r objek[a].tile_c = c struktur data objek memuat posisi relatif tile dalam bentuk row dan column Agar dapat digunakan dalam hit-test sederhana: • if(objek[a].tile_r == objek[b].tile_r && objek[a].tile_c == objek[b].tile_c){ //hit } Struktur Data Tile Alternatif hit-test (touching): • if((objek[a].tile_r==objek[b].tile_r|| objek[a].tile_r==objek[b].tile_r-1|| objek[a].tile_r==objek[b].tile_r+1)&&(objek[a] .tile_c==objek[b].tile_c|| objek[a].tile_c==objek[b].tile_c-1|| objek[a].tile_c==objek[b].tile_c+1)){ //hit } Struktur Data Tile • Boleh menambahkan atribut tipe tile untuk jenis game yang membedakan jenis petak (bukan jenis objek yang terletak di atasnya) • tile[r, c].tipe = 1 tipe tile didefinisikan sendiri oleh programmer, biasanya menggambarkan jenis tile pada dunia, misal tanah, air, tanah gersang, dsb. yang dapat digunakan untuk menetukan peletakan objek Bebas & Waypoint – Struktur Data • Struktur data untuk peta bebas atau dengan waypoint tetap harus terbagi menjadi struktur data area/waypoint dan struktur data objek • Struktur data area harus memuat posisi relatif area (nama area), dan atribut-atribut yang dibutuhkan untuk mencakup luasan area. Misalnya area berbentuk persegi, maka ada dua titik yang harus dimuat sebagai pembatas persegi tersebut. Jika lingkaran maka harus memuat titik pusat dan radius (jari-jari). Boleh juga ditambahkan atribut tipe area. • Struktur data waypoint harus memuat dua hal, yaitu posisi relatif waypoint (nama waypoint), dan posisi eksak waypoint. • Struktur data objek menyesuaikan Struktur Data Area • area[n] struktur data posisi relatif area/nama area • area[n].x1 area[n].y1 area[n].x2 area[n].y2 struktur data posisi eksak area dalam bentuk koordinat kartesian layar dua dimensi cek overlapping area bisa menggunakan cek di dalam atau di luar clipping window pada minggu lalu Struktur Data Area • Alternatif untuk lingkaran: area[n].x1 area[n].y1 area[n].radius • Karena dunia gerak bebas, maka utamanya tipe data objek hanya memuat koordinat kartesian layar dua dimensi dari titik pusat objek ybs. Tetapi boleh pula ditambahkan nama areanya untuk kepentingan status objek objek[a].x objek[a].y objek[a].area = n //tidak wajib • Hit test dilakukan dengan metode clipping window antara area sebagai windownya terhadap titik pusat objek. Jika ingin lebih akurat dapat ditambah dengan hit-test antar bounding region (box/circle) Struktur Data Waypoint/Point • waypoint[n] struktur data posisi relatif waypoint/nama area • area[n].x1 area[n].y1 area[n].radius struktur data posisi eksak waypoint dalam bentuk koordinat kartesian layar dua dimensi radius diperlukan karena gerak objek jarang yang dapat digerakkan tepat ke koordinat waypoint cek overlapping area bisa menggunakan cek radius/hit-test antara dua lingkaran, untuk menghindari objek wira-wiri Struktur Data Waypoint/Point • Waypoint juga menganut gerak bebas, maka utamanya tipe data objek hanya memuat koordinat kartesian layar dua dimensi dari titik pusat objek ybs. Tetapi boleh pula ditambahkan nama waypoint untuk kepentingan status objek objek[a].x objek[a].y objek[a].waypoint = n //tidak wajib • Hit test dilakukan dengan metode clipping window antara area sebagai windownya terhadap titik pusat objek. Jika ingin lebih akurat dapat ditambah dengan hit-test antar bounding region (box/circle) Objek wira-wiri • Fenomena tak diinginkan yang seringkali muncul dalam games • Disebabkan oleh adanya fungsi penarikan sebuah objek ke dalam daerah/ke titik pusat sebuah waypoint/point tertentu ketika titik pusat objek sudah masuk ke dalam radius waypoint/point tersebut fungsi ini tidak selalu ada • Terjadi jika ada dua buah waypoint yang terletak terlalu dekat Objek wira-wiri for (m=0, m=max_objects-1, m++){ for (n=0, n=max_waypoint-1, n++){ if(distance(object[m])<radius(waypoint[n])){ while(object[m].x != waypoint[n].x && object[m].y != waypoint[n].y){ //move object[m].x closer to waypoint[n].y step 1px; //move object[m].y closer to waypoint[n].y step 1px; } } } } Last Info • Sudah ada bocoran dari panitia ITComFest bahwa lomba game akan menggunakan penyisihan dan dari yang lolos penyisihan akan ditarungkan untuk mendapatkan juara 1, 2, dan 3; maka • Tugas game yang disubmit, akan dibagi menjadi dua saja, yang masuk kualifikasi dan yang juara. • Formulasi reward akan saya umumkan setelah ada perumusan juara yang pasti dari panitia.