📄 canvas_main.java
字号:
import java.io.IOException;
import java.util.Random;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.LayerManager;
public class Canvas_Main extends GameCanvas
{
private MIDlet_Main mainMIDlet;
private Graphics g;
private Random rd;
private Class_Map map;
private Image imgBulletBurst,imgAimSign;
private static Image[] imgTank;
private LayerManager lm;
//是否处于观察模式
boolean isDetect;
//是否处于弹药选择模式
private boolean isSelBullet;
//当前炮弹类型
static byte curBulType;
//线程是否终止
static boolean isThreadCancel;
//当前是否敌方回合
private boolean isEnemyTurn;
//我方剩余坦克数量
private byte aliveOwnTankCount;
//敌方剩余坦克数量
private byte aliveEnemyTankCount;
//我方坦克
static Class_Tank[] ownTank;
//敌方坦克
static Class_Tank[] enemyTank;
//炮弹爆炸火花
private Class_Burst bulletBurst;
//瞄准器
private Class_AimSign aimSign;
//AI坦克行为变化计数器
private byte AICount;
byte AI;
//回合持续时间记数
private short turnTimeCount;
//我方活动坦克索引 敌方活动坦克索引
private byte iOwnTankActive,iEnemyTankActive;
//爆炸火花是否消失
static boolean isTurnChange;
Thread t1;
protected Canvas_Main(MIDlet_Main mid)
{
super(false);
setFullScreenMode(true);
mainMIDlet=mid;
rd=new Random();
g=getGraphics();
imgTank=new Image[6];
try {
imgBulletBurst=Image.createImage("/imgBulletBurst.png");
imgAimSign=Image.createImage("/imgAimSign.png");
imgTank[0]=Image.createImage("/imgCarrot.png");
imgTank[1]=Image.createImage("/imgCannon.png");
imgTank[2]=Image.createImage("/imgCatapult.png");
imgTank[3]=Image.createImage("/imgMulti.png");
imgTank[4]=Image.createImage("/imgDuke.png");
imgTank[5]=Image.createImage("/imgIon.png");
} catch (IOException e1) {
e1.printStackTrace();
}
lm=new LayerManager();
map=new Class_Map(lm,Class_Map.ID);
bulletBurst=new Class_Burst(imgBulletBurst,(byte)16,(byte)16);
aimSign=new Class_AimSign(imgAimSign,(byte)8,(byte)8);
ownTank=new Class_Tank[Class_Map.ownTankNum];
for(byte i=0;i<Class_Map.ownTankNum;i++)
{
ownTank[i]=new Class_Tank(imgTank[i%3],(byte)22,(byte)16,(byte)(i%3));
//根据出生点ID来设置坦克初始位置
ownTank[i].CPID=ownTank[i].setCP((byte) (i*2));
}
enemyTank=new Class_Tank[Class_Map.enemyTankNum];
for(byte i=0;i<Class_Map.enemyTankNum;i++)
{
enemyTank[i]=new Class_Tank(imgTank[i%3+3],(byte)22,(byte)16,(byte)(i%3+3));
enemyTank[i].CPID=enemyTank[i].setCP((byte) (i*2+1));
}
//从地图信息中读取数值来初始化存活坦克数量
aliveOwnTankCount=Class_Map.ownTankNum;
aliveEnemyTankCount=Class_Map.enemyTankNum;
t1=new Thread()
{
public void run()
{
if(!isThreadCancel)
{
long start=System.currentTimeMillis();
//处理回合轮换
setTurnChange();
for(byte i=0;i<Class_Map.ownTankNum;i++)
{
//处理我方坦克在屏幕中
ownTank[i].setView(lm);
ownTank[i].setLimit();
//如果我方坦克处于活动状态
if(ownTank[i].isActive)
{
//如果该坦克没死
if(ownTank[i].HP>0)
{
turnTimeCount++;
if(turnTimeCount>200)isTurnChange=true;
aimSign.add(lm);
aimSign.setMove(ownTank[i]);
ownTank[i].setMove();
Class_Camera.setFollow(ownTank[i]);
ownTank[i].setBulSel();
ownTank[i].setAim(lm);
ownTank[i].setCharge();
}
//否则结束当前回合
else
isTurnChange=true;
}
if(ownTank[i].bullet.isVisible())
{
//处理子弹移动
ownTank[i].bullet.setMove(ownTank[i],lm);
Class_Camera.setFollow(ownTank[i].bullet);
}
}
for(byte i=0;i<Class_Map.enemyTankNum;i++)
{
enemyTank[i].setView(lm);
enemyTank[i].setLimit();
if(enemyTank[i].isActive)
{
if(enemyTank[i].HP>0)
{
turnTimeCount++;
if(turnTimeCount>200)isTurnChange=true;
aimSign.add(lm);
aimSign.setMove(enemyTank[i]);
setEnemyTankAI();
Class_Camera.setFollow(enemyTank[i]);
ownTank[i].setBulSel();
enemyTank[i].setAim(lm);
}else
isTurnChange=true;
}
if(enemyTank[i].bullet.isVisible())
{
enemyTank[i].isActive=false;
enemyTank[i].bullet.setMove(enemyTank[i],lm);
Class_Camera.setFollow(enemyTank[i].bullet);
}
}
//处理炮弹爆炸火花
bulletBurst.setBurst(lm);
//处理碰撞探测
collides();
//处理摄象机移动
setCameraMove();
lm.setViewWindow(Class_Camera.x,Class_Camera.y,Class_Camera.width,Class_Camera.height);
lm.paint(g,0,0);
long end=System.currentTimeMillis();
showMessage();
flushGraphics();
int time=(int)(end-start);
// System.out.println(time);
try {
if(time<80)
Thread.sleep(80-time);
} catch (InterruptedException e) {
e.printStackTrace();
}
mainMIDlet.dis.callSerially(this);
}
}
};
t1.start();
}
protected void keyPressed(int keyCode)
{
switch(keyCode)
{
case -3:
case 52:
{
if(isSelBullet)
{
if(curBulType==0)
curBulType=3;
else curBulType--;
}else if(!isDetect&&Class_Camera.x==Class_Camera.x0&&Class_Camera.y==Class_Camera.y0)
{
for(byte i=0;i<Class_Map.ownTankNum;i++)
{
if(ownTank[i].isActive)
{
ownTank[i].isAim=false;
ownTank[i].direction=1;
break;
}
}
}
break;
}
case -4:
case 54:
{
if(isSelBullet)
{
if(curBulType==3)
curBulType=0;
else curBulType++;
}else if(!isDetect&&Class_Camera.x==Class_Camera.x0&&Class_Camera.y==Class_Camera.y0)
for(byte i=0;i<Class_Map.ownTankNum;i++)
{
if(ownTank[i].isActive)
{
ownTank[i].isAim=false;
ownTank[i].direction=2;
break;
}
}
break;
}
case 56:
case -1:
{
if(isSelBullet)
{
if(curBulType==0)
curBulType=3;
else curBulType--;
}else if(!isDetect&&Class_Camera.x==Class_Camera.x0&&Class_Camera.y==Class_Camera.y0)
{
for(byte i=0;i<Class_Map.ownTankNum;i++)
{
if(ownTank[i].isActive)
{
ownTank[i].isAim=true;
ownTank[i].aimRotaDir=1;
break;
}
}
}
break;
}
case 50:
case -2:
{
if(isSelBullet)
{
if(curBulType==3)
curBulType=0;
else curBulType++;
}else if(!isDetect&&Class_Camera.x==Class_Camera.x0&&Class_Camera.y==Class_Camera.y0)
{
for(byte i=0;i<Class_Map.ownTankNum;i++)
{
if(ownTank[i].isActive)
{
ownTank[i].isAim=true;
ownTank[i].aimRotaDir=2;
break;
}
}
}
break;
}
case 53:
case -5:
{
if(!isDetect&&!isSelBullet&&Class_Camera.x==Class_Camera.x0&&Class_Camera.y==Class_Camera.y0)
{
for(byte i=0;i<Class_Map.ownTankNum;i++)
{
if(ownTank[i].isActive)
{
ownTank[i].isAim=false;
ownTank[i].isCharge=true;
break;
}
}
}
break;
}
case -7:
{
isThreadCancel=true;
Canvas_StageSelect.isThreadCancel=false;
mainMIDlet.dis.setCurrent(new Canvas_StageSelect(mainMIDlet));
break;
}
case 49:
{
if(!isSelBullet)
{
isDetect=!isDetect;
for(byte i=0;i<Class_Map.ownTankNum;i++)
{
if(ownTank[i].isActive)
{
ownTank[i].isAim=false;
ownTank[i].isCharge=false;
break;
}
}
}
break;
}
case 51:
{
if(!isDetect)
{
isSelBullet=!isSelBullet;
for(byte i=0;i<Class_Map.ownTankNum;i++)
{
if(ownTank[i].isActive)
{
ownTank[i].isAim=false;
ownTank[i].isCharge=false;
break;
}
}
}
break;
}
}
}
protected void keyReleased(int keyCode)
{
switch(keyCode)
{
case 52:
case -3:
case 54:
case -4:
{
for(byte i=0;i<Class_Map.ownTankNum;i++)
{
if(ownTank[i].isActive)
{
ownTank[i].direction=0;
break;
}
}
break;
}
case 56:
case -1:
case 50:
case -2:
{
for(byte i=0;i<Class_Map.ownTankNum;i++)
{
if(ownTank[i].isActive)
{
ownTank[i].aimRotaDir=0;
break;
}
}
break;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -