📄 mariomainsprite.java
字号:
package mario;
import javax.microedition.lcdui.*;
import lipeng.*;
import java.io.*;
public class MarioMainSprite
extends LPSprite
{
public MarioMainSprite(MarioGameManage gm, LPMaps map)
{
this.gm = gm;
this.judgeMap = map;
mainSpriteState = SMALL_SPRITE;
this.gm = gm;
}
//method
public void action()
{
bgdx=0;
bgdy=0;
switch(mainSpriteState)
{
case GROW_SPRITE:
if(++growCnt==10)
{
mainSpriteState=NORMAL_SPRITE;
growCnt=0;
}
else
{
if(growCnt%2==0)
{
y+=16;
}
else
{
y-=16;
}
}
break;
case BECOME_FIRE:
if(++becomeCnt==10)
{
mainSpriteState=FIRE_SPRITE;
becomeCnt=0;
}
break;
case DEAD_SPRITE:
if(deadCnt==0)
{
dy=-10;
frameCnt=10;
}
frameCnt=10;
++dy;
y+=dy;
if(++deadCnt>=20)
{
deadCnt=0;
mainSpriteState=SMALL_SPRITE;
gm.gameState=MarioGameManage.GAMESTATE_REINIT;
}
break;
case BECOME_SMALL:
if(++becomeCnt==10)
{
mainSpriteState=SMALL_SPRITE;
becomeCnt=0;
}
break;
default:
{
dy+=2;
checkSpriteCollisionVertical();
checkTileCollisionVertical();
mainSpriteDamage();
y+=dy;
if(y+this.judgeMap.y<0)
{
y=0;
dy=0;
}
if(y<=MarioMIDlet.gameCanvas.height/4
||
((this.judgeMap.y!=
this.judgeMap.tileSize*this.judgeMap.h-
MarioMIDlet.gameCanvas.height)
&&y>=MarioMIDlet.gameCanvas.height/4)
)
{
this.bgdy=(MarioMIDlet.gameCanvas.height/4-y)>>2;
if(bgdy-this.judgeMap.y<
MarioMIDlet.gameCanvas.height-
this.judgeMap.tileSize*this.judgeMap.h)
{
bgdy=MarioMIDlet.gameCanvas.height-
this.judgeMap.tileSize*this.judgeMap.h+this.judgeMap.y;
}
if((this.judgeMap.y<=0)&&y<MarioMIDlet.gameCanvas.height/4)
{
this.judgeMap.y=0;
bgdy=0;
}
}
else
{
bgdy=0;
}
if((allAction&LPKeyMask.MASK_KEY_LEFT)!=0)
{
this.isLeft=true;
if(--dx<-MOVE_SPEED)
{
dx=-MOVE_SPEED;
}
if(checkTileCollisionHorizon())
{
dx=0;
}
}
else if((allAction&LPKeyMask.MASK_KEY_RIGHT)!=0)
{
this.isLeft=false;
if(++dx>MOVE_SPEED)
{
dx=MOVE_SPEED;
}
if(checkTileCollisionHorizon())
{
dx=0;
}
}
else
{
if(dx>0)
{
if(checkTileCollisionHorizon())
{
dx=0;
}
else
{
--dx;
}
}
else if(dx<0)
{
if(checkTileCollisionHorizon())
{
dx=0;
}
else
{
++dx;
}
}
}
if(!checkSpriteCollisionHorizon())
{
x+=dx;
if(dx<0)
{
if(distance>=-gm.canvas.width)
{
distance+=dx;
}
}
if(distance<0)
{
if(dx>0)
{
distance+=dx;
}
}
}
else
{
dx=0;
}
if(this.x!=MarioMIDlet.gameCanvas.width/4)
{
this.bgdx=MarioMIDlet.gameCanvas.width/4-x;
if(distance<-(gm.canvas.width-MarioMIDlet.gameCanvas.width/4))
{
bgdx=0;
}
}
else
{
bgdx=0;
}
if(judgeMap.x-bgdx<0
||
judgeMap.x-bgdx>
judgeMap.tileSize*judgeMap.w-MarioMIDlet.gameCanvas.width
)
{
bgdx=0;
}
if(mainSpriteState==FIRE_SPRITE)
{
if((allAction&LPKeyMask.MASK_KEY_OK_FLAG)!=0)
{
fire();
}
checkBulletDamage();
}
x+=this.bgdx;
judgeMap.x-=this.bgdx;
y+=this.bgdy;
judgeMap.y-=this.bgdy;
int tmpDy=this.bgdy;
if(judgeMap.y<0)
{
tmpDy=bgdy+judgeMap.y;
this.bgdy=-judgeMap.y;
judgeMap.y=0;
y+=this.bgdy;
}
bgdy=tmpDy;
if(x<0)
{
x=0;
}
if(this.x>=MarioMIDlet.gameCanvas.width-32)
{
this.x=MarioMIDlet.gameCanvas.width-32;
}
if(isLeft)
{
offset=5;
}
else
{
offset=0;
}
if(dy!=0)
{
frameCnt=offset+3;
}
else if(((allAction&LPKeyMask.MASK_KEY_LEFT)!=0)
||((allAction&LPKeyMask.MASK_KEY_RIGHT)!=0))
{
walk();
}
else if(dy==0&&(allAction&LPKeyMask.MASK_KEY_UP_FLAG)==0)
{
frameCnt=offset;
}
if(isProtected)
{
isHidden=!isHidden;
if(protectCnt++==protectInterval)
{
protectCnt=0;
isProtected=false;
isHidden=false;
}
}
else
{
checkEnemyCollision();
}
if((allAction&LPKeyMask.MASK_KEY_OK_FLAG)!=0)
{
if(mainSpriteState==FIRE_SPRITE)
{
frameCnt=offset+1;
}
allAction&=~LPKeyMask.MASK_KEY_OK_FLAG;
}
checkStaticSpriteCollision();
if(y>this.judgeMap.tileSize*this.judgeMap.h)
{
if(gm.menu.isVolOn)
{
gm.beatPlayer.replay();
}
gm.gameState=MarioGameManage.GAMESTATE_REINIT;
}
}
break;
}
}
private void spriteDeadAction()
{
if(gm.menu.isVolOn)
{
gm.beatPlayer.replay();
}
if(mainSpriteState==SMALL_SPRITE)
{
mainSpriteState=DEAD_SPRITE;
return;
}
else
{
mainSpriteState=BECOME_SMALL;
isProtected=true;
this.protectCnt=0;
this.protectInterval=20;
return;
}
}
private void checkEnemyCollision()
{
int i;
switch(mainSpriteState)
{
case SMALL_SPRITE:
rect1.x = x+2;
rect1.y = y;
rect1.dx = 12;
rect1.dy = 16;
break;
case NORMAL_SPRITE:
case FIRE_SPRITE:
rect1.x = x+6;
rect1.y = y+2;
rect1.dx = 20;
rect1.dy = 30;
break;
}
rect2.dx = 14;
rect2.dy = 14;
for(i=gm.enemy.length-1;i>=0;--i)
{
if(!gm.enemy[i].isHidden)
{
if(gm.enemy[i].isCheck)
{
rect2.x = gm.enemy[i].x;
rect2.y = gm.enemy[i].y;
if(LPRect.IntersectRect(rect1,rect2))
{
spriteDeadAction();
return;
}
}
}
}
for(i=gm.tortoise.length-1;i>=0;--i)
{
if(!gm.tortoise[i].isHidden)
{
if(gm.tortoise[i].isCheck)
{
rect2.x=gm.tortoise[i].x;
rect2.y=gm.tortoise[i].y+8;
if(LPRect.IntersectRect(rect1,rect2))
{
if(Math.abs(rect1.y+rect1.dy-(rect2.y))>6)
{
spriteDeadAction();
return;
}
}
}
}
}
}
private void mainSpriteDamage()
{
if(dy>=0)
{
int i;
rect1.y=y;
rect2.dx=16;
rect2.dy=16;
if(mainSpriteState==SMALL_SPRITE)
{
rect1.x=x;
rect1.dx=16;
rect1.dy=16;
}
else
{
rect1.x=8;
rect1.dx=20;
rect1.dy=32;
}
for(i=gm.enemy.length-1;i>=0;--i)
{
if(!gm.enemy[i].isHidden)
{
if(gm.enemy[i].isCheck)
{
if((gm.enemy[i].y>=y+rect1.dy)
&&(gm.enemy[i].y<=y+dy+rect1.dy)
&&(x>gm.enemy[i].x-13)&&(x<=gm.enemy[i].x+10))
{
gm.enemy[i].changeState();
if(gm.menu.isVolOn)
{
gm.beatPlayer.replay();
}
}
}
}
}
for(i=gm.tortoise.length-1;i>=0;--i)
{
if(!gm.tortoise[i].isHidden)
{
if((gm.tortoise[i].y+8>=y+rect1.dy)
&&(gm.tortoise[i].y+8<=y+dy+rect1.dy)
&&(x>gm.tortoise[i].x-13)&&(x<=gm.tortoise[i].x+10))
{
dy=-8;
gm.tortoise[i].changeState();
if(gm.menu.isVolOn)
{
gm.beatPlayer.replay();
}
}
}
}
}
}
private boolean checkStaticSpriteCollision()
{
int i;
rect2.dx = 16;
rect2.dy = 16;
switch(mainSpriteState)
{
case SMALL_SPRITE:
rect1.x=x+2;
rect1.y=y;
rect1.dx=14;
rect1.dy=16;
break;
default:
rect1.x=x+8;
rect1.y=y+1;
rect1.dx=16;
rect1.dy=31;
break;
}
rect2.dx = 14;
rect2.dy = 16;
for(i=gm.mashRooms.length-1;i>=0;--i)
{
if(!gm.mashRooms[i].isHidden)
{
switch(mainSpriteState)
{
case SMALL_SPRITE:
rect2.x = gm.mashRooms[i].x;
rect2.y = gm.mashRooms[i].y;
if(LPRect.IntersectRect(rect1,rect2))
{
if(gm.menu.isVolOn)
{
gm.beatPlayer.replay();
}
if(gm.mashRooms[i].frameCnt==6)
{
gm.mashRooms[i].isHidden=true;
mainSpriteState=GROW_SPRITE;
growCnt=0;
return true;
}
else if(gm.mashRooms[i].frameCnt==8)
{
// add a person
gm.mashRooms[i].isHidden=true;
return true;
}
}
break;
case NORMAL_SPRITE:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -