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