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

📄 battle.java

📁 这是我自己写的一个RPG游戏 基于MIDP2.0开发,开发环境为Eclipse+EclipseMe+WTK2.2,主要是用于学习,实现了RPG游戏的基本功能,望能发布
💻 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 + -