www.pudn.com > j2me-jianhun.rar > MGC.java


/*游戏场景类 
包括如下场景: 
场景一:城郊 
场景二:荒岛 
场景三:女儿国 
场景四:勇士国 
场景五:真假蓬莱 
场景六:军营*/ 
import javax.microedition.lcdui.*; 
import java.io.*; 
import java.lang.*; 
import java.util.Timer; 
import java.util.TimerTask; 
import java.util.Random; 
import java.util.Vector; 
import javax.microedition.media.*; 
import com.nokia.mid.ui.*; 
public class MGC extends FullCanvas 
{ 
	/*角色变量*/ 
	static int l,m,le,ex,sp,d,gold,x,y,lm,mm,dr;//l,m为当前的血和气,lm,mm为当前的血气的最大值,le为人物等级,ex为经验,sp为剩余技能点,d为基础物理攻击力,dr为人物的方向标志 
	int D;//角色的物理总攻击力,包括基础攻击力和加成攻击力 
	int[] s,tn;//s[]为技能等级,tn[]为任务物品的收集数量 
	int addMd,addPd;//武器附加的魔法攻击和物理攻击 
	int stealB;//偷血量 
	int addPdP;//基础攻击力提升比例 
	int curnpc;//当前对话的NPC序号 
	int speed=4;//行走的速度 
	int count;//通用变量,用于各种情况下的计数 
	int[] weapon;//武器 
	int curKey; 
	boolean update;//更新标志 
	static int[] startx,starty;//初生地的坐标 
	int curweapon;//当前使用的武器 
	int curEl;//当前战斗中的怪物等级 
	boolean task,task2;//任务的触发标志,task为前四个任务,task2为最后一个任务 
	boolean boat;//判断是否已经购买过船 
	boolean t;//隐身标志 
	boolean tran;//附身标志 
	boolean walk;//是否持续移动 
	boolean[] dlg;//和NPC的对话标志 
	String[] dlgMenu;//对话中的菜单 
	boolean win,die;//战斗胜利和阵亡的标志 
	String tip;//提示信息 
	String dlgm; 
	String pro;//属性信息 
	String[] attackMenu=new String[]{"火球", 
	"落星", 
	"风残", 
	"召狼", 
	"召熊", 
	"召龙", 
	"隐身", 
	"遁走", 
	"附身", 
	"回血", 
	"回气", 
	"攻击"}; 
	int Offy,Offx; 
	int dlgn; 
	int dlgMenuChoose; 
	static Image poc;//主角的图片 
	/*游戏控制变量*/ 
	static int x0,y0,w,h,sl,i,j;//sl为场景号,i,j为菜单选项编号,i为一级菜单,j为二级菜单,x0,y0为屏幕左上角相对大场景的坐标 
	int killCount;//竞技场的竞技计数 
	static int[] W,H;//场景的长和宽(Tile为单位) 
	int[] sc;//地图索引数组 
	int[] spn;//精灵的数量 
	static int[] screenStart=new int[]{16,29,33,47,68,77,83};//场景图片编号的起点 
	int sx,sy;//技能图片的坐标 
	int sn;//对话的序号(兼战斗中获得的经验值) 
	SP[] spi;//战斗场景中的精灵对象 
	SP[] NPC;//非战斗场景中的精灵对象 
	int an;//攻击顺序 
	int nn;//当前与主角对话的NPC序号(兼战斗中获得的金钱) 
	boolean pm,am,tm;//属性菜单,战斗菜单和传送菜单的弹出标志 
	boolean atm;//战斗场景 
	boolean me;//对话控制开关 
	boolean change;//场景切换开关 
	boolean gameMenu;//游戏菜单开关 
	boolean playOn; 
	boolean showW; 
	int step; 
	static boolean running; 
	String[] dlgM;//对话的内容 
	static Image screenPic;//场景大图 
	static Image NPCPic;//精灵大图 
	static Image proBg,UI;//属性菜单图 
	InputStream is;//输入流 
	Vector winString=new Vector(0,1);//胜利画面的文字 
	static Image[] p; 
	static Image[] screen;//场景图片 
	static Image[] spic;//技能图片 
	static Image atpic,attackBg;//战斗场景中的图片 
	static Image spic0; 
	Image dlgpic;//对话的图片 
	static Image[] sword;//武器图片 
	String[] mapName=new String[]{"剑灵村","流沙岛","幽灵镇","勇士国","蓬莱岛","断肠谷"}; 
	boolean updateMan; 
	static Graphics g1; 
	Random rd; 
	Player map,attack; 
	boolean isWeather; 
	Graphics bufferg; 
	Image winScreen; 
	int offsetY=20;//屏幕上提的偏移量 
	Timer ti; 
	int[][] snow=new int[15][15];//雪花 
	TI mo,atw,atc,changeMap,playsound,weather;//mo控制人物移动,atw控制技能效果,atc控制攻击顺序切换,changeMap控制场景切换 
	//Command choose,gmenu,con; 
	public MGC() 
	{ 
		running=true; 
		w=176; 
		h=208-offsetY; 
//		choose=new Command("",Command.OK,0); 
//		gmenu=new Command("菜单",Command.SCREEN,0); 
//		choose=new Command("选择",Command.OK,0); 
//		con=new Command("继续",Command.OK,0); 
// ddCommand(choose); 
// ddCommand(gmenu); 
// etCommandListener(this);	 
	} 
	/*初始化*/ 
	void ge() 
	{ 
		//addCommand(gmenu); 
		i=0; 
		le=1; 
		ex=0; 
		sp=1; 
		d=7; 
		gold=1000; 
		lm=71; 
		l=71; 
		m=40; 
		mm=40; 
		dr=6; 
		addMd=0; 
		addPd=0; 
		stealB=0; 
		addPdP=0; 
		curweapon=9; 
		D=d+addPd+addPdP*d/100; 
		weapon=new int[]{9,9,9,9,9,9}; 
		s=new int[]{0,0,0,0,0,0,0,0,0,1,0}; 
		spn=new int[]{60,28,153,76,16,2,0}; 
		startx=new int[]{464,144,32,192,32,128,16}; 
		starty=new int[]{448,432,224,320,144,176,112}; 
		dlg=new boolean[]{false,false,false,false,false,false,false}; 
		tn=new int[]{0,0,0,0,0}; 
		W=new int[]{32,32,32,24,24,16,16}; 
		H=new int[]{32,32,32,24,24,16,16}; 
		if(sl==0) 
		{ 
			if(dlg[0]) 
			{ 
				x=startx[0]; 
				y=starty[0]; 
				message(2); 
			} 
			else 
			{ 
				x=384; 
				y=304; 
			} 
		} 
		else 
		{ 
			x=startx[sl]; 
			y=starty[sl]; 
		} 
		if(x>=w/2) 
		{ 
			if(x<=W[sl]*16-w/2) 
			x0=x-w/2; 
			else 
			x0=W[sl]*16-w; 
		} 
		else 
		x0=0; 
		if(y>=h/2) 
		{ 
			if(y<=H[sl]*16-h/2) 
			y0=y-h/2; 
			else 
			y0=H[sl]*16-h; 
		} 
		else 
		y0=0; 
		task=false; 
		task2=false; 
		boat=false; 
		showW=false; 
		die=false; 
		win=false; 
		walk=false; 
		t=false; 
		tran=false; 
		//playOn=true; 
		pm=false; 
		am=false; 
		atm=false; 
		change=false; 
		gameMenu=false; 
		me=false; 
		tip=null; 
		dlgm=null; 
		spi=new SP[8]; 
		ti=new Timer(); 
		rd=new Random(1000); 
		changeMap=null;		 
		is=getClass().getResourceAsStream("/Screen"+ts(sl)+".txt"); 
		rS(is);//读取指定的地图索引 
		if(spn[sl]!=0) 
		{ 
			is=getClass().getResourceAsStream("/sp"+ts(sl)+".txt"); 
			rSp(is);//读取精灵索引 
		} 
		if(sl==0&&!dlg[0]) 
		message(2); 
		weather=new TI(this,-2); 
		ti.schedule(weather,0,400); 
	} 
	/*读取精灵索引*/ 
	void rSp(InputStream s) 
	{ 
		int i,c,temp; 
		i=0; 
		c=0; 
		temp=0; 
		NPC=null; 
		NPC=new SP[spn[sl]]; 
		try 
		{ 
			while((c=s.read())!=-1) 
			{ 
				switch(c) 
				{ 
					case '*': 
					NPC[i++]=new SP( 
					temp/10000, 
					temp%10000/100, 
					temp%100); 
					temp=0; 
					break; 
					default: 
					temp=10*temp+c-48; 
					break; 
				} 
			} 
		} 
		catch(java.io.IOException ioe) 
		{ 
		} 
		is=null; 
	}	 
	/*读取相应场景的地图*/ 
	void rS(InputStream s) 
	{ 
		int x,y,c,temp; 
		x=0; 
		y=0; 
		temp=0; 
		sc=null; 
		sc=new int[W[sl]*H[sl]]; 
		int i = 0; 
		try 
		{ 
			while((c=s.read())!=-1) 
			{ 
				switch(c) 
				{ 
					case '\n': 
					y++; 
					x=0; 
					temp=0; 
					break; 
					case '*': 
					sc[y*W[sl]+x++]=temp; 
					temp=0; 
					break; 
					default: 
					temp=10*temp+c-48; 
					break; 
				} 
			} 
		} 
		catch(java.io.IOException ioe) 
		{ 
		} 
		if(sl==3)//在勇士国随机生成两个宝箱所在地,和宝箱周围的怪物 
		{ 
			x=rR(96)+72; 
			if(sc[x]/100==1) 
			{ 
				sc[x]=sc[x]%100+9800; 
				{ 
					if(sc[x+1]/100==1) 
					sc[x+1]=sc[x+1]%100+1800; 
					if(sc[x-1]/100==1) 
			     		sc[x-1]=sc[x-1]%100+1900; 
			     		if(sc[x-24]/100==1) 
			     		sc[x-24]=sc[x-24]%100+1600; 
			     		if(sc[x+24]/100==1) 
			     		sc[x+24]=sc[x+24]%100+1700; 
			     	} 
			} 
			x=rR(96)+264; 
			if(sc[x]/100==1) 
			{ 
				sc[x]=sc[x]%100+9800; 
				{ 
					if(sc[x+1]/100==1) 
					sc[x+1]=sc[x+1]%100+1800; 
					if(sc[x-1]/100==1) 
			     		sc[x-1]=sc[x-1]%100+1900; 
			     		if(sc[x-24]/100==1) 
			     		sc[x-24]=sc[x-24]%100+1600; 
			     		if(sc[x+24]/100==1) 
			     		sc[x+24]=sc[x+24]%100+1700; 
			     	} 
			} 
		} 
		else 
		if(sl==6)//在竞技场随机生成六到八级的怪物 
		{ 
			for(int ii=0;ii<256;ii++) 
			{ 
				if(sc[ii]/100==1) 
				sc[ii]=sc[ii]%100+(rR(100)<70?(rR(3)+16)*100:100); 
			} 
		} 
		is=null; 
	} 
	public void keyRepeated(int keyCode) 
	{ 
		int act=getGameAction(keyCode); 
		if(act==Canvas.UP||act==Canvas.DOWN||act==Canvas.LEFT||act==Canvas.RIGHT) 
		keyPressed(keyCode); 
	}		 
	public void keyPressed(int keyCode) 
	{ 
		if(keyCode==35) 
		GM.mg.exit(); 
		curKey=keyCode; 
		if(!change) 
		{ 
			int act=getGameAction(keyCode); 
			switch(act) 
			{ 
				case GAME_B://属性菜单弹出 
				if(!win&&!die&&!change&&!tm&&!me&&!gameMenu&&mo==null) 
				{ 
					pm=!pm; 
					Offy=0; 
					Offx=0; 
//					if(pm) 
//					removeCommand(gmenu); 
//					else 
//					if(!atm) 
//					//addCommand(gmenu); 
					i=0; 
					j=0; 
					repaint(); 
				} 
				break; 
				case UP://上键 
				if(gameMenu)//对游戏菜单的操作 
				{ 
					i=i-1>=0?i-1:0; 
					repaint(); 
				} 
				else 
				if(!pm&&!tm&&!win&&!die&&!me&&tip==null&&!atm)//人物运动 
				{				 
					if(mo==null) 
					{ 
						if(dr/3!=2) 
						{ 
							dr=6; 
							repaint(); 
						} 
						else 
						stm(); 
					} 
				}				 
				else 
				if(pm)//对属性菜单的操作 
				{ 
					pro=null; 
					Offy=0; 
					j=0; 
					i=i-1>=0?i-1:3; 
					repaint(); 
				} 
				else 
				if(tm)//对传送菜单的操作 
				{ 
					if(dlg[2]) 
					i=i-1>=0?i-1:5; 
					else 
					if(task) 
					i=i-1>=0?i-1:4; 
					else 
					i=i-1>=0?i-1:3; 
					repaint(0,0,128,128); 
				} 
				else 
				if(am)//对战斗菜单的操作 
				{ 
					i=i-4>=0?i-4:i+8; 
					repaint(); 
				} 
				else 
				if(me&&tip==null)//对对话菜单的操作 
				{ 
					if(curnpc==6||curnpc==4||curnpc==5) 
					dlgMenuChoose=dlgMenuChoose-1>=0?dlgMenuChoose-1:dlgMenu.length-1; 
					repaint(); 
				}			 
				break; 
				case DOWN://下键 
				if(gameMenu) 
				{ 
					i=i+1<=4?i+1:4; 
					repaint(); 
				} 
				else 
				if(!pm&&!atm&&!tm&&!win&&!die&&!me&&tip==null) 
				{ 
					if(mo==null) 
					{ 
						if(dr/3!=1) 
						{ 
							dr=3; 
							repaint(); 
						} 
						else 
						stm(); 
					} 
				} 
				else 
				if(pm) 
				{ 
					pro=null; 
					Offy=0; 
					i=i+1<4?i+1:0; 
					j=0; 
					repaint(); 
				} 
				else 
				if(tm) 
				{ 
					if(dlg[2]) 
					i=i+1<6?i+1:0; 
					else 
					if(task) 
					i=i+1<5?i+1:0; 
					else 
					i=i+1<4?i+1:0; 
					repaint(); 
				} 
				else 
				if(am) 
				{ 
					i=i+4<12?i+4:i-8; 
					repaint(); 
				} 
				else 
				if(me&&tip==null)//对话时候的菜单选项 
				{ 
					if(curnpc==6||curnpc==4||curnpc==5) 
					dlgMenuChoose=dlgMenuChoose+1<=dlgMenu.length-1?dlgMenuChoose+1:0; 
					repaint(); 
				}			 
				break; 
				case LEFT://左键 
				if(pm) 
				{ 
					 
					if(i==1) 
					j=j-1>=0?j-1:10; 
					else 
					if(i==3&&j>0) 
					for(int ii=j-1;ii>=0;ii--) 
					{ 
						if(weapon[ii]!=9) 
						{ 
							Offy=0; 
							j=ii; 
							break; 
						} 
					}	 
					repaint(); 
				} 
				else 
				if(!pm&&!atm&&!tm&&!win&&!die&&!me&&tip==null&&!gameMenu) 
				{ 
					if(mo==null) 
					{ 
						if(dr/3!=0) 
						{ 
							dr=0; 
							repaint(); 
						} 
						else			 
						stm(); 
					} 
				} 
				else 
				if(am) 
				{ 
					i=i-1>=0?i-1:11; 
					repaint(); 
				} 
				else 
				if(me&&tip==null) 
				{ 
					if(curnpc==6||curnpc==4||curnpc==5) 
					i=i-1>=0?i-1:0; 
					repaint(); 
				}				 
				break; 
				case RIGHT://右键 
				if(pm) 
				{ 
					 
					if(i==1) 
					{ 
						j=j+1<11?j+1:0; 
						repaint(); 
					} 
					else 
					if(i==3) 
					{ 
						for(int ii=j+1;ii<6;ii++) 
						{ 
							if(weapon[ii]!=9) 
							{ 
								Offy=0; 
								j=ii; 
								break; 
							} 
						} 
						repaint(); 
					} 
				} 
				else 
				if(!pm&&!tm&&!atm&&!win&&!die&&!me&&tip==null&&!gameMenu) 
				{ 
					if(mo==null) 
					{ 
						if(dr/3!=3) 
						{ 
							dr=9; 
							repaint(); 
						} 
						else 
						stm(); 
					} 
				} 
				else 
				if(am) 
				{ 
					i=i+1<=11?i+1:0; 
					repaint(); 
				} 
				else 
				if(me&&tip==null)//对话时候的菜单选项 
				{ 
					if(curnpc==6||curnpc==4) 
					i=i+1<=1?i+1:0; 
					else 
					if(curnpc==5) 
					{ 
						switch(sn) 
						{ 
							case 1: 
							i=i+1<=2?i+1:0; 
							break; 
							case 2: 
							i=i+1<=1?i+1:0; 
							break; 
							default: 
							break; 
						} 
					} 
					repaint(); 
				} 
				break; 
				case FIRE: 
				FIRE(); 
				break; 
				default: 
				switch(keyCode) 
				{ 
					case KEY_NUM1://1键取消 
//					if(am&&!pm) 
//					{ 
//						am=false; 
//						an=4; 
//						repaint(); 
//					} 
//					else 
					if(pm&&i==3) 
					{ 
						gold+=(weapon[j]%3+1)*(weapon[j]%3+1)*100; 
						if(curweapon==weapon[j]) 
						curweapon=9; 
						weapon[j]=9; 
						addPd=0; 
						addMd=0; 
						addPdP=0; 
						D=d;			 
						repaint(0,0,160,128); 
					} 
					break;		 
					case -6: 
					FIRE(); 
					break;				 
					default: 
					break; 
				} 
				break; 
			} 
		} 
	} 
	/*五键或左软键的功能*/ 
	public void FIRE() 
	{ 
		if(gameMenu) 
		{ 
			if(i==4) 
			{ 
				gameMenu=!gameMenu; 
				repaint(); 
			} 
			else 
			if(i==3)//返回主菜单  
			{ 
				gameMenu=false; 
				screen=null; 
				MG.showGame=false; 
				GM.cI(); 
				MG.show(MG.gm); 
				GM.sc.stopSound(map); 
			} 
			else 
			if(i==0)//帮助 
			{ 
				if(GM.mg.t==null) 
				{ 
					GM.mg.back1=new Command("",Command.BACK,0); 
					GM.mg.back2=new Command("返回",Command.SCREEN,0); 
					GM.mg.t=new Form("帮助"); 
					GM.mg.t.append("游戏背景:"); 
					GM.mg.t.append("为完成父亲的遗愿,李竹庆决定前往蓬莱仙岛寻找徐敬业与骆宾王的遗孀,辅助完成复国大业。但一路上困难重重,李竹庆能否顺利到达蓬莱仙岛呢?又能否完成父亲的遗愿呢?"); 
					GM.mg.t.append(" "); 
					GM.mg.t.append("操作方法:"); 
					GM.mg.t.append("游戏中用方向键和2、4、6、8键控制主角移动以及进行菜单选择,5键或OK键选定, 3键调出/关闭属性菜单,左软键调出操作菜单,可查看帮助信息,保存游戏或回到主菜单。"); 
					GM.mg.t.append(" "); 
					GM.mg.t.append("关键提示:"); 
					GM.mg.t.append("玩家每次升级将得到一点技能属性用来学习技能,每项技能所能修炼的最高等级受主角等级限制,技能等级越高,效果越显著。使用“召狼”等技能时,召唤出的宠物将被优先攻击。使用技能会消耗主角的“气力”,“回气”技能将耗费一定数量的金钱。主角战死会损失一定比例的经验及金钱。"); 
					GM.mg.t.append("在战斗过程中菜单选项将不会响应。"); 
					GM.mg.t.append(" "); 
					GM.mg.t.append("招式详解:"); 
					GM.mg.t.append("火球:用内力聚成一个火球,对单个敌人造成极大伤害"); 
					GM.mg.t.append("落星:在天空中形成流星般的巨石,砸向全部敌人"); 
					GM.mg.t.append("风残:耗费自身的血和气来形成一股飓风,对全部敌人造成较大伤害"); 
					GM.mg.t.append("召狼:召唤精灵狼来辅助战斗,生命力较弱但攻击力很强"); 
					GM.mg.t.append("召熊:召唤精灵熊来辅助战斗,攻击力很弱但生命力较强,可以用作战斗中的护盾"); 
					GM.mg.t.append("召龙:召唤神龙来辅助战斗,可以反弹敌人部分攻击并反伤敌人"); 
					GM.mg.t.append("隐身:在数回合内主角将不受攻击,但使用附身或攻击敌人则会失效"); 
					GM.mg.t.append("遁走:从战斗中直接逃走,技能等级高则逃走成功率大"); 
					GM.mg.t.append("附身:召唤影子与主角并肩作战,使主角生命力和攻击力按比例上升"); 
					GM.mg.t.append("回血:恢复主角一定比例的生命力"); 
					GM.mg.t.append("回气:恢复主角一定比例的气力,但要耗费一定量的金钱"); 
					GM.mg.t.append("攻击:使用普通攻击对敌单体造成伤害");	 
					GM.mg.t.addCommand(GM.mg.back1); 
					GM.mg.t.addCommand(GM.mg.back2); 
					GM.mg.t.setCommandListener(GM.mg); 
					GM.mg.show(GM.mg.t); 
					MG.showHelp=true; 
				} 
			} 
			else 
			if(i==2)//音效处理 
			{ 
				GM.playOn=!GM.playOn; 
				if(GM.playOn) 
				GM.sc.playSound(map); 
				else 
				GM.sc.pauseSound(map); 
				gameMenu=false; 
				repaint(); 
			} 
			else//保存游戏 
			{ 
				SA s=new SA(); 
				s.s(); 
				s=null; 
				gameMenu=false; 
				repaint(); 
			} 
		} 
		else				 
		if(pm) 
		{ 
			if(i==1&&sp>0&&s[j]<10)//升级技能 
			{ 
				if(s[j]==0||le>=3*s[j]) 
				{ 
					if(j==9||j==10||j==7) 
					{ 
						if(s[j]<5) 
						{ 
							s[j]++; 
							sp--; 
						} 
					} 
					else 
					{ 
						s[j]++; 
						sp--; 
					} 
				} 
				repaint(0,0,160,128); 
			} 
			else 
			if(i==3)//选择装备 
			{ 
				if(weapon[j]!=9) 
				{ 
					curweapon=weapon[j]; 
					addMd=0; 
					addPd=0; 
					addPdP=0; 
					switch(curweapon) 
					{ 
						case 0: 
						addPd=5; 
						stealB=10; 
						break; 
						case 1: 
						addPd=10; 
						stealB=25; 
						break; 
						case 2: 
						addPd=15; 
						stealB=45; 
						break; 
						case 3: 
						addMd=10; 
						break; 
						case 4: 
						addMd=20; 
						break; 
						case 5: 
						addMd=30; 
						break; 
						case 6: 
						addPdP=15; 
						break; 
						case 7: 
						addPdP=25; 
						break; 
						case 8: 
						addPdP=35; 
						break; 
						default: 
						break; 
					}	 
					D=d+addPd+addPdP*d/100; 
					if(atm) 
					spi[0].d=D; 
					repaint(); 
				} 
			} 
		} 
		else 
		if(tm) 
		{ 
			if(sl!=i) 
			{ 
				if(sl!=0) 
				{ 
					if(gold>=100) 
					{ 
						gold-=100; 
						cm(i); 
					} 
					else 
					{ 
						tip="银两不够"; 
						tm=false; 
						repaint(); 
					} 
				} 
				else 
				cm(i); 
			} 
			else 
			{ 
				tm=false; 
				repaint(); 
			}		 
		} 
		else 
		if(am) 
		{ 
			if((i<11&&s[i]>0)||i==11) 
			sat(i); 
		} 
		else 
		if(tip!=null) 
		{ 
			tip=null; 
			dlgm=null; 
			dlgpic=null; 
			//removeCommand(con); 
			repaint(); 
		} 
		else 
		if(me)//对话控制 
		{ 
			if(curnpc<2) 
			{ 
				if(sn==dlgM.length-1) 
				{ 
					//removeCommand(con); 
					me=false; 
					dlg[curnpc]=true; 
					dlgpic=null; 
				} 
				else 
				{ 
					sn++; 
					createDlgPic(dlgM[sn]); 
				} 
				repaint(); 
			} 
			else 
			switch(curnpc) 
			{ 
				case 2://长须仙人 
				if(sn==2) 
				{ 
					dlg[curnpc]=true; 
					dlgpic=null; 
					me=false; 
					//removeCommand(con); 
					cm(5); 
				} 
				else 
				{ 
					sn++; 
					createDlgPic(dlgM[sn]); 
					repaint(); 
				} 
				break; 
				case 3://徐和骆 
				if(sn==5) 
				{ 
					gold+=10000; 
					task2=true; 
					sn++; 
				} 
				else 
				if(sn==6||sn==7) 
				{ 
					//removeCommand(con); 
					me=false; 
					dlg[curnpc]=true; 
					dlgpic=null; 
				} 
				else 
				{ 
					sn++; 
					createDlgPic(dlgM[sn]); 
				} 
				repaint(); 
				break; 
				case 6://船工 
				if(dlgMenuChoose==0) 
				{ 
					if(boat) 
					{ 
						tip="你已经有船了"; 
						me=false; 
					} 
					else 
					if(gold>=600) 
					{ 
						gold-=600; 
						boat=true; 
						me=false; 
						tip="买卖成功"; 
					} 
					else 
					{ 
						tip="银两不够"; 
						me=false; 
					} 
				} 
				else 
				{ 
					me=false; 
					dlgpic=null; 
					//removeCommand(con); 
				} 
				repaint(); 
				break; 
				case 5://多九公 
				switch(sn) 
				{ 
					case 0: 
					if(dlgMenuChoose==0) 
					{ 
						sn=1; 
						dlgMenu=new String[2]; 
						dlgMenu[0]="现在分配"; 
						dlgMenu[1]="以后再说"; 
					} 
					else 
					if(dlgMenuChoose==1) 
					{ 
						dlgMenu=null; 
						task=true; 
						sn=2; 
					} 
					else 
					{ 
						me=false; 
						dlgpic=null; 
						return; 
					} 
					createDlgPic(dlgM[sn]); 
					repaint(); 
					break; 
					case 2: 
					{ 
						me=false; 
						dlgpic=null; 
						//removeCommand(con); 
					} 
					repaint();	 
					break; 
					case 1: 
					if(dlgMenuChoose==0) 
					{ 
						if(gold>=10000) 
						{ 
							gold-=10000; 
							for(int ii=0;ii<11;ii++) 
							{ 
								while(s[ii]>0) 
								{ 
									s[ii]--; 
									sp++; 
								} 
							} 
							me=false; 
							dlgpic=null; 
							//removeCommand(con); 
						} 
						else 
						{ 
							tip="银两不够"; 
							me=false; 
						} 
					} 
					else 
					{ 
						me=false; 
						dlgpic=null; 
					} 
					repaint(); 
					break; 
					default: 
					break; 
				}	 
				break; 
				case 4://竞技官 
				if(dlgMenuChoose==0) 
				{ 
					if(gold>=350) 
					{ 
						gold-=350; 
						me=false; 
						dlgpic=null; 
						//removeCommand(con); 
						cm(6);//进入竞技场 
						killCount=0; 
					} 
					else 
					{ 
						tip="银两不够"; 
						me=false; 
					} 
				} 
				else 
				{ 
					me=false; 
					dlgpic=null; 
					//removeCommand(con); 
				} 
				repaint();					 
				break; 
				default: 
				break; 
			} 
		} 
		else 
		if(win)//战斗胜利后回到场景 
		{ 
			//addCommand(gmenu); 
			if(sl!=6) 
			{ 
				win=false; 
				updateMan=false; 
				winString=new Vector(0,1); 
				//removeCommand(con); 
				repaint(); 
			} 
			else//如果在竞技场游戏则对打斗场次进行计数,到10次就回到勇士国 
			{ 
				win=false; 
				//removeCommand(con); 
				if(killCount==10) 
				{ 
					gold+=10000; 
					cm(3); 
				} 
				else 
				repaint(); 
			} 
		} 
		else 
		if(die)//死亡后重生 
		{ 
			//addCommand(gmenu); 
			//removeCommand(con); 
			die=false; 
			atm=false; 
			l=lm; 
			m=mm; 
			ex-=(ex-m(le))*20/100; 
			gold=gold*70/100; 
			cm(0); 
		} 
		else 
		if(curKey==-6) 
		{ 
			gameMenu=true; 
			repaint(); 
		} 
		//if(tip==null&&!me&&!atm&&!pm&&!gameMenu) 
		//addCommand(gmenu); 
	} 
	public void keyReleased(int keyCode) 
	{ 
		int act=getGameAction(keyCode); 
		if(act==Canvas.UP||act==Canvas.DOWN||act==Canvas.LEFT||act==Canvas.RIGHT) 
		{ 
			walk=false;		 
		} 
	}	 
	public void drawGameMenu(Graphics g) 
	{ 
		g.setColor(0,0,100); 
		g.fillRoundRect(45,40,86,116,30,30); 
		g.setColor(rR(255),rR(255),rR(255)); 
		g.drawRoundRect(45,40,86,116,30,30); 
		g.setColor(0); 
		g.drawRoundRect(44,39,88,118,30,30); 
		g.setColor(rR(255),rR(255),rR(255)); 
		g.drawRoundRect(43,38,90,120,30,30);		 
		String[] text=new String[]{"帮助说明","保存游戏",GM.playOn?"关闭音效":"打开音效","回主菜单","继续游戏"}; 
		for(int ii=0;ii<5;ii++) 
		{ 
			if(i==ii) 
			GM.sc.drawStringShadow(g,0x00ff00,0x00ff00,0,text[ii],88,ii*20+52,17); 
			else 
			GM.sc.drawStringShadow(g,0,0,-1,text[ii],88,ii*20+52,17); 
		}	 
	} 
	/*构建一个从0到n-1范围的随机数*/ 
	public int rR(int n)  
	{	 
		int r =rd.nextInt();
		if(r<0) 
		r=-r; 
		r=r%n;
		return r;
	} 
	/*天气绘制*/ 
	public void drawWeather(Graphics g1) 
	{ 
        switch(weather.s)//天气类型 
        { 
        	case 0://雨天 
        	int m=-10; 
        	if(isWeather) 
        	m=-10+rR(5); 
        	g1.setColor(-1); 
        	for(int j=0;j<11;j++) 
        	for(int i=m+j;i<181;i+=30) 
        	{ 
        		if(rR(100)<80) 
        		g1.drawLine(i,j*20,i+6,j*20+6); 
        	} 
        	break; 
        	case 1://雪天 
        	g1.setColor(-1); 
        	/*生成雪花序列*/	 
					if(isWeather) 
					{ 
	        	for(int i=snow.length-1;i>0;i--) 
	        	{ 
	        		for(int j=0;j=0) 
	        		snow[0][j]=snow[0][j]*100+rR(10); 
	        		else 
	        		snow[0][j]=snow[0][j]*100-rR(10); 
	        	} 
	        } 
        	/*画雪*/ 
					for(int i=0;i10&&c()<=20)//怪物出现的Tile 
//		{ 
//			fi(chn(),c()-10);//调出战斗场景 
//			if(!atm)//没有怪出现 
//			{ 
//				if(dr%3==0&&step==0) 
//				{ 
//					dr+=1; 
//					step=1; 
//				} 
//				else 
//				if(dr%3==0&&step==1) 
//				{ 
//					dr+=2; 
//					step=0; 
//				} 
//				else 
//				if(dr%3==1||dr%3==2) 
//				dr=dr/3*3; 
//				switch(dr) 
//				{ 
////					case 7://向上1 
////					y-=speed; 
////					if(y0>0&&y-y0<=64) 
////					y0-=speed; 
////					repaint(); 
////					break; 
////					case 4://向下1 
////					y+=speed; 
////					if(y0<128&&y-y0>=48) 
////					y0+=speed; 
////					repaint(); 
////					break; 
////					case 1://向左1 
////					x-=speed; 
////					if(x0>0&&x-x0<=64) 
////					x0-=speed; 
////					repaint(); 
////					break; 
////					case 10://向右1 
////					x+=speed; 
////					if(x0<24*16&&x-x0>=64) 
////					x0+=speed; 
////					repaint(); 
////					break; 
////					default://静止状态 
////					repaint(); 
////					break; 
//					case 7://向上1 
//					y-=speed; 
//					if(y0>0&&y-y0<=h/2) 
//					y0-=speed; 
//					repaint(); 
//					break; 
//					case 4://向下1 
//					y+=speed; 
//					if(y0<(H[sl]-(h+15)/16)*16&&y-y0>=h/2) 
//					y0+=speed; 
//					repaint(); 
//					break; 
//					case 1://向左1 
//					x-=speed; 
//					if(x0>0&&x-x0<=w/2) 
//					x0-=speed; 
//					repaint(); 
//					break; 
//					case 10://向右1 
//					x+=speed; 
//					if(x0<(W[sl]-w/16)*16&&x-x0>=w/2) 
//					x0+=speed; 
//					repaint(); 
//					break; 
//					default://静止状态 
//					repaint(); 
//					break; 
//				}				 
//				walk=true; 
//				mo=new TI(this,7); 
//				ti.schedule(mo,0,300); 
//			} 
//			else 
//			{ 
//				switch(dr/3) 
//				{ 
//				 
//					case 0://向左 
//					x-=16; 
//					break; 
//					case 1://向下 
//					y+=16; 
//					break; 
//					case 2://向上 
//					y-=16; 
//					break; 
//					case 3://向右 
//					x+=16; 
//					break; 
//				} 
//				if(x>=w/2) 
//				{ 
//					if(x<=W[sl]*16-w/2) 
//					x0=x-w/2; 
//					else 
//					x0=W[sl]*16-w; 
//				} 
//				else 
//				x0=0; 
//				if(y>=64) 
//				{ 
//					if(y<=H[sl]*16-h/2) 
//					y0=y-h/2; 
//					else 
//					y0=H[sl]*16-h; 
//				} 
//				else 
//				y0=0;				 
//			} 
//		} 
//		else 
//		if(c()>1&&c()<10)//对话NPC出现的Tile 
//		{ 
//			if(c()==4) 
//			{ 
//				if(tn[0]==10&&tn[1]==5&&tn[2]==10&&tn[3]==5) 
//				message(c()); 
//			} 
//			else 
//			message(c()); 
//		} 
//		else 
//		if(c()==99)//场景出入口 
//		{ 
//			if(boat) 
//			{ 
//				tm=true; 
//				i=0; 
//			} 
//			else 
//			tip="请去找船工买船"; 
//			repaint(); 
//		} 
//		else 
//		if(c()==98)//宝箱 
//		{ 
//			int ii=rR(2*sl+1)*50; 
//			gold+=ii*(2*sl+1); 
//			tip=ii>0?"获得"+ts(ii*(2*sl+1))+"两银子":"一无所获"; 
//			switch(dr/3)//将宝箱所在Tile设为平地 
//			{ 
//				case 1://向下 
//				if(y=m(le+1)) 
				{ 
					le++; 
					sp++; 
					out=true; 
					m=20*le+20; 
					mm=m; 
					lm=le*le+10*le+60; 
					l=lm; 
					d=5*le+2; 
					D=d+addPdP*d/100+addPd; 
				} 
				else 
				break; 
			} 
			ex+=sn; 
			if(out) 
			string.addElement((String)("人物等级提升到第"+String.valueOf(le)+"级"));//更新等级		 
			/*武器check*/ 
			for(int iii=0;iii<6;iii++) 
			{ 
				if(weapon[iii]==9) 
				{ 
					int ii=rR(100); 
					switch(curEl) 
					{ 
						case 2: 
						if(ii<=2&&ii>=0&&!hasWeapon(0)) 
						{ 
							weapon[iii]=0; 
							temp="短剑"; 
						} 
						else 
						if(ii<=6&&ii>=3&&!hasWeapon(3)) 
						{	 
							weapon[iii]=3; 
							temp="青剑"; 
						} 
						break; 
						case 3: 
						if(ii<=5&&ii>=0&&!hasWeapon(0)) 
						{ 
							weapon[iii]=0; 
							temp="短剑"; 
						} 
						else 
						if(ii<=10&&ii>=6&&!hasWeapon(3)) 
						{ 
							weapon[iii]=3; 
							temp="青剑"; 
						} 
						else 
						if(ii<=14&&ii>=11&&!hasWeapon(6)) 
						{ 
							weapon[iii]=6; 
							temp="阔剑"; 
						} 
						break; 
						case 4: 
						if(ii<=7&&ii>=0&&!hasWeapon(0)) 
						{ 
							weapon[iii]=0; 
							temp="短剑"; 
						} 
						else 
						if(ii<=11&&ii>=8&&!hasWeapon(1)) 
						{ 
							weapon[iii]=1; 
							temp="夺魂剑"; 
						} 
						else 
						if(ii<=18&&ii>=12&&!hasWeapon(3)) 
						{ 
							weapon[iii]=3; 
							temp="青剑"; 
						} 
						else 
						if(ii<=25&&ii>=19&&!hasWeapon(6)) 
						{ 
							weapon[iii]=6; 
							temp="阔剑"; 
						} 
						break; 
						case 5: 
						if(ii<=5&&ii>=0&&!hasWeapon(1)) 
						{ 
							weapon[iii]=1; 
							temp="夺魂剑"; 
						} 
						else 
						if(ii<=15&&ii>=6&&!hasWeapon(3)) 
						{ 
							weapon[iii]=3; 
							temp="青剑"; 
						} 
						else 
						if(ii<=18&&ii>=16&&!hasWeapon(4)) 
						{ 
							weapon[iii]=4; 
							temp="游龙剑"; 
						} 
						else 
						if(ii<=27&&ii>=19&&!hasWeapon(6)) 
						{ 
							weapon[iii]=6; 
							temp="阔剑"; 
						}					 
						break; 
						case 6: 
						if(ii<=8&&ii>=0&&!hasWeapon(1)) 
						{ 
							weapon[iii]=1; 
							temp="夺魂剑"; 
						} 
						else 
						if(ii<=14&&ii>=9&&!hasWeapon(4)) 
						{ 
							weapon[iii]=4; 
							temp="游龙剑"; 
						} 
						else 
						if(ii<=17&&ii>=15&&!hasWeapon(7)) 
						{ 
							weapon[iii]=7; 
							temp="日月剑"; 
						}			 
						break; 
						case 7: 
						if(ii<=10&&ii>=0&&!hasWeapon(1)) 
						{ 
							weapon[iii]=1; 
							temp="夺魂剑"; 
						} 
						else 
						if(ii<=18&&ii>=11&&!hasWeapon(4)) 
						{ 
							weapon[iii]=4; 
							temp="游龙剑"; 
						} 
						else 
						if(ii<=23&&ii>=19&&!hasWeapon(7)) 
						{ 
							weapon[iii]=7; 
							temp="日月剑"; 
						}				 
						break; 
						case 8: 
						if(ii<=3&&ii>=0&&!hasWeapon(2)) 
						{ 
							weapon[iii]=2; 
							temp="守护剑"; 
						} 
						else 
						if(ii<=13&&ii>=4&&!hasWeapon(4)) 
						{ 
							weapon[iii]=4; 
							temp="游龙剑"; 
						} 
						else 
						if(ii<=19&&ii>=14&&!hasWeapon(7)) 
						{ 
							weapon[iii]=7; 
							temp="日月剑"; 
						}				 
						break; 
						case 9: 
						if(ii<=5&&ii>=0&&!hasWeapon(2)) 
						{ 
							weapon[iii]=2; 
							temp="守护剑"; 
						} 
						else 
						if(ii<=8&&ii>=6&&!hasWeapon(5)) 
						{ 
							weapon[iii]=5; 
							temp="紫砂剑"; 
						} 
						else 
						if(ii<=15&&ii>=12&&!hasWeapon(8)) 
						{ 
							weapon[iii]=8; 
							temp="战神剑"; 
						}					 
						break; 
						case 10: 
						if(ii<=7&&ii>=0&&!hasWeapon(2)) 
						{ 
							weapon[iii]=2; 
							temp="守护剑"; 
						} 
						else 
						if(ii<=13&&ii>=8&&!hasWeapon(5)) 
						{ 
							weapon[iii]=5; 
							temp="紫砂剑"; 
						} 
						else 
						if(ii<=19&&ii>=14&&!hasWeapon(8)) 
						{ 
							weapon[iii]=8; 
							temp="战神剑"; 
						}						 
						break; 
						default: 
						break; 
					} 
					break; 
				} 
			} 
			if(temp!=null) 
			{ 
				string.addElement((String)("获得武器:"+temp)); 
			} 
			/*任务物品check*/ 
			if(task&&sl!=6&&temp==null) 
			{ 
				temp=null; 
				int ii; 
				ii=rR(100); 
				if(ii<30) 
				{ 
					switch(curEl) 
					{ 
						case 4://豺 
						if(tn[0]<10) 
						{ 
							tn[0]++; 
							temp="鹤灵草"; 
						} 
						break; 
						case 5://狼 
						if(tn[1]<5) 
						{ 
							tn[1]++; 
							temp="狼牙"; 
						} 
						break; 
						case 6://虎 
						if(tn[4]<20&&task2) 
						{ 
							tn[4]++; 
							temp="虎皮"; 
						} 
						break; 
						case 9://僵尸将军 
						if(tn[2]<10) 
						{ 
							tn[2]++; 
							temp="米云香"; 
						} 
						break; 
						case 10://Boss 
						if(tn[3]<5) 
						{ 
							tn[3]++; 
							temp="雪岩"; 
						} 
						break; 
						default: 
						break; 
					} 
				} 
				if(temp!=null) 
				{ 
					string.addElement((String)("获得任务物品:"+temp)); 
				} 
			} 
			temp=null; 
			if(sl==6&&killCount!=10) 
			{ 
				string.addElement((String)("还须进行"+ts(10-killCount)+"场战斗")); 
			}							 
			if(sl==6&&killCount==10) 
			{ 
				string.addElement((String)("获得银子10000两")); 
			}					 
		} 
		else 
		{ 
			MG.showGame=false; 
			MG.gm.ld=new Loading(3); 
			MG.gm.loading=new Thread(MG.gm.ld); 
			MG.gm.loading.start(); 
			MG.show(MG.gm.ld); 
		}			  	 
  } 
	/*创建对话框图片*/ 
	public void createDlgPic(String s) 
	{ 
		dlgm=s; 
		dlgn=10; 
		dlgpic=null; 
		dlgpic=Image.createImage(dlgn*14,((s.length()-1)/dlgn+1)*20+3); 
		g1=dlgpic.getGraphics(); 
		g1.setFont(Loading.myfont); 
		g1.setColor(153,117,26); 
		g1.fillRect(0,0,dlgn*14,((s.length()-1)/dlgn+1)*20+3); 
		g1.setColor(0xffffff); 
		g1.drawRect(0,0,dlgn*14-1,((s.length()-1)/dlgn+1)*20+2); 
		g1=null; 
	} 
	/*画对话框*/ 
	public void drawDlg(Graphics g) 
	{ 
		g.setColor(0xffffff); 
		g.drawImage(dlgpic,w/2-dlgpic.getWidth()/2,h/2-dlgpic.getHeight()/2,0); 
		for(int i=0;i=w/2) 
		{ 
			if(x<=W[sl]*16-w/2) 
			x0=x-w/2; 
			else 
			x0=W[sl]*16-w; 
		} 
		else 
		x0=0; 
		if(y>=h/2) 
		{ 
			if(y<=H[sl]*16-h/2) 
			y0=y-h/2; 
			else 
			y0=H[sl]*16-h; 
		} 
		else 
		y0=0;		 
		is=getClass().getResourceAsStream("/Screen"+ts(sl)+".txt"); 
		rS(is);//读取指定的地图索引 
		if(sl!=6) 
		{ 
			is=getClass().getResourceAsStream("/sp"+ts(sl)+".txt"); 
			rSp(is);//读取精灵索引 
		} 
		changeMap=null; 
		changeMap=new TI(this,13); 
		ti.schedule(changeMap,0,200); 
		change=true; 
	} 
	/*将移动计时器取消*/ 
	public void cancelMove() 
	{ 
		mo.cancel(); 
		mo=null; 
	} 
	public void cancelATW() 
	{ 
		atw.cancel(); 
		while(atw.cancel()) 
		{ 
		} 
		atw=null; 
	} 
	/*角色移动 移动方式中1表示迈左腿,2表示迈右腿*/ 
	public void move() 
	{ 
		if(dr%3==0&&step==0)//||dr%3==0) 
		{ 
			if(c()>1&&c()<10)//对话NPC出现的Tile 
			{ 
				if(c()==4) 
				{ 
					if(tn[0]==10&&tn[1]==5&&tn[2]==10&&tn[3]==5) 
					message(4); 
				} 
				else 
				message(c()); 
				cancelMove(); 
				dr=dr/3*3; 
				repaint(); 
			}	 
			else 
			if(c()==99)//场景出入口 
			{ 
				if(boat) 
				{ 
					tm=true; 
					i=0; 
				} 
				else 
				tip="请去找船工买船"; 
				cancelMove(); 
				dr=dr/3*3;				 
				repaint(); 
			} 
			else 
			if(c()==97)//大Boss 
			{ 
				cancelMove(); 
				if(tn[0]==10&&tn[1]==5&&tn[2]==10&&tn[3]==5&&tn[4]==20) 
				fi(1,15); 
				else 
				{ 
					tm=true; 
					dr=dr/3*3; 
					repaint(); 
				}		 
			} 
			else 
			if(c()==98)//宝箱 
			{ 
				cancelMove(); 
				int ii=rR(2*sl+1)*10; 
				gold+=ii*(2*sl+1); 
				tip=ii>0?"获得"+ts(ii*(2*sl+1))+"两银子":"一无所获"; 
				switch(dr/3) 
				{ 
					case 1://向下 
					if(y10&&c()<21)//Check怪 
			{ 
				fi(chn(),c()-10); 
				if(!atm)//没有怪出现 
				{ 
					if(dr%3==0&&step==0) 
					{ 
						dr+=1; 
						step=1; 
					} 
					if(dr%3==0&&step==1) 
					{ 
						dr+=2; 
						step=0; 
					} 
					if(dr%3==1||dr%3==2) 
					dr=dr/3*3; 
					switch(dr) 
					{ 
//						case 7://向上1 
//						y-=speed; 
//						if(y0>0&&y-y0<=64) 
//						y0-=speed; 
//						repaint(); 
//						break; 
//						case 4://向下1 
//						y+=speed; 
//						if(y0<128&&y-y0>=48) 
//						y0+=speed; 
//						repaint(); 
//						break; 
//						case 1://向左1 
//						x-=speed; 
//						if(x0>0&&x-x0<=64) 
//						x0-=speed; 
//						repaint(); 
//						break; 
//						case 10://向右1 
//						x+=speed; 
//						if(x0<24*16&&x-x0>=64) 
//						x0+=speed; 
//						repaint(); 
//						break; 
//						default://静止状态 
//						repaint(); 
//						break; 
						case 7://向上1 
						y-=speed; 
						if(y0>0&&y-y0<=h/2) 
						y0-=speed; 
						repaint(); 
						break; 
						case 4://向下1 
						y+=speed; 
						if(y0<(H[sl]-(h+15)/16)*16&&y-y0>=h/2) 
						y0+=speed; 
						repaint(); 
						break; 
						case 1://向左1 
						x-=speed; 
						if(x0>0&&x-x0<=w/2) 
						x0-=speed; 
						repaint(); 
						break; 
						case 10://向右1 
						x+=speed; 
						if(x0<(W[sl]-w/16)*16&&x-x0>=w/2) 
						x0+=speed; 
						repaint(); 
						break; 
						default://静止状态 
						repaint(); 
						break; 
					}				 
				} 
				else 
				{ 
					switch(dr/3) 
					{ 
						case 0://向左 
						x-=16; 
						break; 
						case 1://向下 
						y+=16; 
						break; 
						case 2://向上 
						y-=16; 
						break; 
						case 3://向右 
						x+=16; 
						break; 
					} 
					if(x>=w/2) 
					{ 
						if(x<=W[sl]*16-w/2) 
						x0=x-w/2; 
						else 
						x0=W[sl]*16-w; 
					} 
					else 
					x0=0; 
					if(y>=64) 
					{ 
						if(y<=H[sl]*16-h/2) 
						y0=y-h/2; 
						else 
						y0=H[sl]*16-h; 
					} 
					else 
					y0=0;				 
				}				 
				cancelMove(); 
			} 
			else 
			if(c()==1) 
			{ 
				if(dr%3==0&&step==0) 
				{ 
					dr+=1; 
					step=1; 
				} 
				else 
				if(dr%3==0&&step==1) 
				{ 
					dr+=2; 
					step=0; 
				} 
				else 
				if(dr%3==1||dr%3==2) 
				dr=dr/3*3; 
				switch(dr) 
				{ 
					case 7://向上1 
					y-=speed; 
					if(y0>0&&y-y0<=h/2) 
					y0-=speed; 
					repaint(); 
					break; 
					case 4://向下1 
					y+=speed; 
					if(y0<(H[sl]-(h+15)/16)*16&&y-y0>=h/2) 
					y0+=speed; 
					repaint(); 
					break; 
					case 1://向左1 
					x-=speed; 
					if(x0>0&&x-x0<=w/2) 
					x0-=speed; 
					repaint(); 
					break; 
					case 10://向右1 
					x+=speed; 
					if(x0<(W[sl]-w/16)*16&&x-x0>=w/2) 
					x0+=speed; 
					repaint(); 
					break; 
					default://静止状态 
					repaint(); 
					break; 
				} 
			} 
			else 
			{ 
				mo.cancel(); 
				mo=null; 
				dr=dr/3*3; 
				repaint(); 
			}			 
		} 
		else	 
		{ 
			if(dr%3==0&&step==0) 
			{ 
				dr+=1; 
				step=1; 
			} 
			else 
			if(dr%3==0&&step==1) 
			{ 
				dr+=2; 
				step=0; 
			} 
			else 
			if(dr%3==1||dr%3==2) 
			dr=dr/3*3;			 
			switch(dr) 
			{ 
				case 6: 
				if(step==1)//向上2 
				{ 
					y-=speed; 
					if(y0>0&&y-y0<=h/2) 
					y0-=speed; 
					repaint(); 
				} 
				if(step==0)//向上4 
				{ 
					y-=speed; 
					if(y0>0&&y-y0<=h/2) 
					y0-=speed; 
					if(!walk) 
					cancelMove();				 
					repaint();				 
				} 
				break; 
				case 7://向上1 
				y-=speed; 
				if(y0>0&&y-y0<=h/2) 
				y0-=speed; 
				repaint(); 
				break; 
				case 8://向上3 
				y-=speed; 
				if(y0>0&&y-y0<=h/2) 
				y0-=speed; 
				repaint(); 
				break; 
				case 3: 
				if(step==1) 
				{ 
					y+=speed; 
					if(y0<(H[sl]-(h+15)/16)*16&&y-y0>=h/2) 
					y0+=speed; 
					repaint(); 
				} 
				if(step==0) 
				{ 
					y+=speed; 
					if(y0<(H[sl]-(h+15)/16)*16&&y-y0>=h/2) 
					y0+=speed; 
					repaint(); 
					if(!walk) 
					cancelMove();				 
				}	 
				break;				 
				case 4://向下1 
				y+=speed; 
				if(y0<(H[sl]-(h+15)/16)*16&&y-y0>=h/2) 
				y0+=speed; 
				repaint(); 
				break; 
				case 5://向下2 
				y+=speed; 
				if(y0<(H[sl]-(h+15)/16)*16&&y-y0>=h/2) 
				y0+=speed; 
				repaint(); 
				break; 
				case 0: 
				if(step==1) 
				{ 
					x-=speed; 
					if(x0>0&&x-x0<=w/2) 
					x0-=speed; 
					repaint();				 
				} 
				if(step==0) 
				{ 
					x-=speed; 
					if(x0>0&&x-x0<=w/2) 
					x0-=speed; 
					repaint(); 
					if(!walk) 
					cancelMove();					 
				} 
				break;	 
				case 1://向左1 
				x-=speed; 
				if(x0>0&&x-x0<=w/2) 
				x0-=speed; 
				repaint(); 
				break; 
				case 2://向左2 
				x-=speed; 
				if(x0>0&&x-x0<=w/2) 
				x0-=speed; 
				repaint(); 
				break; 
				case 9: 
				if(step==1) 
				{ 
					x+=speed; 
					if(x0<(W[sl]-w/16)*16&&x-x0>=w/2) 
					x0+=speed; 
					repaint();				 
				} 
				if(step==0) 
				{ 
					x+=speed; 
					if(x0<(W[sl]-w/16)*16&&x-x0>=w/2) 
					x0+=speed; 
					repaint(); 
					if(!walk) 
					cancelMove();			 
				} 
				break;			 
				case 10://向右1 
				x+=speed; 
				if(x0<(W[sl]-w/16)*16&&x-x0>=w/2) 
				x0+=speed; 
				repaint(); 
				break; 
				case 11://向右2 
				x+=speed; 
				if(x0<(W[sl]-w/16)*16&&x-x0>=w/2) 
				x0+=speed; 
				repaint(); 
				break; 
				default://静止状态 
				repaint(); 
				break; 
			} 
		} 
	} 
	/*技能攻击效果*/ 
	public void sat(int k) 
	{ 
		atw=null; 
		switch(k) 
		{ 
			case 0://火球 
			if(m>=10*s[0]) 
			{ 
				atw=new TI(this,4); 
				m-=10*s[0]; 
				am=false; 
				if(t) 
				{ 
					t=!t; 
					spi[0].p=130; 
				} 
			} 
			break; 
			case 1://落星 
			if(m>=10*s[1]) 
			{ 
				atw=new TI(this,5); 
				m-=10*s[1]; 
				am=false; 
				if(t) 
				{ 
					t=!t; 
					spi[0].p=130; 
				} 
			} 
			break; 
			case 2://风残 
			if(m>=20*s[2]&&l>=4*s[2]*lm/100) 
			{ 
				atw=new TI(this,6); 
				m-=20*s[2]; 
				l-=4*s[2]*lm/100; 
				spi[0].l=l; 
				am=false; 
				if(t) 
				{ 
					t=!t; 
					spi[0].p=130; 
				} 
			} 
			break; 
			case 3://召狼 
			if(m>=(20*s[3])) 
			{ 
				spi[1]=new SP(8*s[3]*s[3]+40,4*s[3]*s[3]+10); 
				spi[1].p=120; 
				spi[1].x=16; 
				spi[1].y=112+32; 
				m-=20*s[3]; 
				am=false; 
				an=4; 
				repaint(); 
			} 
			break; 
			case 4://召熊 
			if(m>=(30*s[4])) 
			{ 
				spi[2]=new SP(20*s[4]*s[4]+60,s[4]*s[4]+7); 
				spi[2].p=100; 
				spi[2].x=16; 
				spi[2].y=64+32; 
				m-=30*s[4]; 
				am=false; 
				an=4; 
				repaint(); 
			} 
			break; 
			case 5://召龙 
			if(m>=30*s[5]) 
			{ 
				spi[3]=new SP(10*s[5]*s[5]+40,0); 
				spi[3].p=110; 
				spi[3].x=16; 
				spi[3].y=32+32; 
				m-=30*s[5]; 
				am=false; 
				an=4; 
				repaint(); 
			} 
			break; 
			case 6://隐身 
			if(m>=5*s[6]) 
			{ 
				spi[0].p=140; 
				if(tran) 
				{ 
					tran=!tran; 
					lm=le*le+10*le+60; 
					l=l-l*10*s[8]/(100+10*s[8])>lm?lm:(l-l*10*s[8]/(100+10*s[8])); 
					spi[0].l=l; 
					d=5*le+2; 
					D=d+addPd+addPdP*d/100; 
					spi[0].d=D; 
				}					 
				t=true; 
				m-=5*s[6]; 
				count=0; 
				am=false; 
				an=4; 
				repaint(); 
			} 
			break; 
			case 7://遁走 
			if(m>=10*s[7]*s[7]) 
			{ 
				m-=10*s[7]*s[7]; 
				if(rR(100)<20*s[7]) 
				{ 
					atm=false; 
					repaint(); 
					atc.cancel(); 
					atc=null; 
					for(int ii=0;ii<8;ii++) 
					spi[ii]=null; 
					if(tran) 
					{ 
						tran=!tran; 
						lm=20*le+60; 
						l=l-l*10*s[8]/(100+10*s[8])>lm?lm:(l-l*10*s[8]/(100+10*s[8])); 
						d=3*le+2; 
						D=d+d*addPdP/100+addPd; 
					}			 
					repaint(); 
				} 
				else 
				{ 
					am=false; 
					an=4; 
					repaint(); 
				} 
			} 
			break; 
			case 8://附身 
			if(m>=30+3*s[8]*s[8]&&!tran) 
			{ 
				m-=30+3*s[8]*s[8]; 
				tran=true; 
				if(t) 
				t=!t; 
				spi[0].p=150; 
				lm+=lm*10*s[8]/100; 
				l+=l*10*s[8]/100; 
				spi[0].l=l; 
				d+=d*20*s[8]/100; 
				D=d+addPdP*d/100+addPd; 
				spi[0].d=D; 
				count=0; 
				am=false; 
				an=4; 
				repaint(); 
			} 
			break; 
			case 9://回血 
			if(m>=3*s[9]*s[9]) 
			{ 
				m-=3*s[9]*s[9]; 
				atw=new TI(this,10);				 
				am=false; 
			} 
			break; 
			case 10://回气 
			if(gold>=20*s[10]*mm/100) 
			{ 
				gold-=20*s[10]*mm/100; 
				atw=new TI(this,11); 
				am=false; 
			} 
			break; 
			case 11://普通攻击 
			atw=new TI(this,0); 
			if(t) 
			t=!t; 
			am=false; 
			an=0; 
			break; 
			case 12://敌人攻击 
			atw=new TI(this,9); 
			atw.j=an; 
			break; 
			case 22://熊攻击 
			atw=new TI(this,2); 
			break; 
			case 21://狼攻击 
			atw=new TI(this,1); 
			break; 
		} 
		if(atw!=null) 
		{ 
			if(atw.type==4) 
			ti.schedule(atw,0,200); 
			else 
			ti.schedule(atw,0,250); 
		} 
	} 
	/*判断怪物掉出的宝是否角色已经拥有*/ 
	boolean hasWeapon(int s) 
	{ 
		boolean temp=false; 
		for(int ii=0;ii<6;ii++) 
		{ 
			if(weapon[ii]==s) 
			{ 
				temp=true; 
				break; 
			} 
		} 
		return(temp); 
	} 
	/*战斗场景控制*/ 
	public void fi(int n,int lvl) 
	{ 
		/*spi为8位数组,spi[0]为主角, spi[1]为狼,spi[2]为熊,spi[3]为龙, 其余的为敌人*/ 
		if(n!=0) 
		{ 
			try 
			{ 
				attackBg=Image.createImage("/attackBg"+String.valueOf(rR(2))+".png"); 
			} 
			catch(Exception e) 
			{ 
			} 
			if(GM.playOn) 
			{ 
				GM.sc.closeSound(map); 
				attack=GM.sc.createPlayer("/attack.mid",1000); 
				GM.sc.playSound(attack); 
			} 
			//removeCommand(gmenu); 
			//addCommand(choose); 
			for(int i=0;i(pro.length()-1)/8*18) 
		Offy=0; 
		g.setClip(0,0,176,208); 
	} 
	/*传送菜单*/		 
	public void drawTranMenu(Graphics g) 
	{ 
		g.setColor(0,0,100); 
		g.fillRoundRect(45,20,86,120,30,30); 
		g.setColor(rR(255),rR(255),rR(255)); 
		g.drawRoundRect(45,20,86,120,30,30); 
		g.setColor(0); 
		g.drawRoundRect(44,19,88,122,30,30); 
		g.setColor(rR(255),rR(255),rR(255)); 
		g.drawRoundRect(43,18,90,124,30,30); 
		GM.sc.drawStringShadow(g,0x0000ff,0x0000ff,-1,"当前所在地:"+mapName[sl],88,2,17); 
		GM.sc.drawStringShadow(g,0,0,-1,"请选择你要前往的地方",88,152,17); 
		for(int k=0;k<6;k++) 
		{ 
			if(!task&&k==4) 
			continue; 
			if(!dlg[2]&&k==5) 
			continue; 
			if(k==i) 
			GM.sc.drawStringShadow(g,0,0,0x00ff00,mapName[k],88,k*20+22,17); 
			else 
			GM.sc.drawStringShadow(g,0,0,-1,mapName[k],88,k*20+22,17); 
		}		 
	} 
	/*属性菜单*/ 
	public void drawPro(Graphics g) 
	{ 
		g.drawImage(proBg,0,0,0); 
		switch(i) 
		{ 
			case 0://属性显示 
			GM.sc.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"血:"+ts(l)+"/"+ts(lm),70,13,0); 
			GM.sc.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"气:"+ts(m)+"/"+ts(mm),70,31,0); 
			GM.sc.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"经验:"+ts(ex)+" / "+ts(m(le+1)),70,49,0); 
			GM.sc.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"银两:"+ts(gold),70,67,0); 
			GM.sc.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"攻击:"+ts(d)+"+"+ts(addPd+d*addPdP/100),70,85,0); 
			GM.sc.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"当前等级:"+ts(le),70,103,0); 
			GM.sc.drawStringShadow(g,0xffff00,0xffff00,0xff0000,"你可以在这里查看",64,139,0); 
			GM.sc.drawStringShadow(g,0xffff00,0xffff00,0xff0000,"竹庆的各项属性",64,157,0); 
			break; 
			case 1://技能显示 
			if(pro==null) 
			pro="你可以在这里升级竹庆的技能,竹庆的技能分召唤系,元素系,特质系和辅助系共四大系十一种,每种技能的效果以及需要的气值都会随着技能等级的提高而提高,同时升级的时候要注意,每种技能在升级后都必须隔3个人物等级才能继续升级"; 
			if(j<4) 
			{ 
				GM.sc.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"火球:"+(s[0]>0?"等级"+ts(s[0]):"未修炼"),70,13,0); 
				GM.sc.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"落星:"+(s[1]>0?"等级"+ts(s[1]):"未修炼"),70,38,0); 
				GM.sc.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"风残:"+(s[2]>0?"等级"+ts(s[2]):"未修炼"),70,63,0); 
				GM.sc.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"召狼:"+(s[3]>0?"等级"+ts(s[3]):"未修炼"),70,88,0); 
			} 
			else 
			if(j<8) 
			{ 
				GM.sc.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"召熊:"+(s[4]>0?"等级"+ts(s[4]):"未修炼"),70,13,0); 
				GM.sc.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"召龙:"+(s[5]>0?"等级"+ts(s[5]):"未修炼"),70,38,0); 
				GM.sc.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"隐身:"+(s[6]>0?"等级"+ts(s[6]):"未修炼"),70,63,0); 
				GM.sc.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"遁走:"+(s[7]>0?"等级"+ts(s[7]):"未修炼"),70,88,0); 
			}	 
			else 
			{ 
				GM.sc.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"附身:"+(s[8]>0?"等级"+ts(s[8]):"未修炼"),  70,13,0); 
				GM.sc.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"治疗:"+(s[9]>0?"等级"+ts(s[9]):"未修炼"),  70,38,0); 
				GM.sc.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"回气:"+(s[10]>0?"等级"+ts(s[10]):"未修炼"),70,63,0); 
			}		                                                                                                
			GM.sc.drawStringShadow(g,0,0,-1,"剩余技能点:"+ts(sp),66,108,0); 
			g.setColor(0); 
			g.drawRect(68,12+j%4*25,80,20); 
			g.setColor(-1); 
			g.drawRect(67,11+j%4*25,82,22); 
			g.setColor(0); 
			g.drawRect(66,10+j%4*25,84,24); 
			drawScrollPro(g); 
			break; 
			case 2://任务显示 
			if(pro==null) 
			pro="这里显示的是竹庆需要完成的任务,当任务还没接到的时候不会显示在这里,接到的任务会在这里显示其完成度"; 
			if(task) 
			{ 
				GM.sc.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"收集物品",70,13,0); 
				GM.sc.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"鹤灵草:"+(tn[0]==10?"完成":ts(tn[0])),70,31,0); 
				GM.sc.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"狼牙:"+(tn[1]==5?"完成":ts(tn[1])),70,49,0); 
				GM.sc.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"米云香:"+(tn[2]==10?"完成":ts(tn[2])),70,67,0); 
				GM.sc.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"雪岩:"+(tn[3]==5?"完成":ts(tn[3])),70,85,0); 
				if(task2) 
				GM.sc.drawStringShadow(g,0x0000ff,0x0000ff,0x00ff00,"虎皮: "+(tn[4]==20?"完成":ts(tn[4])),70,103,0); 
			} 
			drawScrollPro(g); 
			break; 
			case 3://装备显示 
			String temp=new String(); 
			switch(weapon[j]) 
			{ 
				case 0: 
				temp="短剑"; 
				break; 
				case 1: 
				temp="夺魂剑"; 
				break; 
				case 2: 
				temp="守护剑"; 
				break; 
				case 3: 
				temp="青剑"; 
				break; 
				case 4: 
				temp="游龙剑"; 
				break; 
				case 5: 
				temp="紫砂剑"; 
				break; 
				case 6: 
				temp="阔剑"; 
				break; 
				case 7: 
				temp="日月剑"; 
				break; 
				case 8: 
				temp="战神剑"; 
				break; 
			} 
			if(weapon[j]!=9) 
			{ 
				if(curweapon!=weapon[j]) 
				GM.sc.drawStringShadow(g,0xff0000,0xff0000,-1,temp,90,18,0); 
				else 
				GM.sc.drawStringShadow(g,0x00ff00,0x00ff00,-1,temp,90,18,0); 
				g.setColor(97,66,31); 
				g.fillRect(70,45,85,30); 
				g.setColor(0); 
				g.drawRect(70,45,85,30); 
				g.setColor(-1); 
				g.drawRect(69,44,87,32); 
				g.setColor(0); 
				g.drawRect(68,43,89,34); 
				GM.sc.drawClipImage(g,GM.arrow,75-Offx,60,5,10,0,0); 
				GM.sc.drawClipImage(g,GM.arrow,144+Offx,60,5,10,5,0);	 
				Offx+=2; 
				if(Offx==4) 
				Offx=0;					 
				g.drawImage(sword[weapon[j]],80,50,0); 
			} 
			GM.sc.drawStringShadow(g,0,0,-1,"绿色为当前装备",64,90,0); 
			GM.sc.drawStringShadow(g,-1,-1,0,"可以按"1"卖掉",64,108,0); 
//			g.setColor(rR(255),rR(255),rR(255)); 
//			g.drawRect(69+j%2*55,17+j/2*23,35,16);				 
//			g.setColor(rR(255),rR(255),rR(255)); 
//			g.drawRect(68+j%2*55,16+j/2*23,37,18);					 
//			if(curweapon!=9)//如果当前装备有武器就用蓝色框显示 
//			{ 
//				for(int iii=0;iii<6;iii++) 
//				{ 
//					if(weapon[iii]==curweapon) 
//					{ 
//						GM.sc.drawStringShadow(g,0xff0000,0xff0000,-1,temp,70+ii%2*55,18+ii/2*23,0); 
//						break; 
//					} 
//				} 
//			}			 
			if(weapon[j]!=9) 
			{ 
				g.setColor(255,255,255);					 
				switch(weapon[j]) 
				{ 
					case 0: 
					pro="这是一柄不起眼的短剑,初期用来防身还是不错的哟,物理攻击力加5,吸血10%"; 
					break; 
					case 1: 
					pro="这柄剑不知道缠绕了多少远古的亡魂,使它拥有着神奇的力量,物理攻击力加10,吸血25%"; 
					break; 
					case 2: 
					pro="上古之神曾经在开天之时遗留下了这柄神器,浸润着日月精华的守护剑光芒四射,物理攻击力加15,吸血45%"; 
					break; 
					case 3: 
					pro="不知是哪位侠客遗忘的这柄剑,貌似用来砍砍山贼倒是不错,技能攻击力加10%"; 
					break; 
					case 4: 
					pro="飞龙在天,游龙在野,透过这柄宝剑,仿佛能听见神龙的呼啸之音,技能攻击力加20%"; 
					break; 
					case 5: 
					pro="传说太上老君在练丹的时候不小心将自己的拐杖扔进了炉子,结果锻出了这天下无敌的神器,技能攻击力加30%"; 
					break; 
					case 6: 
					pro="刃口有点锈迹,这剑貌似一个粗糙的铁匠打制出来的,基础攻击力加15%"; 
					break; 
					case 7: 
					pro="日月争辉,这宝贝同时拥有太阳的炽热和月神的至柔,真乃英雄的上上之选 ,基础攻击力加25%"; 
					break; 
					case 8: 
					pro="战争之鼓给这柄神器注入了伟大的力量,此剑在手,连五岳都能劈开,基础攻击力加35%";	 
					break; 
				} 
				drawScrollPro(g); 
			} 
			temp=null; 
			break;				 
		} 
		g.setColor(rR(255),rR(255),rR(255)); 
		g.drawRect(5,25+i*40,41,27); 
		g.setColor(rR(255),rR(255),rR(255)); 
		g.drawRect(4,24+i*40,43,29); 
	}		 
	/*UI绘制*/ 
	public void drawUI(Graphics g) 
	{ 
		g.drawImage(UI,0,208,36); 
		g.setColor(0,0,255); 
		g.fillRect(104,h-13+offsetY,42*m/mm,2); 
		g.setColor(255,0,0); 
		g.fillRect(33,h-13+offsetY,41*l/lm,2); 
		g.setColor(255,255,0); 
		g.fillRect(52,h-25+offsetY,77*(ex-m(le))/(m(le+1)-m(le)),1);		 
	} 
	/*战斗菜单绘制*/ 
	public void drawAttackMenu(Graphics g) 
	{ 
		g.setFont(Loading.myfont); 
		g.setColor(153,117,26); 
		g.fillRect(20,20,130,20); 
		g.setColor(0); 
		g.drawRect(20,20,130,20); 
		g.setColor(-1); 
		g.drawRect(19,19,132,22); 
		g.setColor(0); 
		g.drawRect(18,18,134,24); 
		g.setColor(0,0,255); 
		g.setClip(20,20,130,20); 
		for(int iii=0;iii0)||i==11) 
			GM.sc.drawStringShadow(g,0x0000ff,0x0000ff,-1,attackMenu[iii],30-i*40+iii*40,21,0); 
		} 
		g.setClip(0,0,176,208); 
		GM.sc.drawClipImage(g,GM.arrow,12-Offx,25,5,10,0,0); 
		GM.sc.drawClipImage(g,GM.arrow,154+Offx,25,5,10,5,0);		 
		Offx+=3; 
		if(Offx==9) 
		Offx=0;	 
	} 
	/*胜利画面绘制*/ 
	public void drawWin(Graphics g,Vector string) 
	{ 
		int h=(string.size()+1)*30; 
		g.setColor(0,0,100); 
		g.fillRoundRect(10,20,156,h,30,30); 
		g.setColor(rR(255),rR(255),rR(255)); 
		g.drawRoundRect(10,20,156,h,30,30); 
		g.setColor(0); 
		g.drawRoundRect(9,19,158,h+2,30,30); 
		g.setColor(rR(255),rR(255),rR(255)); 
		g.drawRoundRect(8,18,160,h+2,30,30); 
		g.setColor(0xffff00); 
		GM.sc.drawStringShadow(g,0,0,-1,"战斗胜利",88,25,17); 
		g.setColor(-1); 
		for(int ii=0;ii10) 
//					g.drawImage(screen[1],p*16,q*16,0); 
//					else 
//					g.drawImage(screen[iii<=16?iii:(iii-screenStart[sl]+16)],p*16,q*16,0);//用主角触发战斗前所在的Tile的图片铺成战斗场景 
//				} 
				for(int i=0;i<8;i++) 
				{ 
					if(spi[i]!=null) 
					{				 
						if(i>3) 
						{ 
							if(spi[i].lv<4||spi[i].lv>6) 
							{ 
								if(spi[i].lv!=15) 
								{ 
									g.setClip(spi[i].x,spi[i].y,16,32); 
									g.drawImage(atpic,spi[i].x-spi[i].p%10*16,spi[i].y-spi[i].p/10*32,0); 
								} 
								else 
								{ 
									g.setClip(spi[i].x,spi[i].y,32,32); 
									g.drawImage(atpic,spi[i].x,spi[i].y-spi[i].p/10*32-spi[i].p%10*32,0); 
								} 
							} 
							else 
							{ 
								g.setClip(spi[i].x,spi[i].y,32,16); 
								g.drawImage(atpic,spi[i].x,spi[i].y-spi[i].p/10*32-spi[i].p%10*16,0); 
							} 
						} 
						else 
						if(i==1) 
						{ 
							g.setClip(spi[1].x,spi[1].y,32,16); 
							g.drawImage(atpic,spi[1].x,spi[1].y-spi[1].p/10*32-spi[1].p%10*16,0); 
						} 
						else 
						{ 
							g.setClip(spi[i].x,spi[i].y,16,32); 
							g.drawImage(atpic,spi[i].x-spi[i].p%10*16,spi[i].y-spi[i].p/10*32,0); 
						} 
						g.setClip(0,0,176,208); 
						g.setColor(0,0,0); 
						if(i<4&&i!=0) 
						g.drawRect(6,(3-i)*32+15+64,5,16); 
						else 
						g.drawRect(152,(i-4)*32+15+64,5,16); 
						g.setColor(255,0,0); 
						if(i>=4) 
						g.fillRect(153,(i-3)*32-16*spi[i].l/(spi[i].lv*spi[i].lv*15+10)+64,4,16*spi[i].l/(spi[i].lv*spi[i].lv*15+10)-1); 
						else 
						switch(i) 
						{ 
							case 1://狼 
							g.fillRect(7,96-16*spi[1].l/(8*s[3]*s[3]+40)+64,4,16*spi[1].l/(8*s[3]*s[3]+40)-1); 
							break; 
							case 2://熊 
							g.fillRect(7,64-16*spi[2].l/(20*s[4]*s[4]+60)+64,4,16*spi[2].l/(20*s[4]*s[4]+60)-1); 
							break; 
							case 3://龙 
							g.fillRect(7,32-16*spi[3].l/(10*s[5]*s[5]+40)+64,4,16*spi[3].l/(10*s[5]*s[5]+40)-1); 
							break; 
						} 
					} 
				} 
				if(spic0!=null) 
				g.drawImage(spic0,sx,sy,0); 
				if(atw!=null) 
				{ 
					if(atw.type==5)//落星效果 
					{ 
						switch(atw.s) 
						{ 
							case 2: 
							for(int ii=0;ii<5;ii++) 
							{ 
								g.drawImage(spic[1],rR(60)+112,0,0); 
								g.drawImage(spic[1],rR(60)+112,32,0); 
							} 
							break; 
							case 3: 
							for(int ii=0;ii<5;ii++) 
							{ 
								g.drawImage(spic[1],rR(60)+112,0,0); 
								g.drawImage(spic[1],rR(60)+112,32,0); 
								g.drawImage(spic[1],rR(60)+112,64,0); 
								g.drawImage(spic[1],rR(60)+112,96,0); 
							} 
							break; 
							case 4:	 
							for(int ii=0;ii<5;ii++) 
							{ 
								g.drawImage(spic[1],rR(60)+112,0,0); 
								g.drawImage(spic[1],rR(60)+112,32,0); 
								g.drawImage(spic[1],rR(60)+112,64,0); 
								g.drawImage(spic[1],rR(60)+112,96,0); 
								g.drawImage(spic[1],rR(60)+112,128,0); 
								g.drawImage(spic[1],rR(60)+112,160,0); 
							} 
							break; 
							case 5: 
							for(int ii=0;ii<5;ii++) 
							{ 
								g.drawImage(spic[1],rR(60)+112,0,0); 
								g.drawImage(spic[1],rR(60)+112,32,0); 
								g.drawImage(spic[1],rR(60)+112,64,0); 
								g.drawImage(spic[1],rR(60)+112,96,0); 
								g.drawImage(spic[1],rR(60)+112,128,0); 
								g.drawImage(spic[1],rR(60)+112,160,0); 
								g.drawImage(spic[1],rR(60)+112,192,0); 
							} 
							for(int i=0;i<4;i++) 
							{ 
								if(spi[i+4]!=null) 
								{ 
									if(spi[i+4].lv!=15) 
									spi[i+4].l-=(2*s[1]*s[1]+10)*(100+addMd)/100; 
								} 
							}					 
							break; 
							case 6: 
							for(int i=0;i<4;i++) 
							{ 
								if(spi[i+4]!=null) 
								{ 
									if(spi[i+4].l<=0) 
									{ 
										sn+=100*spi[i+4].lv*spi[i+4].lv/le; 
										nn+=4*spi[i+4].lv*spi[i+4].lv;					 
										spi[i+4]=null; 
									} 
								} 
							} 
							break; 
							case 7: 
							an=4; 
							cancelATW(); 
							repaint(); 
							break; 
							default: 
							break; 
						} 
					} 
					else														 
					if(atw.type==6)//风残效果 
					{ 
						switch(atw.s) 
						{ 
							case 2: 
							for(int ii=0;ii<6;ii++) 
							{ 
								g.drawImage(spic[2],0,rR(128),0); 
								g.drawImage(spic[2],32,rR(128),0); 
							} 
							break; 
							case 3: 
							for(int ii=0;ii<6;ii++) 
							{ 
								g.drawImage(spic[2],0,rR(128),0); 
								g.drawImage(spic[2],32,rR(128),0); 
								g.drawImage(spic[2],64,rR(128),0); 
								g.drawImage(spic[2],96,rR(128),0); 
							} 
							break; 
							case 4: 
							for(int ii=0;ii<6;ii++) 
							{ 
								g.drawImage(spic[2],0,rR(128),0); 
								g.drawImage(spic[2],32,rR(128),0); 
								g.drawImage(spic[2],64,rR(128),0); 
								g.drawImage(spic[2],96,rR(128),0); 
								g.drawImage(spic[2],128,rR(128),0); 
							} 
							break; 
							case 5: 
							for(int ii=0;ii<6;ii++) 
							{ 
								g.drawImage(spic[2],0,rR(128),0); 
								g.drawImage(spic[2],32,rR(128),0); 
								g.drawImage(spic[2],64,rR(128),0); 
								g.drawImage(spic[2],96,rR(128),0); 
								g.drawImage(spic[2],128,rR(128),0); 
								g.drawImage(spic[2],160,rR(128),0); 
							} 
							for(int i=0;i<4;i++) 
							{ 
								if(spi[i+4]!=null) 
								{ 
									if(spi[i+4].lv!=15) 
									spi[i+4].l-=3*s[2]*lm/100*(100+addMd)/100; 
								} 
							}				 
							break; 
							case 6: 
							for(int i=0;i<4;i++) 
							{ 
								if(spi[i+4]!=null) 
								{ 
									if(spi[i+4].l<=0) 
									{ 
										sn+=100*spi[i+4].lv*spi[i+4].lv/le; 
										nn+=4*spi[i+4].lv*spi[i+4].lv;					 
										spi[i+4]=null; 
									} 
								} 
							} 
							break; 
							case 7: 
							an=4; 
							cancelATW(); 
							repaint(); 
							break; 
							default: 
							break; 
						} 
					} 
				}	 
				drawUI(g); 
			} 
			/*战斗菜单绘制*/ 
			if(am) 
			{ 
				drawAttackMenu(g); 
			}		 
			/*属性菜单绘制*/	 
			if(pm) 
			{ 
				drawPro(g); 
			}	 
			if(!atm&&!pm)//主要场景绘制	 
			{	 
				int iii; 
				if(atc!=null) 
				{ 
					atc.cancel(); 
					while(atc.cancel()) 
					{ 
					} 
					atc=null; 
				}			 
				/*场景绘制*/ 
				for(v=y0/16;v<=(y0+h-1)/16;v++) 
				{ 
					for(u=x0/16;u<=(x0+w-1)/16;u++) 
					{ 
						o=v*W[sl]+u; 
						if(o>=0&&o=x0/16&&NPC[i].x<=x0/16+w/16&&NPC[i].y>=y0/16&&NPC[i].y<=y0/16+h/16) 
					{ 
						g.setClip(NPC[i].x*16-x0,NPC[i].y*16-y0,16,16); 
						g.drawImage(NPCPic,NPC[i].x*16-x0-NPC[i].l%6*16,NPC[i].y*16-y0-NPC[i].l/6*16,0); 
					} 
				} 
				g.setClip(0,0,176,208); 
				/*角色绘制*/ 
				g.setClip(x-x0,y-y0,16,32); 
				g.drawImage(poc,x-x0-dr%3*16,y-y0-32*(dr/3),0); 
				g.setClip(0,0,176,208); 
				/*判断有遮挡效果的精灵绘制*/ 
				for(int i=0;i=x&&NPC[i].x*16<=x+16&&NPC[i].y*16<=y+31&&NPC[i].y*16>=y+15) 
					{ 
						g.setClip(NPC[i].x*16-x0,NPC[i].y*16-y0,16,16); 
						g.drawImage(NPCPic,NPC[i].x*16-x0-NPC[i].l%6*16,NPC[i].y*16-y0-NPC[i].l/6*16,0); 
					} 
				} 
				g.setClip(0,0,176,208); 
				/*天气绘制*/ 
				drawWeather(g);				 
				/*UI绘制*/ 
				drawUI(g); 
				/*对话显示*/ 
				if(me) 
				{ 
					//addCommand(con); 
					//removeCommand(gmenu); 
					drawDlg(g); 
				} 
				/*提示信息显示*/ 
				if(tip!=null) 
				{		 
					//addCommand(con); 
					//removeCommand(gmenu);		 
					g.setColor(0xffffff); 
					createDlgPic(tip); 
					g.drawImage(dlgpic,(w-dlgpic.getWidth())/2,(h-dlgpic.getHeight())/2,0); 
					for(int i=0;i