Arief
Arief Interested in Game Development & Embedded System

Struktur Data Pada Game Maker: Studio (Bag. 1)

Struktur Data Pada Game Maker: Studio (Bag. 1)

Di dalam sebuah game, terkadang kita membutuhkan sebuah variabel yang dapat menyimpan daftar informasi. Informasi tersebut contohnya dapat berukpa daftar item yang diperoleh player. Pada Game Maker: Studio terdapat fungsi Data Structure atau Struktur Data yang dapat digunakan untuk menyimpan berbagai daftar informasi didalamnya.

Di dalam Game Maker: Studio ada beberapa macam struktur data yang dapat digunakan, yaitu:

Pada postingan kali ini, kita hanya akan membahas Array dan List.

Array

array

Array adalah variabel yang dapat menyimpan lebih dari 1 nilai. Array dapat mempermudah penggunaan kumpulan data pada sebuah game. Array dapat digunakan untuk membuat berbagai macam fitur pada game, misalnya daftar High Score. Kelebihan dari Array antara lain, sebagai berikut.

  • Manajemen data yang lebih mudah.
  • Penggunaan Memory yang tidak terlalu besar.
  • Efesiensi Waktu

Array Pada Game Maker: Studio

Di dalam Game Maker: Studio ada 2 macam Array, yaitu 1D Array dan 2D Array.

  • 1D Array

array

1D Array atau Array 1 Dimensi adalah variabel yang dapat menampung 1 baris data dengan nilai yang berbeda-beda. Penggunaan Array pada Game Maker: Studio hampir sama seperti penggunaan variabel biasa, tetapi dengan menambahkan kurung kotak(bracket) setelah nama variabel. Misalnya:

//Deklasi array bertipe string
nama[0]="Arief";
nama[1]="Ismirianda";

Kode diatas mendeklarasikan 1D Array dengan 2 buah data yang berbeda.

Lalu, bagaimana untuk penggunaan variabelnya?

Layaknya penggunaan variabel biasa, kita hanya perlu menuliskan nama variabel tersebut. Misalnya:

Create Event :
//Deklasi array bertipe string
nama[0]="Arief";
nama[1]="Ismirianda";

show_message(nama[0]);

Kode diatas akan menampilkan nilai dari variabel nama[0].

Selain itu, kamu bisa mengganti angka di dalam kurung dengan sebuah variabel untuk penggunaan yang lebih dinamis. Misalnya:

Create Event :
//Deklasi array bertipe string
nama[0]="Arief";
nama[1]="Ismirianda";
nama[2]="Muhammad";

index = 0;
Draw Event :
if(index<2)
	index++;
else
	index=0;
	
//Tampilkan Nama
draw_text(0, 0, nama[index]);

Array juga dapat dikombinasikan dengan dengan perulangan untuk mempermudah pengolahan data. Misalnya:

Create Event :
//Deklasi array bertipe real
hiScore[0]=90;
hiScore[1]=80;
hiScore[2]=75;
Draw Event :
//Tampilkan 
for(var i=0; i<3; i++){
	draw_text(0, i*32, "Score "+string(i)+": "+string(hiScore[i]));
}

Note: Array pada Game Maker: Studio dapat menyimpan data dengan tipe data yang berbeda.

  • 2D Array

array

2D Array atau Array 2 Dimensi adalah variabel yang dapat menampung 2 baris data dengan nilai yang berbeda-beda. 2D Array merupakan Array yang memiliki panjang dan lebar (kolom dan baris). Penggunaannya hampir sama dengan 1D Array, tetapi dengan menambahkan 2 buah angka di dalam kurung kotak yang dipisahkan dengan tanda koma(,). Misalnya:

//Deklarasi 2D Array
nilai[0, 1]=90;
nilai[0, 1]=100;
nilai[1, 0]=70;

Lists

array

DS Lists merupakan data struktur yang dapat menampung informasi secara berurutan seperti 1D Array.

Lalu, apa bedanya dengan 1D Array?

DS Lists memiliki fungsi yang hampir sama dengan 1D Array. Namun, ada beberapa hal yang membedakannya. Jika pada 1D Array kita tidak bisa mengurutkan data secara langsung, pada DS Lists ada fungsi built-in yang berguna untuk mengurutkan data.

Penggunaan DS List pada Game Maker: Studio

Ada banyak fungsi-fungsi built-in DS Lists yang ada di dalam Game Maker: Studio. Berikut akan saya jelaskan fungsi-fungsi tersebut.

  • ds_list_create() Fungsi ini digunakan untuk membuat DS Lists baru. Fungsi ini harus pertama kali dieksekusi sebelum menggunakan fungsi DS Lists yamg lainnya. Fungsi ini tidak memiliki argument dan akan menghasilkan id untuk digunakan pada fungsi DS Lists yang lainnya. Contoh:
    //Deklarasi DS Lists
    hiScore = ds_list_create();
    
  • ds_list_destroy(id) Fungsi ini digunakan untuk menghapus (dari memory) DS Lists tertentu bedasarkan id-nya. Fungsi ini digunakan untuk meringankan kinerja memory bila data tersebut tidak digunakan kembali dan menghindari kebocoran memory.

Contoh:

//Deklarasi DS Lists
hiScores = ds_list_create();

//Hapus DS Lists
ds_list_destroy(hiScores);
  • ds_list_add(id, val1, val2, … val-n) Fungsi ini digunakan untuk menambahkan data/nilai pada DS Lists yang dipilih. Fungsi ini minimal harus memiliki dua argument. Argument pertama berfungsi sebagai selektor dari DS Lists dan fungsi setelahnya untuk menambahkan nilai pada DS Lists yang dipilih dengan maksimal menambahkan 16 nilai.

Contoh:

//Deklarasi DS Lists
hiScores = ds_list_create();
//Menambahkan 1 buah value dengan index 0
ds_list_add(hiScores, 100);
//Menambahkan 1 buah value dengan index 1
ds_list_add(hiScores, 90);
//Menambahkan 2 buah value dengan index 2 dan 3
ds_list_add(hiScores, 150, 400);
  • ds_list_find_value(id, pos) Fungsi ini digunakan untuk mendapatkan sebuah nilai dari DS Lists berdasarkan index yang dipilih yang dimulai dari 0.

Contoh:

//Deklarasi DS Lists
hiScores = ds_list_create();

ds_list_add(hiScores, 150, 400, 300);

//Mendapatkan value index ke 1
var cari = ds_list_find_value(hiScores, 1);

//Tampilkan value
show_message("Nilai ke-1:"+string(cari));
  • ds_list_find_index(id, val) Kebalikan dengan ds_list_find_value, fungsi ini digunakan untuk mencari index dari nilai tertentu pada sebuah DS Lists.

Contoh:

//Deklarasi DS Lists
hiScores = ds_list_create();

ds_list_add(hiScores, 150, 400, 300);

//Mendapatkan index dari value 150
var cari = ds_list_find_index(hiScores, 150);

//Tampilkan value
show_message("Index dari nilai 150:"+string(cari));
  • ds_list_replace(id, pos, val) Fungsi ini digunakan untuk mengganti nilai dari index tertentu dengan nilai yang baru pada sebuah DS Lists.

Contoh:

//Deklarasi DS Lists
hiScores = ds_list_create();

ds_list_add(hiScores, 150, 400, 300);

//Mengganti value index ke 1 menjadi 200
ds_list_replace(hiScores, 1, 200);

//Mendapatkan value index ke 1
var cari = ds_list_find_value(hiScores, 1);

//Tampilkan value
show_message("Nilai ke-1:"+string(cari));
  • ds_list_delete(id, post) Fungsi ini digunakan untuk menghapus sebuah nilai dengan index tertentu pada sebuah DS Lists. Jika posisi setelah index tersebut masih ada nilai, maka index nilai tersebut akan sama dengan index nilai yang dihapus.

Contoh:

//Deklarasi DS Lists
hiScores = ds_list_create();

ds_list_add(hiScores, 150, 400, 300);

//Menghapus value pada index ke 0
ds_list_delete(hiScores, 0);

//Mendapatkan value index ke 0
var cari = ds_list_find_value(hiScores, 0);

//Tampilkan value
show_message("Nilai ke-0:"+string(cari));
  • ds_list_shuffle(id) Fungsi ini digunakan untuk mengacak urutan nilai dalam sebuah DS Lists. Karena biasanya random seed ditentunkan oleh Game Maker: Studio, untuk membuatnya benar-benar acak(tidak mengulangi acak yang sama saat dijalankan), gunakan fungsi randomize().

Contoh:

//Deklarasi DS Lists
hiScores = ds_list_create();

var awal="";
var akhir="";

ds_list_add(hiScores, 150, 400, 300, 200, 180);

//Data sebelum diacak
for(var i=0; i<ds_list_size(hiScores);i++){
	awal+=string(ds_list_find_value(hiScores, i)+" ";
}

//memanggil seed acak
randomize();
//Mengacak Ds Lists hiScores
ds_list_shuffle(hiScores);

//Data setelah diacak
for(var i=0; i<ds_list_size(hiScores);i++){
	akhir+=string(ds_list_find_value(hiScores, i)+" ";
}

//Tampilkan Nilai sebelum dan sesudah diacak
show_message("Sebelum diacak:"+awal+"#Setelah diacak"+akhir);
  • ds_list_sort(id, ascend) Kebalikan dari fungsi ds_list_shuffle(), fungsi ini digunakan untuk mengurutkan data baik secara ascending(kecil ke besar) maupun descending(besar ke kecil). Untuk mengurutkannya secara ascending, isilah argument ke-2 dengan nilai true, atau false untuk descending.

Contoh:

//Deklarasi DS Lists
hiScores = ds_list_create();

var awal="";
var akhir="";

ds_list_add(hiScores, 150, 400, 300, 200, 180);

//Data sebelum diurutkan
for(var i=0; i<ds_list_size(hiScores);i++){
	awal+=string(ds_list_find_value(hiScores, i)+" ";
}

//Mengurutkan Ds Lists secara ascending
ds_list_sort(hiScores, true);

//Data setelah diurutkan
for(var i=0; i<ds_list_size(hiScores);i++){
	akhir+=string(ds_list_find_value(hiScores, i)+" ";
}

//Tampilkan Nilai sebelum dan sesudah diacak
show_message("Sebelum diurutkan:"+awal+"#Setelah diurutkan"+akhir);

Fungsi-fungsi di atas hanyalah beberapa fungsi yang biasa digunakan pada DS Lists. Untuk lebih lengkapnya bisa dilihat disini. DS Lists

Accessor

Pada Game Maker: Studio ada sebuah fitur yang digunakan untuk mempermudah mengakses data pada struktur data tertentu. Hal inilah yang disebut dengan Accessor. Accessor bekerja layaknya sebuah variabel Array dengan menambahkan kurung kotak setelah nama variabelnya dengan memberikan simbol khusus dan index nilainya. Untuk mempermudah menggunakan DS List, kita bisa memakai Accessor-nya dengan fomat nama_variabel[| index]. Contoh penggunaan Accessor DS List:

//Deklarasi DS Lists
hiScores = ds_list_create();

//Seperti ds_list_add()
hiScores[| 0]=100;
hiScores[| 1]=320;

//Seperti ds_list_replace()
hiScores[| 0]=100;//Menimpa data yang ada

//Seperti ds_list_find_value()
show_message(hiScores[| 0]=100);

Kapan kita sebaiknya menggunakan Array dan DS Lists?

Array dan DS Lists memiliki fungsi yang hampir sama. Namun, pada DS Lists ada beberapa fitur yang dapat mempermudah kita dalam mengolah datanya. Namun, dengan kelebihan tersebut juga DS Lists akan memakai memory yang lebih besar dibanding Array.

Menurut saya pribadi, sebaiknya gunakan Array pada data yang berskala kecil atau bersifat sementara. Misalnya, penggunaan pada Step Event dan Draw Event. Untuk penggunaan DS Lists sebaiknya digunakan untuk penggunaan data yang berskala besar dan bakal digunakan kembali, seperti daftar High Score dan Inventory.

Sekian postingan saya kali ini, semoga dapat membantu kalian dalam memahami struktur data. Untuk struktur data yang lainnya akan dibahas pada postingan berikutnya. Selanjutnya kita akan membahas DS Maps dan DS Grids. Bagi yang mau bertanya atau mau memberikan masukkan, silahkan lakukan dikolom komentar dibawah:point_down::point_down:.

comments powered by Disqus