📄 canvas_main.java
字号:
case 53:
case -5:
{
if(isSelBullet)
isSelBullet=false;
else if(!isDetect)
{
for(byte i=0;i<Class_Map.ownTankNum;i++)
{
if(ownTank[i].isActive&&Class_Camera.x==Class_Camera.x0&&Class_Camera.y==Class_Camera.y0)
{
//设置开火
ownTank[i].setFire(lm);
break;
}
}
}
break;
}
}
}
public void collides()
{
for(byte i=0;i<Class_Map.ownTankNum;i++)
{
if(ownTank[i].collidesWith(Class_Map.barrierLayer,false))
ownTank[i].move(-ownTank[i].dX,-ownTank[i].dY);
if(ownTank[i].bullet.collidesWith(Class_Map.barrierLayer,true))
{
if(curBulType!=1&&curBulType!=2)
{
ownTank[i].bullet.delete(lm);
bulletBurst.showBurst(ownTank[i].bullet,lm);
}
}
for(byte j=0;j<Class_Map.ownTankNum;j++)
{
if(ownTank[i].bullet.collidesWith(ownTank[j],false)&&i!=j)
{
ownTank[i].bullet.delete(lm);
bulletBurst.showBurst(ownTank[i].bullet,lm);
if(curBulType==2)
{
if(ownTank[j].HP<=0)
aliveOwnTankCount++;
ownTank[j].HP+=ownTank[i].bullet.damage;
}else if(ownTank[j].HP>0)
{
ownTank[j].HP-=ownTank[i].bullet.damage;
//如果敌方坦克死亡,则敌方剩余坦克减1
if(ownTank[j].HP<=0)
aliveOwnTankCount--;
}
}
}
for(byte j=0;j<Class_Map.enemyTankNum;j++)
{
if(ownTank[i].bullet.collidesWith(enemyTank[j],false))
{
ownTank[i].bullet.delete(lm);
bulletBurst.showBurst(ownTank[i].bullet,lm);
if(curBulType==2)
{
if(enemyTank[j].HP<=0)
aliveEnemyTankCount++;
enemyTank[j].HP+=ownTank[i].bullet.damage;
}else if(enemyTank[j].HP>0)
{
enemyTank[j].HP-=ownTank[i].bullet.damage;
if(enemyTank[j].HP<=0)
aliveEnemyTankCount--;
}
}
}
}
for(byte i=0;i<Class_Map.enemyTankNum;i++)
{
if(enemyTank[i].collidesWith(Class_Map.barrierLayer,false))
{
enemyTank[i].move(-enemyTank[i].dX,-enemyTank[i].dY);
}
if(enemyTank[i].bullet.collidesWith(Class_Map.barrierLayer,false))
{
if(curBulType!=1&&curBulType!=2)
{
enemyTank[i].bullet.delete(lm);
bulletBurst.showBurst(enemyTank[i].bullet,lm);
}
}
for(byte j=0;j<Class_Map.enemyTankNum;j++)
{
if(enemyTank[i].bullet.collidesWith(enemyTank[j],false)&&i!=j)
{
enemyTank[i].bullet.delete(lm);
bulletBurst.showBurst(enemyTank[i].bullet,lm);
if(curBulType==2)
{
if(enemyTank[j].HP<=0)
aliveEnemyTankCount++;
enemyTank[j].HP+=ownTank[i].bullet.damage;
}else if(enemyTank[j].HP>0)
{
enemyTank[j].HP-=ownTank[i].bullet.damage;
if(enemyTank[j].HP<=0)
aliveEnemyTankCount--;
}
}
}
for(byte j=0;j<Class_Map.ownTankNum;j++)
{
if(enemyTank[i].bullet.collidesWith(ownTank[j],false))
{
enemyTank[i].bullet.delete(lm);
bulletBurst.showBurst(enemyTank[i].bullet,lm);
if(curBulType==2)
{
if(ownTank[j].HP<=0)
aliveOwnTankCount++;
ownTank[j].HP+=ownTank[i].bullet.damage;
}else if(ownTank[j].HP>0)
{
ownTank[j].HP-=ownTank[i].bullet.damage;
//如果敌方坦克死亡,则敌方剩余坦克减1
if(ownTank[j].HP<=0)
aliveOwnTankCount--;
}
}
}
}
}
//回合轮换的方法
public void setTurnChange()
{
//如果要更换回合
if(isTurnChange)
{
//取消观察模式
isDetect=false;
//取消炮弹选择模式
isSelBullet=false;
//重置当前炮弹类型
curBulType=0;
//如果是我方回合
if(!isEnemyTurn)
{
//关闭回合更换开关
isTurnChange=false;
//取消我方活动索引坦克活动权限
ownTank[iOwnTankActive].isActive=false;
//产生AI随机数
AI=(byte) Math.abs(rd.nextInt()%10);
//敌方活动索引坦克进行回合初始化
enemyTank[iEnemyTankActive].turnInit();
//回合时间计数器重置
turnTimeCount=0;
//我方坦克活动索引加1,即下一辆将获得索引
iOwnTankActive++;
//正式交换回合
isEnemyTurn=!isEnemyTurn;
}
//否则(意思与上面差不多,不重复了)
else
{
isTurnChange=false;
curBulType=0;
enemyTank[iEnemyTankActive].isActive=false;
ownTank[iOwnTankActive].turnInit();
turnTimeCount=0;
iEnemyTankActive++;
isEnemyTurn=!isEnemyTurn;
}
}
//如果索引到达最后,则跳转到第一辆坦克位置
if(iOwnTankActive==Class_Map.ownTankNum)
{
iOwnTankActive=0;
}
if(iEnemyTankActive==Class_Map.enemyTankNum)
{
iEnemyTankActive=0;
}
//如果敌方坦克死光了,则返回选关画面,并提供下一关的选择权限
if(aliveEnemyTankCount<=0)
{
curBulType=0;
isThreadCancel=true;
if(Class_Map.ID==Class_Map.IDMax&&Class_Map.IDMax<4)
Class_Map.IDMax++;
mainMIDlet.dis.setCurrent(new Canvas_StageSelect(mainMIDlet));
Canvas_StageSelect.isThreadCancel=false;
}
if(aliveOwnTankCount<=0)
{
curBulType=0;
isThreadCancel=true;
mainMIDlet.dis.setCurrent(new Canvas_StageSelect(mainMIDlet));
Canvas_StageSelect.isThreadCancel=false;
}
}
public void setEnemyTankAI()
{
//如果敌方活动索引坦克子弹不可见并且摄象机已经重置
if(!enemyTank[iEnemyTankActive].bullet.isVisible()&&Class_Camera.x==Class_Camera.x0&&Class_Camera.y==Class_Camera.y0)
{
//活动状态计数器开始累加
AICount++;
//如果活动状态计数器小于10,则处于移动状态
if(AICount<=10)
{
if(AI%2==0)
enemyTank[iEnemyTankActive].direction=1;
else
enemyTank[iEnemyTankActive].direction=2;
enemyTank[iEnemyTankActive].setMove();
}
//否则活动状态计数器重置,并且开火
else if(AICount<=20)
{
if(AI>4&&enemyTank[AI%Class_Map.enemyTankNum].HP<enemyTank[AI%Class_Map.enemyTankNum].HPMax&&enemyTank[iEnemyTankActive].bulletCount[2]>0&&iEnemyTankActive!=(AI%Class_Map.enemyTankNum))
{
curBulType=2;
enemyTank[iEnemyTankActive].lockTarget(enemyTank[AI%Class_Map.enemyTankNum],AI);
}else
{
if(enemyTank[iEnemyTankActive].bulletCount[AI%4]>0)
{
if(AI%4!=2)
{
curBulType=(byte) (AI%4);
}else
curBulType=1;
}else
curBulType=0;
enemyTank[iEnemyTankActive].lockTarget(ownTank[AI%Class_Map.ownTankNum],AI);
}
}
else
{
AICount=0;
enemyTank[iEnemyTankActive].setBulSel();
enemyTank[iEnemyTankActive].setFire(lm);
}
}
}
//处理观察模式的方法
public void setCameraMove()
{
int keyCode=getKeyStates();
//如果处于观察模式,则根据按键响应来控制摄象机移动
if(isDetect)
{
if((keyCode&UP_PRESSED)!=0)
{
if(Class_Camera.y<10)
Class_Camera.y=0;
else
Class_Camera.y-=10;
}else if((keyCode&DOWN_PRESSED)!=0)
{
if(Class_Camera.y>Class_Map.height-Class_Camera.height-10)
Class_Camera.y=(short) (Class_Map.height-Class_Camera.height);
else
Class_Camera.y+=10;
}else if((keyCode&LEFT_PRESSED)!=0)
{
if(Class_Camera.x<10)
Class_Camera.x=0;
else
Class_Camera.x-=10;
}else if((keyCode&RIGHT_PRESSED)!=0)
{
if(Class_Camera.x>Class_Map.width-Class_Camera.width-10)
Class_Camera.x=(short) (Class_Map.width-Class_Camera.width);
else
Class_Camera.x+=10;
}
}
//如果退出观察模式,则重置摄象机
else Class_Camera.rePut();
}
//显示屏幕信息的方法
public void showMessage()
{
g.setFont(Font.getFont(0,1,0));
//显示敌方坦克生命
for(byte i=0;i<Class_Map.enemyTankNum;i++)
{
if(Class_Camera.isShow(enemyTank[i])&&enemyTank[i].HP>0)
{
g.setColor(255,0,0);
g.drawString(""+enemyTank[i].HP,enemyTank[i].getX()+enemyTank[i].getWidth()-Class_Camera.x+2,enemyTank[i].getY()+enemyTank[i].getHeight()-Class_Camera.y-13,0);
}
}
for(byte i=0;i<Class_Map.ownTankNum;i++)
{
//画坦克旁边的生命数值
if(Class_Camera.isShow(ownTank[i])&&ownTank[i].HP>0)
{
g.setColor(255,255,255);
g.drawString(""+ownTank[i].HP,ownTank[i].getX()+ownTank[i].getWidth()-Class_Camera.x+2,ownTank[i].getY()+ownTank[i].getHeight()-Class_Camera.y-13,0);
}
}
for(byte i=0;i<Class_Map.ownTankNum;i++)
{
if(ownTank[i].isActive)
{
//如果处于瞄准状态,则显示瞄准角度
if(ownTank[i].isAim)
{
g.setColor(252,255,2);
g.drawString(""+ownTank[i].aimAngle,ownTank[i].getX()-Class_Camera.x+4,ownTank[i].getY()-Class_Camera.y-15,0);
}
//如果处于蓄力状态,则显示力量槽
if(ownTank[i].isCharge)
{
g.setColor(255,255,255);
g.drawRoundRect(ownTank[i].getX()-Class_Camera.x,ownTank[i].getY()-Class_Camera.y-15,ownTank[i].getWidth(),4,2,2);
g.setColor(198,255,0);
g.fillRoundRect(ownTank[i].getX()-Class_Camera.x+1,ownTank[i].getY()-Class_Camera.y-14,ownTank[i].chargeV*ownTank[i].getWidth()/160,3,1,1);
}
//如果处于观察模式,则出现提示框
if(isDetect)
{
g.setColor(0,0,255);
g.drawRoundRect(Class_Camera.width/2-41,19,82,21,10,10);
g.setColor(0,255,255);
g.drawRoundRect(Class_Camera.width/2-40,20,80,20,10,10);
g.setColor(50,125,255);
g.fillRoundRect(Class_Camera.width/2-39,21,78,19,10,10);
g.setColor(130,245,255);
g.drawString("观察模式中...",(Class_Camera.width-Font.getFont(0,1,0).stringWidth("观察模式中..."))/2,22,0);
}
//如果处于炮弹选择模式,则出现炮弹选择框
if(isSelBullet)
{
g.setColor(0,0,255);
g.drawRoundRect(Class_Camera.width-91,Class_Camera.height-101,91,101,20,20);
g.setColor(0,255,255);
g.drawRoundRect(Class_Camera.width-90,Class_Camera.height-100,90,100,20,20);
g.setColor(50,125,255);
g.fillRoundRect(Class_Camera.width-89,Class_Camera.height-99,89,99,20,20);
g.setColor(130,245,255);
g.drawString(" 名称 剩余",Class_Camera.width-80,Class_Camera.height-95,0);
g.drawString("普通弹 "+ownTank[i].bulletCount[0],Class_Camera.width-80,Class_Camera.height-80,0);
g.drawString("穿甲弹 "+ownTank[i].bulletCount[1],Class_Camera.width-80,Class_Camera.height-65,0);
g.drawString("回复弹 "+ownTank[i].bulletCount[2],Class_Camera.width-80,Class_Camera.height-50,0);
g.drawString("强化弹 "+ownTank[i].bulletCount[3],Class_Camera.width-80,Class_Camera.height-35,0);
g.setColor(255,255,255);
g.drawRoundRect(Class_Camera.width-83,Class_Camera.height-95+Font.getFont(0,1,0).getHeight()+15*curBulType,40,15,2,2);
}
break;
}
}
g.setFont(Font.getFont(0,0,16));
//显示回合时间
g.setColor(255,255,255);
g.drawString("回合时间:"+turnTimeCount/10+"/20",10,10,0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -