⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fightscreen.java

📁 这是一个魔塔游戏的源代码
💻 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 + -