Dù cho bản đồ của mình có rộng lớn đến đâu chăng nữa thì cũng không thể nào chỉ đi trong đó cho đến hết trò chơi. Bây giờ chúng ta cần làm cho nó rộng lớn hơn nhiều nữa, và chúng ta sẽ tạo một class mới gọi là hole.java, nó như sau:
hole.java
C:\Users\thanhliem\Documents\NetBeansProjects\RPG\src\hole.java |
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class hole {
int[][] hole={{0,3,5},{1,5,4}};
int[] out={1,0};
boolean inhole=true;
int m;
public boolean check(int nm,int x,int y,map m){
for(int i=0;i<hole.length;i++){
int nx=x/16;
int ny=y/16;
if(nm==hole[i][0]&&nx==hole[i][1]&&ny==hole[i][2]){
this.m=out[i];
return true;}
}
return false;}
public void change(int nm,int x,int y,map m){
if(check(nm,x,y,m)){
if(!inhole){
inhole=true;
m.m=hole[this.m][0];
m.load("m"+hole[this.m][0]+".mbd",hole[this.m][1],hole[this.m][2],m.w,m.h);}}
else{
inhole=false;}
}
}
Nhưng khi thay đổi map thì nhân vật phụ cũng thay đổi luôn đó, cho nguyên nhân đó nên chúng ta cũng thay đổi cách tạo nhân vật phụ, nhân vật dẫn chuyện cũng nên thay đổi, nhưng ở đây tôi không nói nhiều về chuyện đó. Chúng ta chỉ thay đổi một chút để game không bị lỗi, file map.java thành thế này.
map.java
C:\Users\thanhliem\Documents\NetBeansProjects\RPG\src\map.java |
import java.io.*;
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
import java.util.*;
public class map {
int mw,mh,tw,th,x,y,k,step=0,w,h,m=0;
byte[] map;
Image tiles,other;
TiledLayer tl;
long lm=0;
other[] ot;
trail tr=new trail();
hole hl=new hole();
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);
is.close();
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++)
{
Random d=new Random();
int cot=Math.abs(d.nextInt())%mw,rot=Math.abs(d.nextInt())%mh;
ot[i]=new other(other,cot*16,rot*16);
Thread.sleep(50);}
}catch(Exception e){}}
void paint(Graphics g,int k){
move(k);
g.setColor(0);
g.drawRect(x,y,tl.getWidth(),tl.getHeight());
tl.paint(g);
for(int i=0;i<ot.length;i++)
ot[i].paint(g,this);
tr.paint(g,this,k);
hl.change(this.m, w/2-x, h/2-y, 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){
if(a<0||b<0||a>mw*16-16||b>mh*16-16){return false;}
return tl.getCell(a/16, b/16)<3;}
}
Kết quả chúng ta như sau:
Không có nhận xét nào:
Đăng nhận xét