📄 util.java
字号:
if((spt.x %16) == 4){
spt.x -=v;
}else if((spt.x %16) == 12){
spt.x +=v;
}
}else if(spt.getDir() == Sprite.DIR_DOWN){
sprite_changeSpeed(spt,0,v);
if((spt.x %16) == 4){
spt.x -=v;
}else if((spt.x %16) == 12){
spt.x +=v;
}
}else if(spt.getDir() == Sprite.DIR_LEFT){
sprite_changeSpeed(spt,-v,0);
if((spt.y %16) == 4){
spt.y -=v;
}else if((spt.y %16) == 12){
spt.y +=v;
}
}else if(spt.getDir() == Sprite.DIR_RIGHT){
sprite_changeSpeed(spt,v,0);
if((spt.y %16) == 4){
spt.y -=v;
}else if((spt.y %16) == 12){
spt.y +=v;
}
}
break;
}
break;
}
}
public void ai_player(Sprite spt){
switch(sprite_getMainState(spt.state)){
case SPT_STATE_FREE:
switch(spt.state){
case SPT_STATE_FREE_WAIT:
break;
case SPT_STATE_FREE_STEP:
Vector tmp = sprite_canMove(spt,spt.w,spt.h);
for (int i = 0; i < tmp.size(); i ++) {
int[] tile = (int[])tmp.elementAt(i);
for (int j = 0; j < tile.length >>1; j ++) {
int NI = tile[j*2];
int NP = tile[j*2+1];
// System.out.println(NP);
if(NP == PHY_X_LT_0){
spt.x = 0;
sprite_changeSpeed(spt,0,0);
break;
}else if(NP == PHY_X_GT_W){
spt.x = mapW - 16;
sprite_changeSpeed(spt,0,0);
}else if(NP == PHY_Y_LT_0){
spt.y = 0;
sprite_changeSpeed(spt,0,0);
}else if(NP == PHY_Y_GT_H){
spt.y = mapH- 16;
sprite_changeSpeed(spt,0,0);
} else if (NP != - 1) {
if (NP == PHY_BRICK) {
sprite_changeSpeed(spt,0,0);
} else if (NP == PHY_ROCK) {
sprite_changeSpeed(spt,0,0);
} else if (NP == PHY_WATER) {
sprite_changeSpeed(spt,0,0);
}else if(NP == PHY_GRASS){
} else if (NP == PHY_ICE) {
} else if (NP == PHY_BLOCKHOUSE) {
sprite_changeSpeed(spt,0,0);
}
}
}
}
sprite_changePosition(spt);
break;
}
break;
}
}
public void sprite_addBullet(Sprite form){
sprite_add(ID_BULLET,Sprite.DIR_UP,"null");
Sprite buttlte = sprite_getOnIndex(sprite_getSize() - 1);
sprite_setDir(buttlte,form.getDir());
switch(form.getDir()){
case Sprite.DIR_UP:
buttlte.x = form.x + 7;
buttlte.y = form.y + form.h;
break;
case Sprite.DIR_DOWN:
buttlte.x = form.x + 7;
buttlte.y = form.y ;
break;
case Sprite.DIR_RIGHT:
buttlte.x = form.x + 7;
buttlte.y = form.y + 7;
break;
case Sprite.DIR_LEFT:
buttlte.x = form.x + form.w;
buttlte.y = form.y + 7;
break;
}
sprite_changeState(buttlte,SPT_STATE_FREE_STEP);
}
public void ai_bulletState(Sprite spt,int nextState){
switch(sprite_getMainState(spt.state)){
case SPT_STATE_FREE:
switch(spt.state){
case SPT_STATE_FREE_WAIT:
spt.vx = spt.vy = 0;
break;
case SPT_STATE_FREE_STEP:
if(spt.getDir() == Sprite.DIR_UP){
sprite_changeSpeed(spt,0,-12);
}else if(spt.getDir() == Sprite.DIR_DOWN){
sprite_changeSpeed(spt,0,12);
}else if(spt.getDir() == Sprite.DIR_LEFT){
sprite_changeSpeed(spt,-12,0);
}else if(spt.getDir() == Sprite.DIR_RIGHT){
sprite_changeSpeed(spt,12,0);
}
sprite_changePosition(spt);
break;
}
break;
}
}
public void ai_bullet(Sprite spt){
switch(spt.state){
case SPT_STATE_FREE_WAIT:
case SPT_STATE_FREE_STEP:
int nextx = spt.x + spt.vx;
int nexty = spt.y + spt.vy;
if(nextx <0){
sprite_changeState(spt,SPT_STATE_DEAD_START);
sprite_changeSpeed(spt,0,0);
spt.x = 0;
}else if(nextx + spt.w > mapW){
sprite_changeState(spt,SPT_STATE_DEAD_START);
sprite_changeSpeed(spt,0,0);
spt.x = mapW - spt.w ;
}else if(nexty <0){
sprite_changeState(spt,SPT_STATE_DEAD_START);
sprite_changeSpeed(spt,0,0);
spt.y = 0;
}else if(nexty + spt.h > mapH ){
sprite_changeState(spt,SPT_STATE_DEAD_START);
sprite_changeSpeed(spt,0,0);
spt.y = mapH - spt.h;
}
for (int i = 0; i < 2; i ++) {
int[] data = new int[6];
int offY = 0;
if (spt.getDir() == Sprite.DIR_RIGHT || spt.getDir() == Sprite.DIR_LEFT) {
data = buttllCanMove(spt.getDir(),spt.x,spt.y + i * 2,spt.vx,spt.vy,4,4);
} else if (spt.getDir() == Sprite.DIR_DOWN || spt.getDir() == Sprite.DIR_UP) {
data = buttllCanMove(spt.getDir(),spt.x + i * 2,spt.y,spt.vx,spt.vy,4,4);
}
boolean isCollide = (data[0] & 1 ) != 0;
int cx = data[1];
int cy = data[2];
int NP = data[3];
int NI = data[4];
if (isCollide) {
switch (spt.getDir()) {
case Sprite.DIR_RIGHT:
case Sprite.DIR_LEFT:
if (NP == PHY_BRICK) {
spt.x = cx;
phy_setDataValue(NI,- 1);
int IN_T = NI + map_data[0].length;
if (phy_getId(IN_T) == 0 && i == 0) {
phy_setDataValue(IN_T,- 1);
}
sprite_changeState(spt,SPT_STATE_DEAD_START);
sprite_changeSpeed(spt,0,0);
} else if (NP == PHY_ROCK) {
sprite_changeSpeed(spt,0,0);
sprite_changeState(spt,SPT_STATE_DEAD_START);
} else if (NP == PHY_WATER) {
} else if (NP == PHY_ICE) {
} else if (NP == PHY_BLOCKHOUSE) {
}
break;
case Sprite.DIR_DOWN:
case Sprite.DIR_UP:
spt.y = cy;
if (NP == PHY_BRICK) {
spt.y = cy;
phy_setDataValue(NI,- 1);
int IN_T = NI + 1;
if (phy_getId(IN_T) == 0 && i == 0) {
phy_setDataValue(IN_T,- 1);
}
sprite_changeState(spt,SPT_STATE_DEAD_START);
sprite_changeSpeed(spt,0,0);
} else if (NP == PHY_ROCK) {
sprite_changeSpeed(spt,0,0);
sprite_changeState(spt,SPT_STATE_DEAD_START);
} else if (NP == PHY_WATER) {
} else if (NP == PHY_ICE) {
} else if (NP == PHY_BLOCKHOUSE) {
}
break;
}
}
}
sprite_changePosition(spt);
break;
case SPT_STATE_DEAD_START:
sprite_addBulletBoom(spt);
spriteS.removeElement(spt);
break;
case SPT_STATE_DEAD_REMOVE:
break;
}
}
public void sprite_addBulletBoom(Sprite form){
sprite_add(ID_BULLET_BOOM,Sprite.DIR_UP,"null");
Sprite bulletBoom = sprite_getOnIndex(sprite_getSize() - 1);
sprite_setDir(bulletBoom,form.getDir());
bulletBoom.frames = new int[]{0,1};
switch(bulletBoom.getDir()){
case Sprite.DIR_UP:
bulletBoom.x = form.x;// - (bulletBoom.w >>1)
bulletBoom.y = form.y;
break;
case Sprite.DIR_DOWN:
bulletBoom.x = form.x;// - (bulletBoom.w >>1)
bulletBoom.y = form.y;// + 8
break;
case Sprite.DIR_RIGHT:
bulletBoom.x = form.x ;
bulletBoom.y = form.y;;// - (bulletBoom.h >>1)
break;
case Sprite.DIR_LEFT:
bulletBoom.x = form.x;// - (bulletBoom.w >>1)
bulletBoom.y = form.y;// - (bulletBoom.h >>1)
break;
}
}
public void ai_bulletStateBomm(Sprite spt,int nextState){
}
public void ai_bulletBomm(Sprite spt){
if(spt.isFrameOver){
spriteS.removeElement(spt);
}
}
public void keyPressed(int key) {
if (disableKey)
return;
keyCode = Math.abs(key);
try {
switch (getGameAction(key)) {
case UP:
keyCode = KEY_UP;
break;
case DOWN:
keyCode = KEY_DOWN;
break;
case LEFT:
keyCode = KEY_LEFT;
break;
case RIGHT:
keyCode = KEY_RIGHT;
break;
default:
break;
}
} catch (Exception e) {
}
pressedKeyCode = keyCode;
if(player!=null){
Sprite spt = player;
if ((spt.state == SPT_STATE_FREE_WAIT )) {
if ((pressedKeyCode == KEY_LEFT || pressedKeyCode == KEY_NUM4 )) {
sprite_setDir(spt,Sprite.DIR_LEFT);
sprite_changeState(spt,SPT_STATE_FREE_STEP);
} else if ((pressedKeyCode == KEY_RIGHT || pressedKeyCode == KEY_NUM6 )) {
sprite_setDir(spt,Sprite.DIR_RIGHT);
sprite_changeState(spt,SPT_STATE_FREE_STEP);
} else if (pressedKeyCode == KEY_UP || pressedKeyCode == KEY_NUM2) {
sprite_setDir(spt,Sprite.DIR_UP);
sprite_changeState(spt,SPT_STATE_FREE_STEP);
} else if (pressedKeyCode == KEY_DOWN || pressedKeyCode == KEY_NUM8) {
// dir |= Sprite.DIR_DOWN;
sprite_setDir(spt,Sprite.DIR_DOWN);
sprite_changeState(spt,SPT_STATE_FREE_STEP);
}
}
if (pressedKeyCode == KEY_NUM5 || pressedKeyCode == KEY_FIRE) {
sprite_addBullet(spt);
}
}
}
public void keyReleased(int key) {
keyCode = 0;
// if(gameState == GAME_PLAY){
if(player != null){
if(player.state == SPT_STATE_FREE_STEP){
sprite_changeState(player, SPT_STATE_FREE_WAIT);
}
}
// }
}
public void draw(Graphics g) {
cls(g,0);
for (int i = 0; i < sprite_getSize(); i ++) {
ai(sprite_getOnIndex(i));
}
// ai_sptTerrain();
map_drawBg(g,0,0,map_data[0].length,map_data.length);
for (int i = 0; i < sprite_getSize(); i ++) {
Sprite spt = sprite_getOnIndex(i);
switch(spt.id){
case ID_PLAYER:
drawFrame(spt.getDir(),res_getImage(spt.resList[0]),spt.x,spt.y,0,0,g,16,16);
break;
case ID_BULLET:
drawFrame(spt.getDir(),res_getImage(spt.resList[0]),spt.x,spt.y,0,0,g,4,4);
break;
case ID_BULLET_BOOM:
drawFrame(spt.curFrame,res_getImage(spt.resList[0]),spt.x,spt.y,0,3,g,16,16);
spt.nextFrame();
break;
default:
break;
}
//重画草
}
drawImage(g,res_getImage(RES_UI),0,SCREEN_H - 16,0,0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -