📄 engine.java
字号:
import javax.microedition.lcdui.*;
public class Engine
{
public Engine()
{
}
Map map;//地图的对象(游戏中仅存在一个地图(游戏场景))
Role role;//主角类的对象(ACT类游戏通常只有一个游戏主角)
Enemy[] enemy;//敌人列表
Trap[] trap;
boolean isPass;//过关条件
/**
* 游戏开始前的初始化。
* 包括加载资源、地图、主角、敌人、道具等的初始化位置等等信息
*/
protected void init(){
Data.getFrameItemIndex();//获得所有对象的所有动画的帧数列表
Data.getnpcItemDataSize();//获得动画数据总所有动画的尺寸,以做碰撞
Data.loadRes();
map = new Map();
map.init();
role = new Role(this);
role.init();
initEnemy();//初始化该关卡内的所有敌人
initTrap();//初始化该关卡内的所有道具、陷阱等信息
isPass = false;
}
/**
* 整体游戏中的显示部分
* @param g Graphics
*/
protected void drawGame(Graphics g){
map.drawMap(g);
role.drawRole(g);
for(int i = 0;i < enemy.length;i ++){
if(enemy[i].isDead) continue;
enemy[i].drawEnemy(g);
}
for(int i = 0;i < trap.length;i ++){
trap[i].drawTrap(g);
}
drawHp(g);
}
/**
* 所有游戏中的逻辑部分
*/
protected void runGame(){
role.roleLogic();
map.setScreenMode(role.x,role.y,role.isLeft);//根据主角位置设置视窗的显示位置
for (int i = 0; i < enemy.length; i++)
{
if (enemy[i].isDead)continue;
enemy[i].move();
}
for (int i = 0; i < trap.length; i++)
{
trap[i].move();
}
}
/**
* 初始化所有敌人的信息
*/
void initEnemy(){
short[][]data = {
{1,10*Map.cellWidth,11*Map.cellHeight,50,5,0,0},
{2,16*Map.cellWidth,7*Map.cellHeight,50,5,0,0},
{3,30*Map.cellWidth,9*Map.cellHeight,50,5,0,0},
};
enemy = new Enemy[data.length];
enemy[0] = new Enemy(this,data[0]);
enemy[1] = new Enemy(this,data[1]);
enemy[2] = new Enemy(this,data[2]);
//列表顺序:站立、行走、追击、攻击、受伤、死亡
enemy[0].setActionIndex(new byte[]{0,1,1,2,4,6});
enemy[1].setActionIndex(new byte[]{0,1,1,2,3,5});
enemy[2].setActionIndex(new byte[]{0,1,1,1,2,3});
}
/**
* 初始化所有的道具信息
*/
void initTrap(){
short[][]data = {
{1,5,17*Map.cellWidth+(Map.cellWidth/2),13*Map.cellHeight,0,0,0,0},
{0,4,15*Map.cellWidth+(Map.cellWidth/2),13*Map.cellHeight,0,0,0,0},
// {0,4,17*Map.cellWidth+(Map.cellWidth/2),13*Map.cellHeight,0,0,0,0},
{0,4,19*Map.cellWidth+(Map.cellWidth/2),13*Map.cellHeight,0,0,0,0},
};
trap = new Trap[data.length];
for(int i = 0;i < trap.length;i ++)
trap[i] = new Trap(this,data[i]);
}
/**
* 显示主角的血条
*/
void drawHp(Graphics g){
Tools.drawNpcItemData(g,7,0,0,Map.leftTopX,Map.leftTopY,true);
g.setColor(0xff0000);
g.fillRect(60,20,role.HP*35/100,4);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -