📄 mycanvas.java
字号:
drawMap();//绘制地图
drawPlayer();//绘制人物
drawArrow();//绘制箭;
drawD();//绘制道具
drawEnemy();//绘制敌人
break;
case PAUSE://暂停状态
drawPause();break;
case PassLevel://绘制过关
drawPass();break;
case GAMEOVER: //绘制游戏结束
drawOver();break;
case GAMEWIN://绘制游戏胜利
drawWin();break;
}
//游戏逻辑
switch(gameState)
{case GAME:
{
//宝箱
if(bx-px-16<=7&&bx-px-16>=-7&&by-py<=8)
open=true;
if(!eat&&open&&bx-px-16<=2&&bx-px-16>=-2&&by-py<=8)
{eat=true;
if(life!=6)
life++;}
//敌人
if((ax+34-ex)>=5&&(ax+34-ex<=8)&&Math.abs(ay-ey)<=32)
{
enemydead=true;
edir=2;
}
if(edir==0)
{move-=3;
if(move<=0)
edir=1;
}
if(edir==1)
{move+=3;
if(move>=90)
edir=0;
}
eframe++;
if(eframe>2)
eframe=0;
//箭
if(pp==1)
{ax-=4;
if(map[(ay)/16-2][(ax-mappx)/16+nowCol]!=0||(ax==ex+48&&Math.abs(ay-ey)<=32)||ax<=0)
{fire=false;pp=2;ax=0;ay=0;}
}
if(pp==0)
{ax+=4;
if(map[ay/16-2][(ax-mappx+34)/16+nowCol]!=0||((ax+34-ex)>=5&&(ax+34-ex<=8)&&Math.abs(ay-ey)<=32)||ax+34>=240)
{ fire=false;pp=2;ax=0;ay=0;}
}
//System.out.println("arrowX :"+(ay+7)/16);
//System.out.println("arrowY :"+((ax-mappx)/16-1+nowCol));
//主角
if(dir==6)//左上
{
nowFrame=(nowFrame+1)%3;
if(checkPro(1,0))
{
jumpx=2;//下落过程中要算上左右的移动
py-=jumpy;
px-=jumpx;
jumpy-=2;
if(jumpy<=0){jumpy=0;
dir=4;
jumpx=-jumpx;}
}
else dir=4;}
if(dir==5)//右上
{
nowFrame=(nowFrame+1)%3;
if(checkPro(1,1))
{
py-=jumpy;
jumpy-=2;
if(jumpy<=0){jumpy=0;
dir=4;}
if(px>=240/2)//如果在屏幕中心右边就滚动地图
{
if(nowCol<59)
{
bkpx-=2;//背景滚动
if(bkpx<-240){bkpx=0;}
mappx-=4;
if(mappx<=-16){
nowCol++;
mappx=0;
}
}
else
{
jumpx=2;
px+=jumpx;
}
}
else //如果在左边就执行跳跃的左右移动
{
jumpx=2;
px+=jumpx;
if(px>240/2)//让主角总在屏幕的中心
px=240/2;
}
}
else
dir=3;
}
if(dir==1)//左
{
nowFrame=(nowFrame+1)%3;
if(checkPro(0,0))
{px-=8;
if(px<0)
px=0;
if(bkpx>240){bkpx=0;}
}
if(!checkDown())
{
dir=4;
}
}
if(dir==2)//右
{
System.out.println(nowCol);
nowFrame=(nowFrame+1)%3;
if(checkPro(0,1))
{
if(px<240/2)//如果在屏幕中心左边就只滚动人物
{px+=8;}
else
{ //滚动背景
if(nowCol<59)
{
bkpx-=2;//背景滚动
if(bkpx<-240){bkpx=0;}
mappx-=4;
if(mappx<=-16){
nowCol++;
mappx=0;
}
}else
{//滚动人物
if(px<=240-32&&checkPro(0,1))
{
px+=8;
if(px>=240-32)
px=240-32;
}
}
}
if(!checkDown())
{
dir=4;
}
}
}
if(dir==3)//上
{
py-=jumpy;
jumpy-=2;
if(jumpy<=0){jumpy=0;
dir=4;
jump=false;//这是不执行下落时的左右移动
}
}
if(dir==4)//下
{
px+=jumpx;
py+=jumpy;
jumpy+=2;
if(jumpy>12){jumpy=12;jumpx=0;
//dir=0;
}
if(checkDown()){
jumpy=12;
dir=0;
py=(py+24)/16*16-24;
jumpx=0;
jump=true;
}
if(px>=240/2&&jump&&dir!=0)//如果在屏幕中心右边就滚动地图
{
if(nowCol<59)
{
if(bkpx<-240){bkpx=0;}
mappx-=2;
if(mappx<=-16){
nowCol++;
mappx=0;}
}
}
}
if(py>=289||life==0)
this.gameState=GAMEOVER;
//碰撞检测
if((ex-px<=1&&ex-px>=0)||(px-ex<=30&&px-ex>=0))
if(ey-py<=24)
life--;
if(px+(nowCol+2)*16-mappx>=74*16)
this.gameState=PassLevel;
break;
}
case GAMEWIN:
{
ppx+=4;
if(ppx>95)
{ppx=95;
isrun=true;
}
else{RoleNow++;}
if(RoleNow>6)
{
RoleNow=0;
}
break;
}
}
//控制FPS
passtime=System.currentTimeMillis()-starttime;
if(100-passtime>=0)
try{Thread.sleep(100-passtime);}catch(Exception e){}
this.repaint();
this.serviceRepaints();
}
}
public boolean checkDown(){
nowrow1=(py+24)/16-2;
nowcol1=(px+11-mappx)/16+nowCol;
if(nowrow1<=0)nowrow1=0;
if(nowrow1>=15)nowrow1=15;
if(nowcol2>=68)nowcol1=68;
boolean can=false;
// System.out.println(" map[r][c]"+map[nowrow][nowcol]);
//System.out.println(" [r]"+nowrow1);
//System.out.println(" [c]"+nowcol1);
for(int i=0;i<canCro.length;i++)
{
//System.out.println(" value:"+canCro[i]);
// System.out.println(" map[r][c]"+map[nowrow][nowcol]);
if(map[nowrow1][nowcol1]==canCro[i])
{
return true;
}
}
return false;
}
public boolean checkPro(int m,int n){
nowrow2=(py+24)/16-3-m;
nowcol2=(px-mappx)/16+nowCol+n;
if(nowrow2<=0)nowrow2=0;
if(nowrow2>=15)nowrow2=15;
if(nowcol2>=68)nowcol2=68;
// System.out.println(" map[r][c]"+map[nowrow2][nowcol2]);
//System.out.println(" pp[r]"+nowrow2);
//System.out.println(" pp[c]"+nowcol2);
for(int i=0;i<canPro.length;i++)
{
if(map[nowrow2][nowcol2]==canPro[i])
{
return true;
}
}
return false;
}
public void keyPressed(int n)
{ int k=this.getGameAction(n);
switch(n)
{
case 53:
if(fire==false)
{
if(d==1)
{ax=px+16;
ay=py+8;
pp=0;
}
if(d==3)
{ax=px-34;
ay=py+8;
pp=1;}
fire=true;
}
break;
case 52:
if(dir!=3&&dir!=4&&dir!=5&&dir!=6) dir=1;//左
break;
case 54:
if(dir!=3&&dir!=4&&dir!=5&&dir!=6) dir=2;//右
break;
case 50:
if(dir!=3&&dir!=4&&dir!=5&&dir!=6)dir=3;//上
break;
case 56:
if(dir!=3&&dir!=4&&dir!=5&&dir!=6)dir=4;//下
break;
case 51:
if(dir!=3&&dir!=4&&dir!=5&&dir!=6)dir=5;//下
break;
case 49:
if(dir!=3&&dir!=4&&dir!=5&&dir!=6)dir=6;//下
break;
}
}
public void keyReleased(int n)
{
int k=this.getGameAction(n);
switch(k)
{case LEFT:
if(dir!=3&&dir!=4) dir=0;break;
case RIGHT:
if(dir!=3&&dir!=4) dir=0;break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -