📄 battle.java
字号:
import java.util.Random;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.lcdui.game.TiledLayer;
class Battle
{
private Random rnd;
private Creature me,enemies[];
private ItemManager iMgr;
private Sprite meS,enemiesS[],all[];
private Image myImg,enemyImg,bg,tarImg;
private boolean isEnd,roundOff,fail;
private final int NormalS[]={0},HertS[]={0,4,5},AttackS[]={0,1,2,3},Attack=1,Ability=2,Menu=0;
private TiledLayer sbg;
private int select,state,target,exp,num,money;
private String string="";
private Order orders[];
private Round round;
Battle(Creature me,ItemManager iMgr)
{
rnd=new Random();
myImg=Resourse.readImage(Resourse.ATTACK);
tarImg=Resourse.readImage(Resourse.TARGET);
this.me=me;
this.iMgr=iMgr;
sbg=new TiledLayer(10,7,Resourse.readImage(Resourse.BATTLE),16,16);
for(int i=0;i<5;i++)
{
sbg.setCell(i*2,0,4);
sbg.setCell(i*2,1,2);
sbg.setCell(i*2,2,5);
sbg.setCell(i*2,3,8);
sbg.setCell(i*2,4,1);
sbg.setCell(i*2,5,1);
sbg.setCell(i*2,6,1);
sbg.setCell(i*2+1,0,7);
sbg.setCell(i*2+1,1,3);
sbg.setCell(i*2+1,2,6);
sbg.setCell(i*2+1,3,9);
sbg.setCell(i*2+1,4,1);
sbg.setCell(i*2+1,5,1);
sbg.setCell(i*2+1,6,1);
}
}
void init(int mapId)
{
isEnd=false;
num=Math.abs(rnd.nextInt()%4)+1;
enemies=new Creature[num];
enemiesS=new Sprite[num];
for(int i=0;i<num;i++)
{
enemies[i]=new Creature(Math.abs(rnd.nextInt()%2));
enemiesS[i]=new Sprite(enemies[i].eImg,40,40);
if(i==0)
enemiesS[i].setPosition(0,40);
else if(i==1)
enemiesS[i].setPosition(0,70);
else if(i==2)
enemiesS[i].setPosition(40,40);
else if(i==3)
enemiesS[i].setPosition(40,70);
}
meS=new Sprite(myImg,40,40);
meS.setPosition(110,50);
roundOff=true;
state=Menu;
target=0;
exp=0;
select=0;
money=0;
orders=new Order[num+1];
}
void drawBattle(Graphics g)
{
g.setColor(0x00000000);
g.fillRect(0,0,160,160);
g.setColor(0x00FFFFFF);
sbg.paint(g);
for(int i=0;i<enemies.length;i++)
{
if(!enemies[i].dead)
enemiesS[i].paint(g);
}
meS.paint(g);
if(roundOff)
{
g.drawRoundRect(0,115,40,44,5,5);
g.drawString("攻击",10,115,0);
g.drawString("技能",10,130,0);
g.drawString("逃跑",10,145,0);
g.drawRoundRect(42,115,116,44,5,5);
if(state==Menu)
{
g.drawString(me.name,45,115,0);
g.drawString("HP "+me.hp+" MP "+me.mp,90,115,0);
g.fillTriangle(2,115+select*15,2,130+select*15,10,123+select*15);
}
else if(state==Attack)
{
if(!enemies[target].dead)
{
g.drawImage(tarImg,enemiesS[target].getX()+10,enemiesS[target].getY()+10,0);
g.drawString(enemies[target].name,45,115,0);
g.drawString("HP "+enemies[target].hp+" MP "+enemies[target].mp,90,115,0);
}
}
}
else
{
g.drawRoundRect(0,115,158,44,5,5);
g.drawString(string,5,115,0);
}
}
boolean isEnd()
{
return isEnd;
}
boolean isFail()
{
return fail;
}
void up()
{
if(state==Menu)
select=(select==0?0:select-1);
else if(state==Attack)
{
target=(target<=0?0:target-1);
}
}
void down()
{
if(state==Menu)
select=(select==2?2:select+1);
else if(state==Attack)
{
target=(target>=enemies.length-1?0:target+1);
}
}
void left()
{
}
void right()
{
}
void select()
{
if(roundOff)
{
if(state==Menu)
{
if(select==0)
state=Attack;
else if(select==1)
state=Ability;
else if(select==2)
isEnd=true;
}
else if(state==Attack)
{
orders[0]=new Order(me,enemies[target],meS,enemiesS[target],true);
for(int i=0;i<enemies.length;i++)
{
orders[i+1]=new Order(enemies[i],me,enemiesS[i],meS,false);
}
roundOff=false;
round=new Round();
round.start();
}
}
}
void back()
{
if(roundOff)
{
if(state!=Menu)
state=Menu;
}
}
boolean hitted(Creature a,Creature b)
{
if(a.miss>=b.miss)
return true;
else
{
if(Math.abs(rnd.nextInt()%b.miss)<a.miss)
return true;
else
return false;
}
}
class Order
{
Creature a,b;
Sprite sa,sb;
boolean isMe;
Order(Creature a,Creature b,Sprite sa,Sprite sb,boolean isMe)
{
this.a=a;
this.b=b;
this.sa=sa;
this.sb=sb;
this.isMe=isMe;
}
}
class Round extends Thread
{
private int order,threat,percent;
public void run()
{
order=0;
try{
while(order<orders.length)
{
if(!orders[order].a.dead&&!orders[order].b.dead)
{
orders[order].sa.setFrameSequence(AttackS);
string=orders[order].a.name+"发动了攻击.";
sleep(100);
orders[order].sa.nextFrame();
sleep(200);
orders[order].sa.nextFrame();
sleep(200);
orders[order].sa.nextFrame();
sleep(100);
orders[order].sa.setFrameSequence(NormalS);
if(hitted(orders[order].a,orders[order].b))
{
orders[order].sb.setFrameSequence(HertS);
percent=Math.abs(rnd.nextInt()%6)+8;
if(percent==13)
{
threat=(orders[order].a.attack*2-orders[order].b.defence>=1?orders[order].a.attack*2-orders[order].b.defence:1);
string=orders[order].b.name+"受到了会心一击.";
}
else
{
threat=(orders[order].a.attack*percent/10-orders[order].b.defence>=1?orders[order].a.attack*percent/10-orders[order].b.defence:1);
string=orders[order].b.name+"受到了"+threat+"点的伤害.";
}
sleep(100);
orders[order].sb.nextFrame();
orders[order].sb.move(3,0);
sleep(100);
orders[order].sb.nextFrame();
orders[order].sb.move(-6,0);
sleep(100);
orders[order].sb.nextFrame();
orders[order].sb.move(3,0);
sleep(700);
}
else
{
string=orders[order].b.name+"成功的躲闪了攻击.";
sleep(1000);
threat=0;
}
orders[order].sb.setFrameSequence(NormalS);
orders[order].b.hp-=threat;
if(orders[order].b.hp<=0)
{
string=orders[order].b.name+"被打倒了.";
sleep(1000);
exp+=orders[order].b.exp;
money+=orders[order].b.money;
orders[order].b.dead=true;
if(!orders[order].isMe)
{
string="请再好好努力吧.";
sleep(1000);
fail=true;
isEnd=true;
order=orders.length;
}
}
}
int e=0;
for(int i=0;i<enemies.length;i++)
{
if(enemies[i].dead)
e+=1;
}
if(e>=enemies.length)
{
string="战斗胜利.";
sleep(1000);
string=orders[order].a.name+"获得了"+exp+"点经验值.";
sleep(1000);
string=orders[order].a.name+"获得了"+money+"元金钱.";
orders[order].a.exp+=exp;
iMgr.add(new Item(money+100));
sleep(1000);
if(orders[order].a.exp>=orders[order].a.nextExp)
{
orders[order].a.levelup(orders[order].a.level+1);
string=orders[order].a.name+"升级了.";
sleep(1000);
}
isEnd=true;
order=orders.length;
}
string="";
sleep(100);
order++;
}
roundOff=true;
state=Menu;
for(int i=0;i<num;i++)
{
if(!enemies[i].dead)
{
target=i;
i=num;
}
}
}catch(InterruptedException e){}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -