📄 gamescreen.java
字号:
upduration=upendtime-upstarttime;
else
upduration=-1;
}
//mario的停止帧
if(releasedkeycode==Canvas.LEFT)
{
mariosprite.setFrame(6);
leftpress=false;
}
if(releasedkeycode==Canvas.RIGHT)
{
mariosprite.setFrame(0);
rightpress=false;
}
if(releasedkeycode==Canvas.FIRE)
firepress=false;
if(releasedkeycode==Canvas.DOWN)
downpress=false;
}
}
public void action()//mario的运动(向下掉、左右移动、跳跃)
{
//如果什么都没操作则不做任何活动
if(uppress==false&&downpress==false&&leftpress==false&&rightpress==false&&mariosprite.bjump==false&&walkdown==false)
{
;
}
else
{
if(firepress==true)
movespeed=3;
else
movespeed=2;
mariosprite.CanMove(currentViewPosX-getWidth()/2+mariosprite.curspX,currentViewPosY-getHeight()/2+mariosprite.curspY);//判断可以向哪些方向移动
//mario向下掉
if(mariosprite.down_canmove==true&&mariosprite.bjump==false)
{
walkdown=true;
mariosprite.xiajiang=true;
for(int i=0;i<8;i++)
{
mariosprite.curspY++;
mariosprite.CanMove(currentViewPosX-getWidth()/2+mariosprite.curspX,currentViewPosY-getHeight()/2+mariosprite.curspY);
if(mariosprite.down_canmove==false||mariosprite.curspY>getHeight())
{
walkdown=false;
mariosprite.xiajiang=false;
break;
}
}
}
switch(keycode)
{
case(Canvas.UP):
if(last_UP)
last_uptime+=System.currentTimeMillis()-upstarttime;
break;
case(Canvas.DOWN):
mariosprite.curspY--;
break;
}
if(rightpress==true)//右键头
{
if(mariosprite.right_canmove==true)
{
if(mariosprite.curspX>65)//背景移动
{
for(int i=0;i<movespeed;i++)
{
currentViewPosX++;
mariosprite.CanMove(currentViewPosX-getWidth()/2+mariosprite.curspX,currentViewPosY-getHeight()/2+mariosprite.curspY);
if(mariosprite.right_canmove==false)
break;
}
mariosprite.spspeed=0;
}
else//mario移动
mariosprite.spspeed=movespeed;
mariosprite.walk(1,0,4,currentViewPosX-getWidth()/2,currentViewPosY-getHeight()/2);
}
}
if(leftpress==true)//左键头
{
if(mariosprite.left_canmove==true)
{
if(mariosprite.curspX>0)
mariosprite.spspeed=movespeed;
else
mariosprite.spspeed=0;
mariosprite.walk(0,6,10,currentViewPosX-getWidth()/2,currentViewPosY-getHeight()/2);
}
}
if(mariosprite.bjump==false&&walkdown==false)//mario 的跳跃方式
{
if(last_uptime>=TIME_JUMP)//如果按住向上键的持续时间大于最大时间则大跳
{
mariosprite.whichjump(BIG_JUMP);
mariosprite.bjump=true;
mariosprite.t=0;
last_uptime=0;
upduration=-1;
last_UP=false;
upreleased=true;
}
else
{
if(upduration!=-1)//根据跳单击跃键和松开跳跃的时间决定mario是小跳
{
mariosprite.whichjump(SMALL_JUMP);
mariosprite.bjump=true;
mariosprite.t=0;
upduration=-1;
}
}
}
if(mariosprite.t<0&&mariosprite.bjump==true)//结束跳跃
{
if(upreleased)
{
mariosprite.bjump=false;
mariosprite.y1=0;
mariosprite.y2=0;
mariosprite.y0=-1;
mariosprite.stopcurspY=-1;
last_uptime=0;
uppress=false;
if(mariosprite.way==1)
mariosprite.curFrame=0;
else if(mariosprite.way==0)
mariosprite.curFrame=6;
}
}
if(mariosprite.bjump)
{
mariosprite.t+=2;
mariosprite.jump();
}
if(mariosprite.curspX<0)
mariosprite.curspX=0;
}
if(mariosprite.state==6)//mario由大变小时,一段时间内无敌
{
if(mariosprite.statetimes%5==0)
{
if(mariosprite.curFrame==0)
mariosprite.curFrame=13;
else if(mariosprite.curFrame==13)
mariosprite.curFrame=0;
else if(mariosprite.curFrame==6)
mariosprite.curFrame=14;
else if(mariosprite.curFrame==14)
mariosprite.curFrame=6;
}
mariosprite.statetimes--;
if(mariosprite.statetimes==0)
{
mariosprite.state=0;
if(mariosprite.curFrame==13)
mariosprite.curFrame=0;
else if(mariosprite.curFrame==14)
mariosprite.curFrame=6;
}
}
if(mariosprite.curspY>getHeight())//mario掉到地面以下死亡
{
mariosprite.t=-3;
mariosprite.curFrame=12;
mariosprite.deadtime=20;//没有死亡效果
mariosprite.bjump=false;
mariosprite.life=false;
}
}
public void npcaction()//每个npc的运动(向下掉、左右移动)
{
if(npc_curnum<Npc.npc_xy.length)//当前的npc号码小于一共的npc数量
{
//如果第npc_curnum个Npc的坐标在范围内则初始化一个Npc
if((Npc.npc_xy[npc_curnum][0]*13-currentViewPosX)<(getWidth()/2+10))
{
NpcSprite npc=null;
int x=Npc.npc_xy[npc_curnum][0]*13-currentViewPosX+getWidth()/2;
int y=Npc.npc_xy[npc_curnum][1]*13;
switch(Npc.npc_xy[npc_curnum][2])
{
case(0):
npc=new NpcSprite(Image_ghost,x,y,13,13,0,currentViewPosX,this);
break;
case(1):
npc=new NpcSprite(Image_duck,x,y-7,13,20,1,currentViewPosX,this);
npc.setFrame(2);
break;
}
npcs.addElement(npc);
npc_curnum++;
}
}
for(int i=0;i<npcs.size();i++)//每个npc的运动(向下掉、左右移动)
{
NpcSprite npc=(NpcSprite)npcs.elementAt(i);
if(npc.npc_life==true)//npc是活的
{
if(mariosprite.ding==true)//如果mario顶到npc下面的砖块
{
int x,y;
x=mariosprite.flashxfirst-currentViewPosX+getWidth()/2;
y=mariosprite.flashy0*13-currentViewPosY+getHeight()/2;
if((npc.npc_curspY+npc.npc_height)==y)
{
if(npc.npc_curspX>(x-10)&&npc.npc_curspX<(x+10))
{
npc.npc_bjump=true;
npc.t=0;
if((npc.npc_curspX+npc.npc_width/2)<=(x+6))
npc.npc_way=0;
else
npc.npc_way=1;
if(npc.npc_kind==0||npc.npc_kind==1)//如果被顶到的是毒蘑菇或鸭子,则毒蘑菇或鸭子死亡
{
num num=new num(Image_num,npc.npc_curspX,npc.npc_curspY-10,npc.npc_kind);
nums.addElement(num);
npc.npc_life=false;
if(npc.npc_kind==0)//毒蘑菇
npc.setFrame(3);
else if(npc.npc_kind==1)//鸭子
npc.setFrame(9);
npc.npc_kind=4;
}
else if(npc.npc_kind==10)//如果被顶到的是长大蘑菇
{
;
}
}
}
}
if(npc.npc_kind<=2)//当npc是毒蘑菇、鸭子、鸭子壳
{
for(int j=0;j<bullets.size();j++)//npc被子弹击中
{
bullet bul=(bullet)bullets.elementAt(j);
if((bul.curspX+6)>npc.npc_curspX&&bul.curspX<(npc.npc_curspX+npc.npc_width))//击中npc
{
if((bul.curspY+6)>npc.npc_curspY&&bul.curspY<(npc.npc_curspY+npc.npc_height))
{
npc.npc_bjump=true;
npc.t=0;
npc.npc_way=bul.way;
bul.bul_life=false;
num num=new num(Image_num,npc.npc_curspX,npc.npc_curspY-10,npc.npc_kind);
nums.addElement(num);
npc.npc_life=false;
if(npc.npc_kind==0)//毒蘑菇
npc.setFrame(3);
else if(npc.npc_kind==1||npc.npc_kind==2)//鸭子,鸭子壳
npc.setFrame(9);
npc.npc_kind=4;
}
}
}
if(npc.npc_kind==2)//运动着的鸭子壳杀死和它发生碰撞的npc
{
for(int m=0;m<npcs.size();m++)
{
if(i!=m)//不是本身这个鸭子壳
{
NpcSprite npc1=(NpcSprite)npcs.elementAt(m);
if(npc1.npc_life==true)
{
if((npc.npc_curspX+npc.npc_width)>npc1.npc_curspX&&npc.npc_curspX<(npc1.npc_curspX+npc1.npc_width))//击中npc
{
if((npc.npc_curspX+npc.npc_height)>npc1.npc_curspX&&npc.npc_curspX<(npc1.npc_curspX+npc1.npc_height))
{
npc1.npc_bjump=true;
npc1.t=0;
npc1.npc_way=npc.npc_way;
num num=new num(Image_num,npc.npc_curspX,npc.npc_curspY-10,npc1.npc_kind);
nums.addElement(num);
npc1.npc_life=false;
npc1.npc_kind=4;
npc1.setFrame(3);
npcs.setElementAt(npc1,m);
}
}
}
}
}
}
}
npc.CanMove((currentViewPosX-getWidth()/2+npc.npc_curspX),(currentViewPosY-getHeight()/2+npc.npc_curspY));
if(npc.down_canmove==true&&npc.npc_bjump==false)//Npc向下掉
{
for(int j=0;j<6;j++)
{
npc.npc_curspY++;
npc.CanMove((currentViewPosX-getWidth()/2+npc.npc_curspX),(currentViewPosY-getHeight()/2+npc.npc_curspY));
if(npc.down_canmove==false)
break;
}
}
if(npc.npc_way==0)//npc向左运动时
{
if(npc.left_canmove==false)//前方的tile不能通过
{
npc.npc_way=1;
if(npc.npc_kind==1)//duck
npc.setFrame(0);
else if(npc.npc_kind==0)//ghost
npc.setFrame(0);
}
else//前方能通过
{
if(npc.npc_kind==2)//duck壳
{
for(int j=0;j<6;j++)
{
npc.npc_curspX--;
npc.CanMove((currentViewPosX-getWidth()/2+npc.npc_curspX),(currentViewPosY-getHeight()/2+npc.npc_curspY));
if(npc.left_canmove==false)
{
npc.npc_way=1;
break;
}
}
}
else if(npc.npc_kind==10)//长大蘑菇
npc.npc_curspX-=2;
else
npc.npc_curspX--;
if(npc.npc_kind==1)//duck
{
if(npc.npc_curframe==2)
npc.setFrame(3);
else
npc.setFrame(2);
}
else if(npc.npc_kind==0)//ghost
{
if(npc.npc_curframe==0)
npc.setFrame(1);
else
npc.setFrame(0);
}
npc.npc_curspX-=(currentViewPosX-npc.npc_curViewPosX);
npc.npc_curViewPosX=currentViewPosX;
}
}
else if(npc.npc_way==1)//npc向右运动时
{
if(npc.right_canmove==false)//前方的tile不能通过
{
npc.npc_way=0;
if(npc.npc_kind==1)//duck
npc.setFrame(2);
else if(npc.npc_kind==0)//ghost
npc.setFrame(0);
}
else//前方能通过
{
if(npc.npc_kind==2)//duck壳
{
for(int j=0;j<8;j++)
{
npc.npc_curspX++;
npc.CanMove((currentViewPosX-getWidth()/2+npc.npc_curspX),(currentViewPosY-getHeight()/2+npc.npc_curspY));
if(npc.right_canmove==false)
{
npc.npc_way=0;
break;
}
}
}
else if(npc.npc_kind==10)
npc.npc_curspX+=2;
else
npc.npc_curspX++;
if(npc.npc_kind==1)//duck
{
if(npc.npc_curframe==0)
npc.setFrame(1);
else
npc.setFrame(0);
}
else if(npc.npc_kind==0)
{
if(npc.npc_curframe==0)
npc.setFrame(1);
else
npc.setFrame(0);
}
npc.npc_curspX-=(currentViewPosX-npc.npc_curViewPosX);
npc.npc_curViewPosX=currentViewPosX;
}
}
}
else//npc是死的
{
if(npc.npc_kind==2)//静止着的鸭子壳
{
for(int m=0;m<npcs.size();m++)//改变与他发生碰撞的npc的运动方向
{
if(i!=m)//不是本身这个鸭子壳
{
NpcSprite npc1=(NpcSprite)npcs.elementAt(m);
if((npc.npc_curspX+npc.npc_width)>npc1.npc_curspX&&npc.npc_curspX<(npc1.npc_curspX+npc1.npc_width))//击中npc
{
if((npc.npc_curspX+npc.npc_height)>npc1.npc_curspX&&npc.npc_curspX<(npc1.npc_curspX+npc1.npc_height))
{
npc1.npc_way=1-npc1.npc_way%2;
npcs.setElementAt(npc1,m);
}
}
}
}
for(int j=0;j<bullets.size();j++)//静止的鸭子壳被子弹击中
{
bullet bul=(bullet)bullets.elementAt(j);
if((bul.curspX+6)>npc.npc_curspX&&bul.curspX<(npc.npc_curspX+npc.npc_width))//击中npc
{
if((bul.curspY+6)>npc.npc_curspY&&bul.curspY<(npc.npc_curspY+npc.npc_height))
{
npc.npc_bjump=true;
npc.t=0;
npc.npc_way=bul.way;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -