📄 fightscreen.java
字号:
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
public class FightScreen extends GameCanvas
implements Runnable
{
private boolean isFighting = false;
private Display display;
private GameScreen gameScreen;
private FightCalc fightCalc;
private boolean heroFirst;
private Graphics g;
private HeroSprite hero;
//hold the fighting hero and fighting orge
//i think they should be place in the GameScreen class
//because this can reduce the resource
//when the thread start,the two sprite must be created
//if place they in GameScreen,we won't create every times
/*private Sprite fightingHero;
private Sprite fightingOrge;
private LayerManager layerManager;*/
//hold the bout number
private int boutNum;
private int orgeHp;
private int orgeAttack;
private int orgeDefend;
private int orgeMoney;
private int orgeExperience;
private int heroDamagePerBout;
private int orgeDamagePerBout;
private int heroRemainHp;
private int heroSrcX = 0,heroSrcY = 0,
heroX,heroY,
hitSrcX = 192,hitSrcY = 0,
orgeSrcX,orgeSrcY,
orgeX,orgeY,
w = GameMap.TILE_WIDTH;
private int standFrameNum = 0;
private int attackFrameNum = 1;
private int defendFrameNum = 2;
private int orgeType;
private Image borderImage = GameScreen.getImage(GameScreen.IMAGE_BORDER4);
private Image orgeImage = GameScreen.getImage(GameScreen.IMAGE_MAP);
private Image heroImage = GameScreen.getImage(GameScreen.IMAGE_HERO);
public FightScreen(Display display,GameScreen gameScreen,
FightCalc fightCalc,HeroSprite hero,int type)
{
super(true);
this.display = display;
this.gameScreen = gameScreen;
this.setFullScreenMode(true);
this.fightCalc = fightCalc;
this.hero = hero;
this.orgeType = type;
g = getGraphics();
int[] orgeAttr = fightCalc.getOrgeAttr(orgeType);
orgeHp = orgeAttr[FightCalc.HP];
orgeAttack = orgeAttr[FightCalc.ATTACK];
orgeDefend = orgeAttr[FightCalc.DEFEND];
orgeMoney = orgeAttr[FightCalc.MONEY];
orgeExperience = orgeAttr[FightCalc.EXPERIENCE];
int[] fightParam = fightCalc.getFightParam();
boutNum = fightParam[FightCalc.BOUT_NUM];
heroDamagePerBout = fightParam[FightCalc.HERO_DAMAGE_PER_BOUT];
orgeDamagePerBout = fightParam[FightCalc.ORGE_DAMAGE_PER_BOUT];
heroRemainHp = hero.getHp() - heroDamagePerBout * boutNum;
int[] srcXY = calcXY(orgeType - 1);
orgeSrcX = srcXY[0];
orgeSrcY = srcXY[1];
heroX = gameScreen.borderX + 80;
heroY = gameScreen.borderY + 110;
orgeX = gameScreen.borderX + 30;
orgeY = heroY;
/*srcXY = calcXY(orgeType + GameMap.SWITCH_OFFSET - 1);
orgeSrcX_ = srcXY[0];
orgeSrcY_ = srcXY[1];
layerManager = new LayerManager();
fightingHero = new Sprite(GameScreen.getImage(GameScreen.IMAGE_HERO),
GameMap.TILE_WIDTH,GameMap.TILE_HEIGHT);
fightingOrge = new Sprite(GameScreen.getImage(GameScreen.IMAGE_HERO),
GameMap.TILE_WIDTH,GameMap.TILE_HEIGHT);
fightingHero.setPosition(10,10);
fightingOrge.setPosition(100,10);
layerManager.append(fightingHero);
layerManager.append(fightingOrge);
fightingOrge.setFrame(3);*/
}
private int[] calcXY(int index)
{
int[] result = {0,0};
int row = index / 11;
int col = index - row * 11;
result[0] = col * w;
result[1] = row * w;
return result;
}
public void run()
{
//g = getGraphics();
long startTime = 0;
long timeTake = 0;
while(isFighting == true)
{
startTime = System.currentTimeMillis();
tick();
render(g);
timeTake = System.currentTimeMillis() - startTime;
if (timeTake < 1000)
{
try
{
Thread.sleep(1000 - timeTake);
} catch(InterruptedException e){System.out.println(e);}
}
}
}
public void stop()
{
hero.addMoney(orgeMoney);
hero.addExperience(orgeExperience);
gameScreen.showMessage(this,g,
"得到"+orgeMoney+"个金币 "+"经验值增加"+orgeExperience);
display.setCurrent(gameScreen);
isFighting = false;
}
public void start()
{
isFighting = true;
Thread t = new Thread(this);
t.start();
}
private void tick()
{
int keystate = getKeyStates();
if(orgeHp <= 0)
{
//hero.setHp(heroRemainHp);
//orgeHp = 0;
stop();
}else
if(heroFirst == true){
////fightingHero.setFrame(attackFrameNum);
////fightingOrge.setFrame(defendFrameNum);
orgeHp -= orgeDamagePerBout;
if(orgeHp <= 0)
{
orgeHp = 0;
//stop();
}
}else
{
////fightingHero.setFrame(defendFrameNum);
////fightingOrge.setFrame(attackFrameNum);
hero.cutHp(heroDamagePerBout);
}
if((keystate & this.FIRE_PRESSED) != 0)
{
hero.setHp(heroRemainHp);
orgeHp = 0;
//stop();
}
heroFirst = !heroFirst;
////fightingHero.nextFrame();
////fightingOrge.nextFrame();
//System.out.println(fightingHero.getFrame());
}
private void render(Graphics g)
{
g.setColor(0,0,0);
g.fillRect(0,0,this.getWidth(),this.getHeight());
g.drawImage(borderImage,gameScreen.borderX,gameScreen.borderY,
Graphics.TOP|Graphics.LEFT);
g.drawRegion(orgeImage,orgeSrcX,orgeSrcY,w,w,Sprite.TRANS_NONE,
orgeX,orgeY,Graphics.TOP|Graphics.LEFT);
g.drawRegion(heroImage,heroSrcX,heroSrcY,w,w,Sprite.TRANS_NONE,
heroX,heroY,Graphics.TOP|Graphics.LEFT);
if(heroFirst == true){
/*g.drawRegion(orgeImage,orgeSrcX,orgeSrcY,w,w,Sprite.TRANS_NONE,
gameScreen.borderX,gameScreen.borderY,Graphics.TOP|Graphics.LEFT);
g.drawRegion(heroImage,heroSrcX,heroSrcY,w,w,Sprite.TRANS_NONE,
gameScreen.borderX + 50,gameScreen.borderY,Graphics.TOP|Graphics.LEFT);*/
g.drawRegion(heroImage,hitSrcX,hitSrcY,w,w,Sprite.TRANS_NONE,
orgeX,orgeY,Graphics.TOP|Graphics.LEFT);
}else{
g.drawRegion(heroImage,hitSrcX,hitSrcY,w,w,Sprite.TRANS_NONE,
heroX,heroY,Graphics.TOP|Graphics.LEFT);
}
int split = 15;
g.setColor(0x5588FF);//(0xCCCCFF);
g.drawString(fightCalc.getOrgeName(orgeType),orgeX-8,
gameScreen.borderY+split + 15,Graphics.TOP|Graphics.LEFT);
g.drawString("血:"+orgeHp,orgeX-8,
gameScreen.borderY+2*split + 20,Graphics.TOP|Graphics.LEFT);
g.drawString("攻:"+orgeAttack,orgeX-8,
gameScreen.borderY+3*split + 20,Graphics.TOP|Graphics.LEFT);
g.drawString("防:"+orgeDefend,orgeX-8,
gameScreen.borderY+4*split + 20,Graphics.TOP|Graphics.LEFT);
g.setColor(0xFF5555);
g.drawString(" 英雄",heroX-15,
gameScreen.borderY+split + 15,Graphics.TOP|Graphics.LEFT);
g.drawString("血:"+hero.getHp(),heroX-15,
gameScreen.borderY+2*split + 20,Graphics.TOP|Graphics.LEFT);
g.drawString("攻:"+hero.getAttack(),heroX-15,
gameScreen.borderY+3*split + 20,Graphics.TOP|Graphics.LEFT);
g.drawString("防:"+hero.getDefend(),heroX-15,
gameScreen.borderY+4*split + 20,Graphics.TOP|Graphics.LEFT);
//layerManager.paint(g,0,0);
this.flushGraphics();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -