mgdw4 online camp #6a: save dan load
TRANSCRIPT
Mobile Games Developer War 4: Online Camp
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.
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
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
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
Mobile Games Developer War 4: Online Camp
Method:deleteRecord(int recordId);
recordId : indeks dari data yang disimpan
Contoh:rs.deleteRecord(1);
Menghapus record
Mobile Games Developer War 4: Online Camp
Method:deleteRecordStore(String recordStoreName);
Contoh:rs.deleteRecordStore(“dbGameA”);
Menghapus record store
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
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
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
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
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
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
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
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