mgdw4 online camp #6a: save dan load

15
Mobile Games Developer War 4: Online Camp MGDW4 Online Camp #6a Save dan Load

Upload: agate-studio

Post on 09-Jun-2015

594 views

Category:

Education


2 download

TRANSCRIPT

Page 1: MGDW4 Online Camp #6a: Save dan load

Mobile Games Developer War 4: Online Camp

MGDW4 Online Camp #6a

Save dan Load

Page 2: MGDW4 Online Camp #6a: Save dan load

Mobile Games Developer War 4: Online Camp

Definisi RMS

• Midlet tidak menggunakan file sistem untuk menyimpan data, tetapi menyimpan semua informasi dalam sebuah memori non-volatile (memori tetap) yang disebut dengan Record Management System (RMS)

• RMS adalah kumpulan record, record tersebut disimpan sebagai array dari byte dalam sebuah record store.

• Note: midlet yang berbeda dapat mengakses record yang sama.

Page 3: MGDW4 Online Camp #6a: Save dan load

Mobile Games Developer War 4: Online Camp

Membuat record store

Cara ke 1:RecordStore rs;rs.openRecordStore(“dbGameA”, true)

Cara ke 2:RecordStore.openRecordStore(“dbGameA”, true)

Membentuk record store,openRecordStore(String recordStoreName, boolean createIfNecessary)Parameter boolean, jika true, apabila record belum ada maka buat record tersebut

Page 4: MGDW4 Online Camp #6a: Save dan load

Mobile Games Developer War 4: Online Camp

Method:addRecord(byte [ ] data,int offset,int numbytes) 

1. Data : record yang ingin kita masukkan2. Offset : indeks awal dari record yang ingin dimasukkan3. Numbytes : indeks akhir dari record yang ingin dimasukkan

Note: RMS hanya menerima record berupa bytes, jadi data yang ingin disimpan, harus dikonversi ke bytes terlebih dahulu

Contoh://data yang akan disimpan, variable globalString data = “level:10|nama:mla|job:knight”;RecordStore rs = null;. . .//pada bagian ketika ingin disave gamenyars = RecordStore.openRecordStore(“dbGameA”, true );byte[] record = record.getBytes();try{ rs.addRecord(rec, 0, rec.length); rs.closeRecordStore();}catch (Exception e){}

Menambah record ke record store

Page 5: MGDW4 Online Camp #6a: Save dan load

Mobile Games Developer War 4: Online Camp

Method:getRecord(int recordId);//ataurs.getRecord(recID, recData, 0);

recordId : indeks dari data yang disimpan

Note: karena data yang disimpan berupa bytes, maka kita harus mengubahnya kembali menjadi string

Contoh:int amount = rs.getNumRecords();try { byte[ ] recData = new byte[amount]; int len; //len untuk mengambil panjang byte dari record //record akan disimpan di recData len = rs.getRecord(recID, recData, 0); return new String(recData, 0, len);} catch (RecordStoreException rse) { return "null";}

Membaca record

Page 6: MGDW4 Online Camp #6a: Save dan load

Mobile Games Developer War 4: Online Camp

Method:deleteRecord(int recordId);

recordId : indeks dari data yang disimpan

Contoh:rs.deleteRecord(1);

Menghapus record

Page 7: MGDW4 Online Camp #6a: Save dan load

Mobile Games Developer War 4: Online Camp

Method:deleteRecordStore(String recordStoreName);

Contoh:rs.deleteRecordStore(“dbGameA”);

Menghapus record store

Page 8: MGDW4 Online Camp #6a: Save dan load

Mobile Games Developer War 4: Online Camp

Pada game semacam Sudoku, kita dapat implementasi save dan load boardnya.Angka pada game sudoku disamping disimpan dalam sebuah array 2D, 9 x 9.Data yang akan disimpan adalah posisi baris dan kolom dari array dan nilainya.“nilainya|x|y”

Contoh penggunaan record store pada Sudoku

Page 9: MGDW4 Online Camp #6a: Save dan load

Mobile Games Developer War 4: Online Camp

private RecordStore rs = null;static final String REC_STORE = "Sudoku";int xLoad, yLoad, valueLoad;

Berikut adalah variable global yang dibutuhkan

Sudoku – variable

Page 10: MGDW4 Online Camp #6a: Save dan load

Mobile Games Developer War 4: Online Camp

public void deleteRecStore(){ if (RecordStore.listRecordStores() != null){ try{ RecordStore.deleteRecordStore(REC_STORE); }catch (Exception e){} }}

public void closeRecStore(){ try{ rs.closeRecordStore(); }catch (Exception e){}}

public void openRecStore(){ try{ rs = RecordStore.openRecordStore(REC_STORE, true ); }catch (Exception e){}}

Fungsi ini berfungsi untuk membuka RMS dengan nama REC_STORE

Fungsi ini berfungsi untuk menutup RMS

Fungsi ini berfungsi untuk menghapus RMS dengan nama REC_STORE

Sudoku Helper

Page 11: MGDW4 Online Camp #6a: Save dan load

Mobile Games Developer War 4: Online Camp

public void writeRecord(String str){ byte[] rec = str.getBytes(); try{ rs.addRecord(rec, 0, rec.length); }catch (Exception e){}}

public void save() { deleteRecStore(); openRecStore(); for (int i = 0; i < numbers[0].length; i++) { for (int j = 0; j < numbers.length; j++) { if(numbers[j][i] != 0) { writeRecord(numbers[j][i] + "|" + j + "|" + i); } } } closeRecStore();}

Fungsi ini untuk menyimpan data. Karena awalnya berupa String, maka harus dirubah terlebih dahulu ke byte.

Ketika fungsi save() dijalankan, maka yang dilakukannya adalah menghapus record yang sudah ada, lalu open RMS yang dituju, write data ke RMS, lalu tutup RMS

Sudoku – save

Page 12: MGDW4 Online Camp #6a: Save dan load

Mobile Games Developer War 4: Online Camp

public void readRecords(){ try{ byte[] recData = new byte[5]; int len; for(int i = 1; i <= rs.getNumRecords(); i++){ if(rs.getRecordSize(i) > recData.length){ recData = new byte[rs.getRecordSize(i)]; } len = rs.getRecord(i, recData, 0); String data = new String(recData, 0, len); String[] hslLoad = split(data, "|"); valueLoad = Integer.parseInt(hslLoad[0]); xLoad = Integer.parseInt(hslLoad[1]); yLoad = Integer.parseInt(hslLoad[2]); numbers[xLoad][yLoad] = (byte) valueLoad; } }catch (Exception e){}}

public void load() { openRecStore(); readRecords(); closeRecStore();}

Fungsi ini untuk membaca record, dari byte, kita harus mengubah record kembali ke String.

Karena kita menyimpan record dengan format tertentu, maka buat fungsi untuk memparsing data menggunakan fungsi split() yang merupakan fungsi yang kita buat sendiri (fungsi yang memilah delimiter)

load() berfungsi untuk membuka RMS, read record, lalu menutup RMS kembali

Sudoku – load

Page 13: MGDW4 Online Camp #6a: Save dan load

Mobile Games Developer War 4: Online Camp

public void inputNumpad() {. . .. . . if (numPad == -7){ if(!btnNumHold) { save(); btnNumHold = true; } }else if (numPad == -6){ if(!btnNumHold) { load(); btnNumHold = true; } }else{ if(btnNumHold) btnNumHold = false; }}

Lalu tentukan kapan kita akan memanggil fungsi – fungsi yang telah kita buat tadi.-7 artinya softkey sebelah kanan sedang ditekan-6 artinya softkey sebelah kiri sedang ditekan

-7-6

Sudoku – trigger save dan load

Page 14: MGDW4 Online Camp #6a: Save dan load

Mobile Games Developer War 4: Online Camp

Ceritakan game kalian, breakdown apa saja yang ingin kalian simpan datanya (save), bagaimana formatnya, kapan fungsi save dan load tersebut akan dipanggil.

Quest

Page 15: MGDW4 Online Camp #6a: Save dan load

Mobile Games Developer War 4: Online Camp

• Untuk menyelesaikan materi, isi form di link ini: http://bit.ly/LiVVC2

• Untuk pertanyaan atau diskusi bisa dilakukan di forum: http://bit.ly/mgdw4forum