Bài này sẽ là kết thúc của hướng dẫn về sự kết hợp giữa php và j2me, những ứng dụng trực tuyến ngày càng cho thấy hiệu quả của nó trong thời đại công nghệ thông tin. Bạn không thể nào thiếu internet trong một ngày và chiếc di động là thứ hỗ trợ đắc lực nhất, ứng dụng web luôn không làm cho người sử dụng phải nhàm chán vì tính mới mỗi ngày của nó. Tôi cũng kì vọng vào sức mạnh của di động như về j2me thì không còn nhiều nữa, ngày nay android và ios ngày càng chiếm lĩnh trên thị trường di động nhất là android. Có thể một ngày nào đó những bài viết này chỉ là vô ích, nhưng ít nhất là tôi đã viết nó, bằng những kiến thức của mình và hy vọng điều gì đó.
Do form get.html và server.php mà tôi đã viết có sự lựa chọn để chỉ hiện thị thông tin về những người chơi khác chứ không cho phép lấy về thông tin của nhân vật của ta. Do đó, ít nhất bạn phải có thêm một ai đó nữa cùng đăng nhập vào một id khác thì các bạn mới nhìn thấy kết quả của việc nhận dữ liệu.
Ta thêm một biến dt (String) nữa và sẽ nhận dữ liệu vào đây, đồng thời vẽ ra màn hình. Class canvas sẽ thành thế này:
mog.java
C:\Users\thanhliem\Documents\NetBeansProjects\mog\src\mog.java |
class canvas extends Canvas{
String dt;
textfield tf;
Vector rb=new Vector();
Font f=Font.getFont(0,0,8);
int w,h,k=0,fh;
String command="";
robot me=new robot(0,0);
public canvas(){
setFullScreenMode(true);
w=getWidth();
h=getHeight();
fh=f.getHeight();
tf=new textfield("command",0,0,w);
}
public void paint(Graphics g){
g.setFont(f);
g.setColor(0);
g.fillRect(0,0,w,h);
tf.paint(g,k,true);
g.setColor(0xf0f0);
g.setClip(0,0,w,h);
g.drawString(command,0,fh*2,Graphics.TOP|Graphics.LEFT);
if(dt!=null)
g.drawString(dt,0,h,Graphics.LEFT|Graphics.BOTTOM);
if(rb!=null)
for(int i=0;i<rb.size();i++)
((robot)rb.elementAt(i)).paint(g);
me.paint(g);
k=0;
repaint();
}
public void keyPressed(int k){
this.k=k;
if(k==-5){
command=tf.getString();
String[] acommand=tach(command,".");
Vector trb=new Vector();
for(int i=0;i<acommand.length;i++){
String[] info=tach(acommand[i],",");
robot nrb=new robot(w/2,h/2);
for(int j=0;j<rb.size();j++){
if(info[0].equals(((robot)rb.elementAt(j)).say)){nrb=(robot)rb.elementAt(j);
System.out.println("dectect");}}
nrb.getcommand(info);
trb.addElement((robot)nrb);}
rb=trb;}
if(k==-4){me.nx=me.x+5;}
if(k==-3){me.nx=me.x-5;}
if(k==-2){me.ny=me.y+5;}
if(k==-1){me.ny=me.y-5;}
}
public void keyReleased(int k){this.k=0;}
public String[] tach(String s,String c){
Vector v=new Vector();
if(!s.endsWith(c)){s+=c;}
int st=0,np=s.indexOf(c,st);
while(np!=-1){
v.addElement((String)s.substring(st,np));
st=np+c.length();
np=s.indexOf(c,st);}
String[] rt=new String[v.size()];
v.copyInto((String[])rt);
for(int i=0;i<rt.length;i++){System.out.println(rt[i]+rt[i].length());}
return rt;}
}
class robot{
int x,y,nx,ny;
String say;
long lm=0;
public robot(int x,int y){
this.x=x;
this.y=y;
this.nx=x;
this.ny=y;
}
public void getcommand(String[] s){
say=s[0];
nx=Integer.parseInt(s[1]);
ny=Integer.parseInt(s[2]);
}
public void paint(Graphics g){
if(System.currentTimeMillis()-lm>200)
move();
g.setColor(0xf000f0);
g.fillRect(x,y,16,16);
}
void move(){
x+=x>nx?-1:(x==nx?0:1);
y+=y>ny?-1:(y==ny?0:1);}
}
Đồng thời mog.java cũng thay đổi như sau đây:
mog.java
C:\Users\thanhliem\Documents\NetBeansProjects\mog\src\mog.java |
public class mog extends MIDlet implements Runnable{
String user,pass;
int id,mode=0;
canvas cv=new canvas();
public void startApp(){
Display.getDisplay(this).setCurrent(new login(this));}
public void destroyApp(boolean t){}
public void pauseApp(){}
public void cv(String user,String pass){
this.user=user;
this.pass=pass;
String st= send("http://holyeyed.99k.org/game/server.php","submit=2&user="+user+"&pass="+pass);
id=Integer.parseInt(st.substring(3));
if(id>0){
Display.getDisplay(this).setCurrent(cv);
mode=3;
new Thread(this).start();}}
public void run(){
while(true){
try{
Thread.sleep(500);
switch(mode){
case 1:
break;
case 2:
break;
case 3:
send("http://holyeyed.99k.org/game/server.php","submit=3&id="+id+"&mess=holyeyed&x="+cv.me.x+"&y="+cv.me.y);
cv.dt=send("http://holyeyed.99k.org/game/server.php","submit=4&id="+id);
break;}}catch(Exception e){}}}
String send(String add,String para){
try{
HttpConnection hc=(HttpConnection)Connector.open(add);
hc.setRequestMethod(HttpConnection.POST);
hc.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
OutputStream os=hc.openOutputStream();
os.write(para.getBytes());
InputStream is=hc.openDataInputStream();
int c;
StringBuffer sb=new StringBuffer();
while((c=is.read())!=-1){sb.append((char)c);}
is.close();
os.close();
hc.close();
System.out.println(sb.toString());
return sb.toString();
}catch(Exception e){}
return null;}}
Kết quả ta được như sau:
Bây giờ ta sẽ chuyển dt (String) trong cv (canvas) thì mã lệnh dùng cho điều khiển các biến robot như ta đã làm lúc trước, dữ liệu nhận về như bạn thấy trên hình trên bao gồm:
Mã BOM | id | user name | chuỗi | x | y # id | username | chuỗi | x |y #....
Class robot.java của ta sẽ thay đổi để nhận thêm nhiều giá trị hơn như sau:
mog.java
C:\Users\thanhliem\Documents\NetBeansProjects\mog\src\mog.java |
class robot{
int x,y,nx,ny,id;
String say,user;
long lm=0;
public robot(int id,String user,int x,int y){
this.id=id;
this.user=user;
this.x=x;
this.y=y;
this.nx=x;
this.ny=y;
}
public void getcommand(String[] s){
say=s[2];
nx=Integer.parseInt(s[3]);
ny=Integer.parseInt(s[4]);
}
public void paint(Graphics g){
if(System.currentTimeMillis()-lm>200)
move();
g.setColor(0xf000f0);
g.fillRect(x,y,16,16);
g.drawString(user,x,y-16,Graphics.TOP|Graphics.LEFT);
}
void move(){
x+=x>nx?-1:(x==nx?0:1);
y+=y>ny?-1:(y==ny?0:1);}
}
Trong canvas.java cũng có những thay đổi, cụ thể là ta tách việc [phân tích dữ liệu gửi về vào hàm khac(), và cho vào trong vòng lặp paint(g), như vậy sẽ làm cho mọi thứ trở nên liên tục hơn. Ta cũng cần chú ý, bây giờ khởi tạo biến robot phải cần tới 4 tham số, cho nhân vật của ta có id=0, user=”me”, x=0, y=0:
mog.java
C:\Users\thanhliem\Documents\NetBeansProjects\mog\src\mog.java |
class canvas extends Canvas{
String dt;
textfield tf;
Vector rb=new Vector();
Font f=Font.getFont(0,0,8);
int w,h,k=0,fh;
String command="";
robot me=new robot(0,"me",0,0);
public canvas(){
setFullScreenMode(true);
w=getWidth();
h=getHeight();
fh=f.getHeight();
tf=new textfield("command",0,0,w);
}
public void paint(Graphics g){
khac();
g.setFont(f);
g.setColor(0);
g.fillRect(0,0,w,h);
tf.paint(g,k,true);
g.setColor(0xf0f0);
g.setClip(0,0,w,h);
g.drawString(command,0,fh*2,Graphics.TOP|Graphics.LEFT);
if(dt!=null)
g.drawString(dt,0,h,Graphics.LEFT|Graphics.BOTTOM);
if(rb!=null)
for(int i=0;i<rb.size();i++)
((robot)rb.elementAt(i)).paint(g);
me.paint(g);
k=0;
repaint();
}
public void keyPressed(int k){
this.k=k;
if(k==-4){me.nx=me.x+5;}
if(k==-3){me.nx=me.x-5;}
if(k==-2){me.ny=me.y+5;}
if(k==-1){me.ny=me.y-5;}
}
public void keyReleased(int k){this.k=0;}
public String[] tach(String s,String c){
Vector v=new Vector();
if(!s.endsWith(c)){s+=c;}
int st=0,np=s.indexOf(c,st);
while(np!=-1){
v.addElement((String)s.substring(st,np));
st=np+c.length();
np=s.indexOf(c,st);}
String[] rt=new String[v.size()];
v.copyInto((String[])rt);
for(int i=0;i<rt.length;i++){System.out.println(rt[i]+rt[i].length());}
return rt;}
int toint(String s){return Integer.parseInt(s);}
void khac(){
if(dt!=null&&dt.length()>3){
command=dt.substring(3);
String[] acommand=tach(command,"#");
Vector trb=new Vector();
for(int i=0;i<acommand.length;i++){
String[] info=tach(acommand[i],"|");
if(info!=null){
robot nrb=new robot(toint(info[0]),info[1],toint(info[3]),toint(info[4]));
for(int j=0;j<rb.size();j++){
if(Integer.parseInt(info[0])==(((robot)rb.elementAt(j)).id)){nrb=(robot)rb.elementAt(j);
System.out.println("dectect");}}
nrb.getcommand(info);
trb.addElement((robot)nrb);}}
rb=trb;}}
Như vậy là xong, rủ ai đó cùng test ứng dụng, bạn sẽ thấy mọi thứ hoạt động khá tốt.
source project
jar test
Không có nhận xét nào:
Đăng nhận xét