↓↓xuống cuối trang↓↓
Chào mừng bạn đến với wap DinhLoi.XtGem.Com | Chúc bạn có 1 năm mới vui vẻ tốt lành hạnh phúc! Hãy giới thiệu website này cho bạn bè nhé!img
DinhLoi.XtGem.Com =>> CaFe9x.Gq
Bạn đến từ quốc gia:



Hôm nay ngày
27.02.25/09:06
img- Hi. Xin chào! Mozilla/5.0
logo
.
HOMECHÁTTruyệnFORUM
logo

Chatbox|Admin nhận làm wap/web, giá cả thương lượng... Thông tin admin tại mỗi bài viết.
Home · Bang hội ·
* Đăng Nhập hoặc Đăng Kí
để sử dụng hết chức năng của diễn đàn.
Hi, Khách!
HomeBang hội » Thủ thuật » Nokia s40 » » Xem bài viết
Xuống dưới »
avatar by Pham_loi Pham_loi
Chức vụ:
08:50:18, 29-07-2015

record manager system(rms) và save game
Nếu như không có gì thay đổi thì gần như là bạn có thể hoàn thành một trò chơi đơn giản rồi đó, chỉ có điểu mỗi lần thoát khỏi trò chơi thì đâu lại quay lại từ đầu. tuy nhiên có khi nào các bạn để ý là những ứng dụng java thường hay tăng kích thước sau khi sử dụng không. Đó là vì chúng tạo ra những tập tin ẩn hệ thống để lưu lại những gì cần thiết( các cài đặt, tên người dùng, ngày giờ đăng kí, thông tin…). Java cung cấp một class gọi là record manager system(hệ thống quản lí mẫu tin, gọi tắt là rms) dùng để tạo ra những file lưu lại thông tin của những phiên làm việc trước.
Để sử dụng được class này ta chú ý những điều sau đây:
<?php
import javax
.microedition.rms.*;//class có sẵn cho việc sử dụng rms
?>

Copy code

Những thao tác mà ta cần thực hiện trên recordstore như sau:
<?php
Recordstore rs
=RecordStore.openRecordStore("data",true);//mở 1 recordstore có tên là data nếu đã tồn tại , nếu chưa có thì tạo mới. true ở đây là chỉ việc sẽ tạo mới nếu chưa tồn tại, để false sẽ không tạo mới dù không tồn tại
int rs.addRecord(byte[,offset,length byte);// trả về id của record khi thực hiện lệnh thêm một record mới. Các thông tin cho việc thêm record là một byte array, điểm bắt đầu, số byte tính từ điểm bắt đầu.
void rs.setRocord(ID,byte[,offset,length byte); // tương tự add record, nhưng ở đây nó là một thao tác không trả về ID mà chỉ định sẵn ID sẽ mang thông tin mới này (id record phải tồn tại rồi).
bytedt=rs.getRecord(ID// nhận giá trị của một record thông qua ID của nó, trả về giá trị bytearray. dùng:
String s=new String(dt,0,dt.length); // chuyển giá trị bytearray thành chuỗi và thao tác dễ hơn.
Hoặc:
int getRecord(ID,buffer,offset); // chuyển giá trị vào một buffer và trả về số byte của record. Một buffer có thể là một byte array hoặc là được tạo ra bằng lệnh: StringBuffer sb=new StringBuffer();
void deleteRecord(ID); // tất nhiên là xóa record rồi.
Sau khi sử dụng xong recordStore thì nên đóng nó lại để tiết kiệm bộ nhớvà nếu không cần nó nữa thì xóa luôn nó đi cũng không sao vì ta đã có được các thông tin cần thiết rồi:
void rs.closeRecordStore();
void deleteRecordStrore(tên record);
?>

Copy code

và sau đây là ví dụ minh họa cho dễ hiểu, chúng ta sẽ sử dụng project vd lần nữa. chẳng hạn nhân vật ta di chuyển trên map và ta muốn mỗi lần thóat ra thì vị trí của nhân vật sẽ đựơc lưu lại cho lần sau mở lên. Ta cần làm ở đây là ghi giá trị x,y của nhân vật và trong recordstore. Tôi sẽ sửa lại file map.java để cho đơn giản hơn, nhân vật của ta sẽ di chuyển tự do không bị giới hạn, và khi nhấn phím 5 sẽ thoát game, file map.java như sau:
<?php
import javax
.microedition.lcdui.game.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class 
map extends GameCanvas implements Runnable
{
private 
vd main;
private 
add sp=new add();
private 
Graphics g=getGraphics();
int w=getWidth();
int h=getHeight();
private 
Image t,ch;
private 
TiledLayer tl;
private 
int x=w/2,y=h/2,f=0;
private 
boolean play=true;
private 
intmap={
4,4,4,1,1,4,4,4,4,4,
4,4,1,1,4,4,4,4,4,4,
4,4,1,1,4,4,1,1,4,4,
4,4,1,1,3,1,1,4,4,4,
4,4,1,1,1,1,1,1,4,4,
4,4,4,4,1,1,1,2,4,4,
1,4,4,4,1,1,4,4,4,4,
1,4,4,4,1,1,4,4,4,1,
1,4,4,4,4,4,4,4,4,1,
1,1,4,4,4,4,4,4,1,1
};
public 
map(vd main){
super(false);
this.main=main;}
void start(){
Thread t=new Thread(this); t.start();}
public 
void run()
{
try{
ch=Image.createImage("/s.png");
t=Image.createImage("/t.png");}catch(Exception e){}
tl=new TiledLayer(10,10,t,32,32);
for(
int i=0;i<map.length;i++){
int col=i%10;
int row=(i-col)/10;
tl.setCell(col,row,map);}
while(
play){ input();
g.setColor(0x000000);
g.fillRect(0,0,w,h);
tl.setPosition(x,y);
tl.paint(g);
sp.addsprite(g,ch,f,w/2,h/2);
flushGraphics();
try{
Thread.sleep(30);}catch(Exception e){}//cho ngung mot thoi gian
}
}
void input(){
int k=getKeyStates();
if(
k==UP_PRESSED){y+=3f=1;}
if(
k==LEFT_PRESSED){x+=3f=2;}
if(
k==RIGHT_PRESSED){x-=3f=3;}
if(
k==DOWN_PRESSED){y-=3f=0;}
if(
k==FIRE_PRESSED){play=falsemain.destroyApp(true);}
}
}
?>

Copy code

Còn bây giờ là một class chức năng, gồm hai chức năng là save và load:
Data.java có nội dung như sau:
<?php
import javax
.microedition.rms.*;
public class 
data
{private RecordStore rs;
public 
data(){}
void save(String name,int id,String info){
try{
rs=RecordStore.openRecordStore("name",true);
int nr=rs.getNumRecords();
if(
nr<id){//nếu chưa tồn tại record tại id cần thêm thì thêm vào record null tại id đó
bytea={};//dữ liệu null
for(int i=0;i<(id-nr);i++){int d=rs.addRecord(a,0,0);}//thêm vào 2 id: 1 và 2
}
bytebdt=info.getBytes();
rs.setRecord(id,bdt,0,bdt.length);
rs.closeRecordStore();
bdt=null;
}
catch(
Exception e){}
}
String load(String name,int id){
String t="";
try{
rs=RecordStore.openRecordStore("name",true);
bytebdt=rs.getRecord(id);
t=new String(bdt,0,bdt.length);
}
catch(
Exception e){}
return 
t;
}
}
?>

Copy code

Sau đó trong map.java ta sử dụng class chức năng data.java cho việc lưu và nhận dữ liệu, map.java sẽ như thế này:
<?php

import javax
.microedition.lcdui.game.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class 
map extends GameCanvas implements Runnable
{
private 
data dt=new data();
private 
vd main;
private 
add nv=new add();
private 
Graphics g=getGraphics();
int w=getWidth();
int h=getHeight();
private 
Image t;
private 
TiledLayer tl;
private 
int x=0,y=0;
private 
boolean play=true;
private 
intmap={
4,4,4,1,1,4,4,4,4,4,
4,4,1,1,4,4,4,4,4,4,
4,4,1,1,4,4,1,1,4,4,
4,4,1,1,3,1,1,4,4,4,
4,4,1,1,1,1,1,1,4,4,
4,4,4,4,1,1,1,2,4,4,
1,4,4,4,1,1,4,4,4,4,
1,4,4,4,1,1,4,4,4,1,
1,4,4,4,4,4,4,4,4,1,
1,1,4,4,4,4,4,4,1,1
};
public 
map(vd main){
super(false);
this.main=main;}
void start(){
Thread t=new Thread(this); t.start();}
public 
void run()
{try
{
x=Integer.parseInt(dt.load("save",1),10);
y=Integer.parseInt(dt.load("save",2),10);}
catch(
Exception e){}
try{ 
ch=Image.createImage("/s.png");
t=Image.createImage("/t.png");}catch(Exception e){}
tl=new TiledLayer(10,10,t,32,32);
for(
int i=0;i<map.length;i++){
int col=i%10;
int row=(i-col)/10;
tl.setCell(col,row,map);}
while(
play){ input();
g.setColor(0×000000);
g.fillRect(0,0,w,h);
tl.setPosition(x,y);
tl.paint(g);
sp.addsprite(g,ch,f,w/2,h/2);
flushGraphics();
try{
Thread.sleep(30);}catch(Exception e){}//cho ngưng một thời gian
}
}
void input(){
int k=getKeyStates();
if(
k==UP_PRESSED){y++;}
if(
k==LEFT_PRESSED){x++;}
if(
k==RIGHT_PRESSED){x--;}
if(
k==DOWN_PRESSED){y--;}
if(
k==FIRE_PRESSED){
play=false;
dt.save("save",1,x+"");
dt.save("save",2,y+"");
main.destroyApp(true);}
}
}
?>

Copy code

Như vậy là coi như xong những bước cơ bản nhất của một game java cần có rồi đó, nếu như muốn hòan thiện một game thật sự, có thể các bạn cần đau đầu một chút vì đây chỉ là những class cơ bản thôi, các bạn có thể tự tạo ra nhưng class chức năng khác cho công việc của riêng mình, điều quan trọng là trước khi làm mình cần suy nghĩ xem nó sẽ như thế nào trước đã rồi hẳn viết code, cũng như không thể nào đánh caro mà không suy nghĩ hay dựng nhà mà không vẽ thiết kế. mong là các bạn có thể tạo ra những trò chơi hay ho cho mình và cộng đồng game mobile. Còn nếu có thắc mắc gì thì cũng có thể để lại lời nhắn qua địa chỉ mail: holyeyed@ gmail.com, tôi sẽ sẵn sàng giúp đỡ thôi.


Chỉnh sửa lúc 2016-07-09 14:22 bởi Pham_loi
Like: 0

Trực Tuyến: Khách: 1
Diễn đàn teen Việt Nam
CopyRight 2014
Tag:
Bạn đến từ:
Share: img img img img img

Thanks To:XtGem
Liên kết:U-ON

Duck hunt