bài này không nói gì nhiều, chỉ có những chú thích trong file source. Trong ví dụ, đã xuất hiện được 3 nhân vật thông qua mảng other, và thêm điều hiện để kiểm tra xem có chạm tường hay không, nếu chạm thì không đi được nữa thế thôi.
File map.java
map.java
C:\Users\thanhliem\Documents\NetBeansProjects\RPG\src\map.java |
import java.io.*;
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
public class map {
int mw,mh,tw,th,x,y,k,step=0,w,h;
byte[] map;
Image tiles,other;
TiledLayer tl;
long lm=0;
other[] ot;
public map(String im){
try{
this.tiles=Image.createImage("/"+im);
}catch(Exception e){}}
public void load(String fn,int c,int r,int w,int h){
try{
InputStream is=getClass().getResourceAsStream("/"+fn);
mw=is.read();
mh=is.read();
tw=is.read();
th=is.read();
map=new byte[is.available()];
is.read(map);
tl=new TiledLayer(mw,mh,tiles,tw,th);
for(int i=0;i<mh;i++){
for(int j=0;j<mw;j++){
tl.setCell(j, i, map[i*mw+j]);
}}
this.w=w;
this.h=h;
x=w/2-c*tw;
y=h/2-r*th;
other=Image.createImage("/other.png");
ot=new other[3];
for(int i=0;i<ot.length;i++)
{ot[i]=new other(other,(i+1)*12*16,(i+1)*13*16);
Thread.sleep(50);}
}catch(Exception e){}}
void paint(Graphics g,int k){
move(k);
tl.paint(g);
for(int i=0;i<ot.length;i++)
ot[i].paint(g,this);}
void move(int k){
if(step==0){
int gx=x,gy=y;
switch(k){
case -1:
gy+=16;
break;
case -2:
gy-=16;
break;
case -3:
gx+=16;
break;
case -4:
gx-=16;
break;}
if(check(w/2-gx,h/2-gy)){
this.k=k;
step=4;}
}else{
if(lm<=curr()-30){
step--;
switch(this.k){
case -1:
y+=th/4;
break;
case -2:
y-=th/4;
break;
case -3:
x+=tw/4;
break;
case -4:
x-=tw/4;
break;}
lm=curr();}
}
tl.setPosition(x, y);
}
long curr(){return System.currentTimeMillis();}
boolean check(int a,int b){
return tl.getCell(a/16, b/16)<3;}
}
File other.java :
other.java
C:\Users\thanhliem\Documents\NetBeansProjects\RPG\src\other.java |
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.util.*;
public class other {
int x,y,f=0,k=1;
Sprite other;
long lm,lc;
Image im;
Random rd=new Random();
public other(Image im,int x,int y){
this.x=x;
this.y=y;
this.im=im;
other=new Sprite(im,16,16);
other.setFrame(f);
}
void paint(Graphics g,map m){
move(m);
other.paint(g);
}
void move(map m){
if(lc<m.curr()-1500){
k=Math.abs(rd.nextInt()%4)+1;
lc=m.curr();}
if(lm<m.curr()-200){
f=f%2==0?(k-1)*2+1:(k-1)*2;
other.setFrame(f);
int gx=x,gy=y;
switch(k){
case 1:
y-=4;
break;
case 2:
y+=4;
break;
case 3:
x-=4;
break;
case 4:
x+=4;
break;}
lm=m.curr();
if(!m.check(x, y))
{x=gx; y=gy;}
}
other.setPosition(x+m.x,y+m.y);
}
}
Có vài sai sót nhỏ đã được chỉnh lại cho đúng, tại lúc khởi tạo nhân vật phụ trong map.java không phải thêm w/2- và h/2- mà xác định trực tiếp qua cột và hàng mà nhân vật phụ xuất hiện.
source
jar
Không có nhận xét nào:
Đăng nhận xét