- 注册时间
- 2007-7-16
- 最后登录
- 1970-1-1
|
发表于 2007-7-16 14:58:48
|
显示全部楼层
费什么劲,把源代码拿来改一下就ok了
《勇者斗恶龙》原代码:
#define SItem 0
#define SSkill 4422
#define SMeven 12222
#define SEven 21582
#define SMon 29262
#define SMap 145014
#define SLogo 444534
#define SFlash 448246
#define SHeCheng 483158
#define SMiGong 522358
#define SGK 542006
#define SJJ 546718
#define SDialog 546817
#define F2 29//??????
int Step;//Step==0是触发随机战斗
char Ep[10]={1,2,3,5,7,10,15,30,50,100};
char BitN[8]={1,2,4,8,16,32,64,128};//位处理开关有用
char mon_kind[11][9]={
"史莱姆系"," 龙系 "," 兽系 "," 鸟系 "," 植物系 ",
" 虫系 "," 恶魔系 "," 不死系 "," 物质系 "," 水系 ","???系"
};
int mon[13]={0,1,27,58,90,117,144,170,200,227,259,291,313};//每个种族第一只怪兽的编号
char hero[4][2][32],mask[4][2][32]; //主角的图形
char cursor[2][8]= //光标
{
0x80,0xc0,0xe0,0xf0,0xf0,0xe0,0xc0,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
struct monster
{
char name[11];
char explain[25];
char grade;
char size;
char grow[7];
char skill[3];
long parent[2];
char picture[48][6];
char fast[27];//0火1闪2爆3风4电5冰6幻7眠8死9吸10封11乱12弱13缓14危15终16炎17雪18毒19麻20咒21停22舞23口24呼25剑26水
};
struct item
{
long price;
char name[9];
char explain[25];
char mode; //bit0->出售 bit1->树国可用 bit2->异界可用 bit3->战斗可用 bit4->单体可用 bit5 ->对敌我
char even[30];
char pic[2][32];
};
struct mons
{
char name[5]; //名字
int ability[8];//LV,HP,MP,攻击,防御,敏捷,智力,野性
int monk[6]; //种族,编号,性别,父亲,母亲,++
long Exp,NetExp; //当前级经验,升级所需经验
char skill[20];//可习的技能
char skill_num;//已习得的技能书
int LV;
int HP;
int MP;
int state; //bit0->中毒 bit1->诅咒 bit2 ->麻痹 bit3 ->混乱 bit4->睡眠
};
struct skill
{
char name[9];
char explain[25];
int ability[8];
char mode;
char next;
};
char Page,SLine,X,Y,Drct;//地图显示的相关参数
char MazeMap[16][8][10];//迷宫地形
char MazeSor[17][32]; //迷宫地形单元
char MazeFlag[16]; //标志是否走过
char MazeMNum[16]; //保存每个pages对应的地图号
char MazeFloor[3]; //0-〉一共有多少层,1-〉起此lv,3->当前层
char MazeMon[5]; //可能出现的怪兽
char MazeSK; //迷宫单元类型
char MaNP; //迷宫下一入口所在pages
char MaNX; //迷宫下入口X
char MaNY; ////迷宫下入口Y
int result; //战斗结果辅助参数(-1死亡 0 未分胜负 1 胜利)
int order[6][3]; //命令
struct monster mon_tmp;
struct skill ski_tmp;
char mon_fast[6][27]; //战斗处理时怪兽抗性
char Screen[1600];
char Meven[80];
char f_mon;//怪兽数据文件指针
long F_exp;//牧场怪兽获得的exp
char delay_time=80;//游戏速度
char Key_up=20;
char Key_down=21;
char Key_left=23;
char Key_right=22;
char Key_enter=13;
char Key_esc=27;
char Key_select=31;
char Key_maps=30;
long money;
char heroname[6]="hero";
char WinGK; //竞技场通过的级别
char myitem[20];//最多拥有的道具
char saveitem[40];//最多可保存的道具(银行)
char myitem_num,saveitem_num;
char mon_num[2]; //0是敌方怪兽数,1是我方携带的怪兽数
char field_num,field_egg; //保存牧场怪兽和怪兽蛋个数
struct mons field_mon[23]; //0~2敌方 3~22牧场 3~3+mon_num[1]携带的怪兽
char flag_mon[312/4+1]; //怪兽发现和交配开关
char itm[20]; //物品关联号
int gold_num=0;
char queen_num=0;
char win_gk[15]={0};
char queen_flg=0;
int keyUD;//上下按键,兼顾其他按键
int keyLR;//左右按键
void GetKey(int mode)
{
char key;
key=0;
keyUD=0;keyLR=0;
while(keyUD+keyLR==0)
{
Delay(delay_time);
while((key=CheckKey(128))==0);
if ( key==Key_up ) keyUD=-1;
else if( key==Key_down ) keyUD=1;
else if( key==Key_left ) keyLR=-1;
else if( key==Key_right) keyLR=1;
else if( key==Key_enter) keyUD=2;
else if( key==Key_esc ) keyUD=4;
else if((key==Key_select)&&mode!=0) keyUD=8;
else if((key==Key_maps)&&mode==2) keyUD=16;
}
}
int Secrt(long addr,long num)
{
int j,k;
long i;
j=0;
for(i=0;i<num;i++)
{
k=*(addr+i);
j=j+k*k-k*k%137;
}
return j;
}
int RandN(int num)
{
return num+(rand()%40-20)*num/100;
}
void KeyPas(int time)
{
Delay(time);
while(CheckKey(128)==0);
}
int GetKind(int num)
{
int i;
for(i=2;i<13;i++)
{
if(num+1<mon) break;
}
return i-2;
}
void MsgBox(char xt,char yt,char ww,char hw,long addr,int mode)
{
int i,len;
char tmp[25];
Box(xt,yt,xt+ww*6+2,yt+hw*15,1,0);
Box(xt,yt,xt+ww*6+2,yt+hw*15,0,2);
len=strlen(addr);
tmp[ww]=0;
while(len>0)
{
Box(xt+2,yt+3,xt+ww*6+1,yt+hw*15-1,1,0);
for(i=0;i<len && i<hw*ww;i=i+ww)
{
memcpy(tmp,addr+i,ww);
TextOut(xt+2,yt+i/ww*15+3,tmp,0x41);
}
addr=addr+i;
len=len-i;
if(mode)
{
KeyPas(300);
while(CheckKey(128)==0) {}
}
}
}
void ShowAt(long addr)
{
Box(1,64,158,78,1,0);
Box(1,64,158,78,0,2);
TextOut(3,66,addr,0x41);
Delay(800);
}
int ShowFlash(int pos,int ki,int num)
{
int i;
char flash[480];
if(pos>=3) return -1;
if(mon_num[0]==1) pos=1;
GetBlock(0,0,160,80,0,Screen);
if(ki==0)//160X80
{
}
else if(ki==1)//80X80
{//9600
}
else if(ki==2)//80X48
{//13600
for(i=-4;i<=10;i++)
{
fseek(f_mon,SFlash+13600+960*num+480*((i+5)%2),0);
fread(flash,1,480,f_mon);
WriteBlock(0,0,160,80,1,Screen);
if(i%2==0) WriteBlock(16*i,14,80,48,3,flash);
else WriteBlock(16*i,14,80,48,3,flash+480);
Delay(100);
Refresh();
}
WriteBlock(0,0,160,80,1,Screen);
}
else if(ki==3)//48X48
{//16480
fseek(f_mon,SFlash+16480+4*288*num,0);
for(i=0;i<4;i++)
{
fread(flash,1,288,f_mon);
WriteBlock(0,0,160,80,1,Screen);
WriteBlock(3+53*pos,14,48,48,3,flash);
Refresh();
Delay(200);
}
}
else if(ki==4)//160X48
{
}
WriteBlock(0,0,160,80,1,Screen);
Refresh();
}
//初始化迷宫数据
void InitMi(int mx,int my) //生成随机地图
{
int A[6][6];
char flag[6][6],m[6][6];
int p,q,f,r;
int x,y,xx,yy,s;
srand(Getms());
for(p=0;p<=mx+1;p++) for(xx=0;xx<=my+1;xx++) { A[p][xx]=0;flag[p][xx]=0;m[p][xx]=0;}
for(p=0;p<=mx+1;p++) { A[p][my+1]=-1; A[p][0]=-1; }
for(p=0;p<=my+1;p++) { A[mx+1][p]=-1; A[0][p]=-1; }
x=mx-1;
y=my;
s=1;
A[x][y]=s;
do
{
f=0;
for(q=my;q>=1;q--)
for(p=mx;p>=1;p--)
{
if(A[p][q]>0) continue;
do
{
r=rand()%4;
xx=p+(r==0)-(r==2);
yy=q+(r==1)-(r==3);
}while(A[xx][yy]<1);
x=p;
y=q;
s=s+100;
if(flag[xx][yy]==0) flag[xx][yy]=xx+yy;
flag[p][q]=flag[xx][yy];
A[x][y]=s;
while(!(x==2&&y==1))
{
if(A[x-1][y]*A[x][y-1]*A[x+1][y]*A[x][y+1]==0)
{
do
{
r=rand()%4;
xx=x+(r==1)-(r==3);
yy=y+(r==0)-(r==2);
}while(A[xx][yy]!=0);
x=xx;
y=yy;
s++;
A[x][y]=s;
}
else break;
}
点击浏览该文件
[此贴子已经被作者于2006-7-11 9:12:46编辑过]2006-7-11 9:02:00 流风
头衔:轩听雨阁
等级:初级会员
文章:416
积分:1118
门派:无门无派
注册:2005年5月8日第 2 楼 QQ
--------------------------------------------------------------------------------
f=1;
}
}while(f);
for(x=0;x<=mx;x++)
{
for(y=0;y<=my;y++)
{
if(abs(A[x][y]-A[x+1][y])>1
&& (flag[x][y]!=flag[x+1][y] || flag[x][y]*flag[x+1][y]==0) && (rand()%3>0 || x==0 || x==mx))
{
m[x][y]=m[x][y]|4;
m[x+1][y]=m[x+1][y]|1;
}
if(abs(A[x][y]-A[x][y+1])>1
&& (flag[x][y]!=flag[x][y+1] || flag[x][y]*flag[x][y+1]==0) && (rand()%3>0 || y==0 || y==my))
{
m[x][y]=m[x][y]|8;
m[x][y+1]=m[x][y+1]|2;
}
}
}
MazeSK=rand()%6;
fseek(f_mon,SMiGong+MazeSK*544,0);
fread(MazeSor,1,544,f_mon);
p=rand()%20;
for(x=1;x<=mx;x++)
{
for(y=1;y<=my;y++)
{
MazeFlag[y+x*mx-mx-1]=0;
m[y][x]=15-m[y][x];
if(p<3)
{
MazeMNum[y+x*mx-mx-1]=p*16+m[y][x];
}
else
{
MazeMNum[y+x*mx-mx-1]=48+5*m[y][x]+rand()%5;
}
fseek(f_mon,SMiGong+544*6+MazeMNum[y+x*mx-mx-1]*80,0);
fread(MazeMap[y+x*mx-mx-1],1,80,f_mon);
}
}
MaNP=rand()%(mx*my);
do
{
MaNX=1+rand()%8;
MaNY=1+rand()%6;
}while(MazeMap[MaNP][MaNY][MaNX]!=0);
MazeMap[MaNP][MaNY][MaNX]=15;
MaNX=40+MaNP%mx*20+2*MaNX;
MaNY=8+MaNP/mx*16+2*MaNY;
Page=rand()%(mx*my);
do
{
x=1+rand()%8;
y=1+rand()%6;
}while(MazeMap[Page][y][x]!=0);
Step=20;
X=x;
Drct=1;
if(y==1)
{
Y=1;
SLine=0;
}
else if(y==6)
{
SLine=3;
Y=3;
}
else
{
Y=2;
SLine=y-2;
}
}
//怪兽交配结果判断
int Born(int prnt1,int k1,int prnt2,int k2)
{
int dat[40][2],i;
fseek(f_mon,SHeCheng+11*40*4+prnt1*120,0);
fread(dat,1,120,f_mon);
for(i=0;i<30;i++)
{
if( dat[0]==prnt2+12 || dat[0]==k2+1) return dat[1]-12;
}
fseek(f_mon,SHeCheng+160*k1,0);
fread(dat,1,160,f_mon);
for(i=0;i<40;i++)
{
if(dat[0]==prnt2+12 || dat[0]==k2+1) return dat[1]-12;
}
return prnt1;
}
long SelectBoxH(char xt,char yt,char ww,char hw,char n,long addr,int len,int mode)
{
int i,j;
char tmp[25];
tmp[ww]=0;
i=mode;
Box(xt,yt,xt+ww*6+8,yt+hw*15-1,1,0);
Box(xt,yt,xt+ww*6+8,yt+hw*15-1,0,2);
for(j=0;j<hw;j++)
{
memcpy(tmp,addr+j*len,ww);
TextOut(xt+8,yt+j*15+2,tmp,0x41);
}
WriteBlock(xt+2,yt+i*15+3,4,8,0x41,cursor[0]);
while(1)
{
WriteBlock(xt+2,yt+i*15+3,4,8,0x41,cursor[0]);
Delay(200-delay_time);
GetKey(0);
if(keyUD==4) {Delay(200-delay_time); return -1;}
if(keyUD==2) {Delay(200-delay_time); return i;}
WriteBlock(xt+2,yt+i*15+3,4,8,0x41,cursor[1]);
i=(i+keyUD+keyLR+hw)%hw;
}
}
int SelectBoxT(char xt,char yt,char ww,char hw,char n,long addr,int len,int mode)
{
int i,j,basic,pages,xd;
char tmp[25];
char fg[3];
fg[0]=0x70;
fg[1]=0x50;
fg[2]=0x70;
tmp[ww]=0;
basic=mode/hw;
i=mode-basic*hw;
pages=(n-1)/hw+1;
xd=xt+ww*6+6-5*pages;
Box(xt,yt,xt+ww*6+8,yt+hw*15+3,1,0);
Box(xt,yt,xt+ww*6+8,yt+hw*15+1,0,2);
for(j=0;j<pages;j++)
{
WriteBlock(xt+ww*6+1-j*5,yt+hw*15,5,3,0x41,fg);
}
Box(xd+basic*5,yt+hw*15-1,xd+4+basic*5,yt+hw*15+3,1,2);
for(j=0;j<hw && j+basic*hw<n;j++)
{
memcpy(tmp,addr+(j+basic*hw)*len,ww);
TextOut(xt+8,yt+j*15+2,tmp,0x41);
}
return j;
}
int SelectBox(char xt,char yt,char ww,char hw,char n,long addr,int len,int mode)
{
int i,pages,basic,l;
i=mode%hw;
pages=(n-1)/hw+1;
basic=mode/hw;
l=SelectBoxT(xt,yt,ww,hw,n,addr,len,mode);
while(1)
{
WriteBlock(xt+2,yt+i*15+3,4,8,0x41,cursor[0]);
Delay(200-delay_time);
GetKey(0);
if(keyUD==4) { Box(xt,yt,xt+ww*6+8,yt+hw*15+3,1,0); Delay(200-delay_time); return -1;}
if(keyUD==2) { Delay(200-delay_time); return basic*hw+i;}
if(keyLR!=0)
{
basic=(basic+keyLR+pages)%pages;
l=SelectBoxT(xt,yt,ww,hw,n,addr,len,basic*hw+i);
if(i>=l) { i=l-1;}
}
WriteBlock(xt+2,yt+i*15+3,4,8,0x41,cursor[1]);
i=(i+keyUD+l)%l;
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
int ShowMsg(long addr)
{
char yt;
if(Drct==0) yt=Y-1;
else if(Drct==1) yt=Y+1;
else yt=Y;
if(yt<=2) yt=48;
else yt=2;
MsgBox(6,yt,24,2,addr,1);
}
int ShowDialog(int num,int cou)
{
char yt;
char str[50];
int i;
fseek(f_mon,SDialog+num*24-24,0);
if(Drct==0) yt=Y-1;
else if(Drct==1) yt=Y+1;
else yt=Y;
if(yt<=2) yt=48;
else yt=2;
if(cou!=1) fread(str,1,48,f_mon);
else { fread(str,1,24,f_mon);memset(str+24,' ',24);}
str[48]=0;
MsgBox(6,yt,24,2,str,1);
for(i=2;i<cou;i++)
{
memcpy(str,str+24,24);
fread(str+24,1,24,f_mon);
MsgBox(6,yt,24,2,str,1);
}
Refresh();
}
int ShowMoney(int mode)
{
char Smoney[7];
int i;
long money_t;
i=5;
money_t=money;
strcpy(Smoney,"G ");
do
{
Smoney=money_t%10+'0';
money_t=money_t/10;
i--;
}while(money_t>0);
if(mode==0)
{
Rectangle(120,1,158,15,2);TextOut(122,3,Smoney,1);
}
else
{
Box(3,1,41,15,1,0);
Box(3,1,41,15,0,2);TextOut(5,3,Smoney,0x41);
}
}
void ShowHM()
{
int i;
for(i=0;i<mon_num[1];i++)
{
if(field_mon[i+3].HP<=0)
{
Block(3+53*i,1,49+53*i,11,0);
TextOut(10+53*i,1,"死亡",1);
}
else
{
Block(3+53*i,1,49+53*i,11,0);
Rectangle(3+53*i,1,49+53*i,5,1);
Rectangle(3+53*i,7,49+53*i,11,1);
if(field_mon[i+3].HP>field_mon[i+3].ability[1]) field_mon[i+3].HP=1;
if(field_mon[i+3].MP>field_mon[i+3].ability[2]) field_mon[i+3].MP=1;
if(field_mon[i+3].ability[1]>0) Block(3+53*i,2,3+46*field_mon[i+3].HP/field_mon[i+3].ability[1]+53*i,4,1);
if(field_mon[i+3].ability[2]>0) Block(3+53*i,8,3+46*field_mon[i+3].MP/field_mon[i+3].ability[2]+53*i,10,1);
}
}
}
//所有状态和HP,mp恢复
void Reset(int num)
{
field_mon[num].HP=field_mon[num].ability[1];
field_mon[num].MP=field_mon[num].ability[2];
field_mon[num].state=0;
}
//输入四个字母到addr
int PassName(long addr)
{
int i;
char key;
do
{
i=4;
MsgBox(60,25,6,1,addr,0);
getchar();
while((key=getchar())!=13)
{
if((key==F2 || key ==23)&&i>0)
{
i--;
}
else if(isprint(key)&&i<4)
{
*(addr+i)=key;
i++;
}
*(addr+i)=0;
MsgBox(60,25,6,1,addr,0);
Delay(200);
}
while(i<4) {*(addr+i)=' ';i++;}
*(addr+i)=0;
if(SelectBoxH(1,20,4,2,2,"确定放弃",4,0)==0) break;
Refresh();
MsgBox(6,48,24,2," 请输入名字",0);
}while(1);
}
int AB_ability(int num,int i,int cou,int mode) //对field_mon[num].ability[HP~野性]+=mode*cou
{
field_mon[num].ability=field_mon[num].ability+mode*cou;
if(field_mon[num].ability<0) field_mon[num].ability=0;
else if(field_mon[num].ability>999) field_mon[num].ability=999;
return field_mon[num].ability;
}
int AB_HP(int num,int cou,int mode)
{
if(field_mon[num].HP>0)
{
field_mon[num].HP=field_mon[num].HP+mode*cou;
if(field_mon[num].HP<0) field_mon[num].HP=0;
else if(field_mon[num].HP>field_mon[num].ability[1]) field_mon[num].HP=field_mon[num].ability[1];
return field_mon[num].HP;
}
}
2006-7-11 9:04:00 流风
头衔:轩听雨阁
等级:初级会员
文章:416
积分:1118
门派:无门无派
注册:2005年5月8日第 3 楼 QQ
--------------------------------------------------------------------------------
int AB_MP(int num,int cou,int mode)
{
if(field_mon[num].HP>0)
{
field_mon[num].MP=field_mon[num].MP+mode*cou;
if(field_mon[num].MP<0) field_mon[num].MP=0;
else if(field_mon[num].MP>field_mon[num].ability[2]) field_mon[num].MP=field_mon[num].ability[2];
return field_mon[num].MP;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
void DrawHero(int b,int x1,int y1)//画英雄的图像
{
WriteBlock(x1,y1,16,16,4,mask[Drct]);
WriteBlock(x1,y1,16,16,3,hero[Drct]);
}
//画地图
void DrawMap()//树国画地图
{
fseek(f_mon,SMap+Page*2560+SLine*320,0);
fread(Screen,1,1600,f_mon);
fseek(f_mon,SMeven+Page*80,0);
fread(Meven,1,80,f_mon);
WriteBlock(0,0,160,80,1,Screen);
DrawHero(0,X*16,16*Y);
Refresh();
}
//画迷宫地图
void DrawMMap()//画异国地图
{
int i,p;
if(MazeFlag[Page]==0)
{
for(i=0;i<8;i++)
{
for(p=0;p<10;p++)
{
if(MazeMap[Page][p]==0)
{
if(rand()%2==0) MazeMap[Page][p]=4+rand()%2;
if(rand()%97==3 || rand()%97==2) MazeMap[Page][p]=6+rand()%8*(rand()%2);
}
}
}
MazeFlag[Page]=1;
}
for(i=0;i<5;i++)
{
for(p=0;p<10;p++)
{
WriteBlock(p*16,i*16,16,16,1,MazeSor[MazeMap[Page][SLine+i][p]]);
}
}
GetBlock(0,0,160,80,0,Screen);
DrawHero(0,X*16,16*Y);
Refresh();
}
//画迷宫的小地图
void DrawMiMap(char mx,char my)//画小地图
{
int p,i;
char bm[48],tmp[10];
ClearScreen();
for(p=0;p<mx*my;p++)
{
if(MazeFlag[p]==1)
{
fseek(f_mon,SMiGong+544*6+128*80+MazeMNum[p]*48,0);
fread(bm,0,48,f_mon);
WriteBlock(40+p%mx*20,8+p/mx*16,20,16,1,bm);
}
}
WriteBlock(40+Page%mx*20+2*X,Page/mx*16+2*(SLine+Y)-6,16,16,3,MazeSor[14]);
sprintf(tmp,"%d/%d",MazeFloor[2]+1,MazeFloor[0]);
TextOut(2,2,tmp,1);
Refresh();
if(MazeFlag[MaNP]!=0)
{
Line(MaNX-3,MaNY-3,MaNX+3,MaNY+3,2);
Line(MaNX-3,MaNY+3,MaNX+3,MaNY-3,2);
}
do
{
GetKey(0);
}while(keyUD!=4);
Delay(200);
}
//树国滚屏
void MoveScreen(int ud)//树国滚屏
{
char line[320];
int i;
if(ud==1) fseek(f_mon,SMap+Page*2560+(SLine+5)*320,0);
else fseek(f_mon,SMap+Page*2560+(SLine-1)*320,0);
fread(line,1,320,f_mon);
SLine=SLine+ud;
for(i=1;i<=4;i++)
{
Refresh();
if(i!=1) Delay(delay_time);
if(ud==1)
{
WriteBlock(0,-4*i,160,80,1,Screen);
WriteBlock(0,80-4*i,160,16,1,line);
}
else if(ud==-1)
{
WriteBlock(0,4*i,160,80,1,Screen);
WriteBlock(0,-16+4*i,160,16,1,line);
}
if(i!=4) DrawHero(i%2,X*16,16*Y);
}
GetBlock(0,0,160,80,0,Screen);
DrawHero(0,X*16,16*Y);
Refresh();
}
//迷宫滚屏
void MoveMScreen(int ud)//异界滚屏
{
char line[320];
int i,p;
if(ud==1) i=5;
else i=-1;
for(p=0;p<10;p++)
{
WriteBlock(p*16,0,16,16,1,MazeSor[MazeMap[Page][SLine+i][p]]);
}
GetBlock(0,0,160,16,1,line);
SLine=SLine+ud;
for(i=1;i<=4;i++)
{
Refresh();
if(i!=1) Delay(delay_time);
if(ud==1)
{
WriteBlock(0,-4*i,160,80,1,Screen);
WriteBlock(0,80-4*i,160,16,1,line);
}
else if(ud==-1)
{
WriteBlock(0,4*i,160,80,1,Screen);
WriteBlock(0,-16+4*i,160,16,1,line);
}
if(i!=4) DrawHero(i%2,X*16,16*Y);
}
GetBlock(0,0,160,80,0,Screen);
DrawHero(0,X*16,16*Y);
Refresh();
}
void MoveHero(int ud,int lr)
{
int i;
if(ud==1||ud==-1)
{
if(Y==2 && SLine+Y+ud+2<8 && SLine+Y+ud-2>=0)
{
MoveScreen(ud);
return;
}
}
for(i=1;i<=4;i++)
{
Refresh();
if(i!=1) Delay(delay_time);
WriteBlock(0,0,160,80,1,Screen);
DrawHero(i%2,X*16+4*i*lr,Y*16+4*i*ud);
}
Refresh();
X=X+lr;
Y=Y+ud;
}
void MoveMHero(int ud,int lr)
{
int i;
if(ud==1||ud==-1)
{
if(Y==2 && SLine+Y+ud+2<8 && SLine+Y+ud-2>=0)
{
MoveMScreen(ud);
return;
}
}
for(i=1;i<=4;i++)
{
Refresh();
if(i!=1) Delay(delay_time);
WriteBlock(0,0,160,80,1,Screen);
DrawHero(i%2,X*16+4*i*lr,Y*16+4*i*ud);
}
Refresh();
X=X+lr;
Y=Y+ud;
}
void JumpTo(char t_page,char t_line,char t_x,char t_y)
{
Page=t_page;
SLine=t_line;
X=t_x;
Y=t_y;
DrawMap();
}
//怪兽状态1
void MonPage1(int i)
{
char tmp[15];
sprintf(tmp,"攻击 %d",field_mon.ability[3]);
TextOut(55,20,tmp,1);
sprintf(tmp,"防御 %d",field_mon.ability[4]);
TextOut(109,20,tmp,1);
sprintf(tmp,"敏捷 %d",field_mon.ability[5]);
TextOut(55,35,tmp,1);
sprintf(tmp,"智力 %d",field_mon.ability[6]);
TextOut(109,35,tmp,1);
sprintf(tmp,"野性 %d",field_mon.ability[7]);
TextOut(55,50,tmp,1);
sprintf(tmp,"H%d/%d",field_mon.HP,field_mon.ability[1]);
TextOut(55,65,tmp,1);
sprintf(tmp,"M%d/%d",field_mon.MP,field_mon.ability[2]);
TextOut(109,65,tmp,1);
}
2006-7-11 9:04:00 流风
头衔:轩听雨阁
等级:初级会员
文章:416
积分:1118
门派:无门无派
注册:2005年5月8日第 4 楼 QQ
--------------------------------------------------------------------------------
//怪兽状态2
void MonPage2(int i)
{
char tmp[25];
if(field_mon.monk[2]%2==0) sprintf(tmp,"Lv%d %s♂",field_mon.LV,mon_tmp.name);
else sprintf(tmp,"Lv%d %s♀",field_mon.LV,mon_tmp.name);
TextOut(55,20,tmp,1);
sprintf(tmp,"%s +%d",mon_kind[field_mon.monk[0]],field_mon.monk[5]);
TextOut(80,35,tmp,1);
sprintf(tmp," 主人.......%s",heroname);
TextOut(55,50,tmp,1);
if(field_mon.LV>=field_mon.ability[0])
{
sprintf(tmp,"到达等级上限");
}
else
{
sprintf(tmp,"升级需要 %d",field_mon.Exp-field_mon.NetExp);
}
TextOut(55,65,tmp,1);
}
//怪兽状态3
void MonPage3(int n)
{
int i;
char state[9];
for(i=0;i<field_mon[n].skill_num && i<8;i++)
{
fseek(f_mon,SSkill+52*field_mon[n].skill,0);
fread(state,1,9,f_mon);
TextOut(55+i%2*54,20+i/2*15,state,1);
}
}
//怪兽状态4
void MonPage4(int i)
{
char tmp[25];
if(field_mon.monk[3]!=-1)
{
TextOut(55,20,"父亲",1);
fseek(f_mon,SMon+field_mon.monk[3]*371,0);
fread(tmp,1,11,f_mon);
TextOut(55,35,tmp,1);
TextOut(55,50,"母亲",1);
fseek(f_mon,SMon+field_mon.monk[4]*371,0);
fread(tmp,1,11,f_mon);
TextOut(55,65,tmp,1);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
int SelMon(int mode)//选择怪兽,1我方怪兽,0敌方怪兽
{
int i;
char mname[25];
for(i=0;i<mon_num[mode];i++)
{
memcpy(mname+5*i,field_mon[mode*3+i].name,5);
mname[5+5*i]=' ';
}
return SelectBoxH(1,20,5,mon_num[mode],mon_num[mode],mname,5,0);
}
//添加怪兽
int AddMon(int n)//获得怪兽(0<=n<3)
{
if(field_num+field_egg<20) //牧场未满
{
flag_mon[field_mon[n].monk[1]/4]=(flag_mon[field_mon[n].monk[1]/4]|BitN[field_mon[n].monk[1]%4*2]);
memcpy(field_mon[3+field_num],field_mon[n],70);
Reset(3+field_num);
field_num++;
return field_num;
}
return -1;//牧场已满
}
//放走怪兽
int DelMon(int num) //放走怪兽(field_mon[num])
{
if(num>=3 && num < 3+field_num && field_num>1)//怪兽存在
{
field_num--;
if(num!=field_num+3) memcpy(field_mon[num],field_mon[field_num+3],70);
return field_num;
}
return -1;//发生错误
}
//添加怪兽蛋
int AddEgg(int n)//(0<=n<3)
{
if(field_num+field_egg<20) //牧场未满
{
field_egg++;
memcpy(field_mon[23-field_egg],field_mon[n],70);
Reset(23-field_egg);
return field_egg;
}
return -1;//牧场已满
}
//删除怪兽蛋
int DelEgg(int num)
{
if(num<23 && num >= 23-field_egg)//怪兽存在
{
if(num!=23-field_egg) memcpy(field_mon[num],field_mon[23-field_egg],70);
field_egg--;
return field_egg;
}
return -1;//发生错误
}
//寄存怪兽
int SaveMon(int num)
{
char tmep[70];
Reset(num);
memcpy(tmep,field_mon[num],70);
memcpy(field_mon[num],field_mon[mon_num[1]+2],70);
memcpy(field_mon[mon_num[1]+2],tmep,70);
mon_num[1]--;
}
//领取怪兽
int GetMon(int num)
{
char tmep[70];
Reset(num);
memcpy(tmep,field_mon[num],70);
memcpy(field_mon[num],field_mon[3+mon_num[1]],70);
memcpy(field_mon[3+mon_num[1]],tmep,70);
mon_num[1]++;
}
//添加工具
int AddItem(int num)//num是物品号
{
if(num<33 && myitem_num<20)//判断号码的有效性以及背包是否有空
{
myitem[myitem_num]=num;
myitem_num++;
return num;
}
return -1;
}
//删除工具
int DelItem(int n)//身上的第n个物品
{
int i;
if(n>=myitem_num) return -1;
for(i=n;i<myitem_num-1;i++)
{
myitem=myitem[i+1];
}
myitem_num--;
return myitem_num;
}
//储存工具
int SaveItem(int num)
{
if(num>=myitem_num || saveitem_num>=40) return -1;
saveitem[saveitem_num]=myitem[num];
saveitem_num++;
DelItem(num);
return saveitem_num;
}
//取出工具
int GetItem(int num)
{
int i;
if(myitem_num>=20) return -1;
AddItem(saveitem[num]);
for(i=num;i<saveitem_num;i++)
{
saveitem=saveitem[i+1];
}
saveitem_num--;
return saveitem_num;
}
//删除技能
int DelSkill(int num,int snum)
{
int i;
for(i=snum;field_mon[num].skill<91;i++)
{
field_mon[num].skill=field_mon[num].skill[i+1];
}
field_mon[num].skill_num--;
return snum;
}
//damage
void Damage(int num,int dmg)
{
int l,pos;
char str[30];
if(num<3)
{
if(mon_num[0]==1) pos=1;
else pos=num;
Box(3+53*pos,14,51+53*pos,62,1,0);
Delay(50);
Refresh();
Box(3+53*pos,14,51+53*pos,62,1,0);
Delay(50);
Refresh();
}
else
{
GetBlock(0,0,160,80,0,Screen);
WriteBlock(0,-5,160,80,1,Screen);
Delay(50);
Refresh();
WriteBlock(0,5,160,80,1,Screen);
Delay(50);
Refresh();
WriteBlock(0,0,160,80,1,Screen);
Delay(50);
Refresh();
}
l=RandN(dmg);
if(l<0) l=35;
if(l==0) sprintf(str," %s没有受到伤害",field_mon[num].name);
else sprintf(str," %s受到攻击 HP -%d",field_mon[num].name,l);
ShowAt(str);
if(field_mon[num].HP>l)
{
field_mon[num].HP=field_mon[num].HP-l;
if(num>=3)
{
ShowHM();
Refresh();
}
}
else
{
field_mon[num].HP=0;
if(mon_num[0]==1 && num<3) pos=1;
else pos=num;
if(pos<3)
{
Block(3+53*pos,14,51+53*pos,62,0);
for(l=0;l<mon_num[0];l++)
{
if(field_mon[l].HP>0) break;
}
if(l==mon_num[0]) result=1;
}
else
{
ShowHM();
for(l=3;l<3+mon_num[1];l++)
{
if(field_mon[l].HP>0) break;
}
if(l==3+mon_num[1]) result=-1;
}
Refresh();
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////
void Attack(int num1,int num2,int pre)//pre攻击加成
{
int l,i;
char c;
if(num2<0 || num2>5) return;
fseek(f_mon,SMon+field_mon[num1].monk[1]*371+42,0);
fread(&c,1,1,f_mon);
l=(9-c)/2+1;
l=1+field_mon[num1].ability[3]*2/3/l;
for(i=0;i<mon_num[0]+mon_num[1];i++)
{
if(order[0]==num2) break;
}
if(i<mon_num[0]+mon_num[1])
{
if(order[2]==-3) l=l/5;
}
Damage(num2,l);
}
2006-7-11 9:05:00 流风
头衔:轩听雨阁
等级:初级会员
文章:416
积分:1118
门派:无门无派
注册:2005年5月8日第 5 楼 QQ
--------------------------------------------------------------------------------
//使用技能
int UseSkill(int num1,int num2,int ski)//num2==-2我方全体 num2=-3敌方全体
{
int i,l;
char str[30];
if(num2>=0)
{
if(field_mon[num2].HP<=0 && ski!=24 && ski != 25) return -1;
}
fseek(f_mon,SSkill+52*ski,0);
fread(ski_tmp,1,52,f_mon);
if(num1>=0)
{
sprintf(str,"%s使用技能%s",field_mon[num1].name,ski_tmp.name);
ShowAt(str);
field_mon[num1].MP=field_mon[num1].MP-ski_tmp.ability[7];
}
else num1=3;
if(ski<27) //对我方使用
{
if(num2<0)
{
l=num2+3;
for(i=0;i<mon_num[l];i++)
{
if(field_mon[3*l+i].HP<=0) continue;
ShowFlash(3*l+i,3,6);
if(ski==3 || ski==4)
{
AB_HP(3*l+i,RandN(100+(ski-3)*999),1);
sprintf(str,"%s的伤口愈合了!",field_mon[3*l+i].name);
}
else if(ski==7)
{
field_mon[3*l+i].state=field_mon[3*l+i].state&(255-BitN[0]);
sprintf(str,"%s体内的毒素清除了!",field_mon[3*l+i].name);
}
else if(ski==10)
{
field_mon[3*l+i].state=field_mon[3*l+i].state&(255-BitN[1]);
sprintf(str,"%s身上的诅咒解除了!",field_mon[3*l+i].name);
}
else if(ski==13)
{
field_mon[3*l+i].state=field_mon[3*l+i].state&(255-BitN[2]);
sprintf(str,"%s可以自用活动了!",field_mon[3*l+i].name);
}
else if(ski==16)
{
field_mon[3*l+i].state=field_mon[3*l+i].state&(255-BitN[3]);
sprintf(str,"%s从混乱中醒来!",field_mon[3*l+i].name);
}
else if(ski==19)
{
field_mon[3*l+i].state=field_mon[3*l+i].state&(255-BitN[4]);
sprintf(str,"%s从沉睡中醒来!",field_mon[3*l+i].name);
}
else if(ski==22)
{
field_mon[3*l+i].HP=field_mon[3*l+i].ability[1];
field_mon[3*l+i].state=0;
sprintf(str,"%s所有状态恢复了!",field_mon[3*l+i].name);
}
ShowAt(str);
}
}
else
{
ShowFlash(num2,3,6);
if(ski<3)
{
if(ski<2) AB_HP(num2,RandN(35+ski*45),1);
else AB_HP(num2,999,1);
sprintf(str,"%s的伤口愈合了!",field_mon[num2].name);
}
else if(ski==6)
{
field_mon[num2].state=field_mon[num2].state&(255-BitN[0]);
sprintf(str,"%s体内的毒素清除了!",field_mon[num2].name);
}
else if(ski==9)
{
field_mon[num2].state=field_mon[num2].state&(255-BitN[1]);
sprintf(str,"%s身上的诅咒解除了!",field_mon[num2].name);
}
else if(ski==12)
{
field_mon[num2].state=field_mon[num2].state&(255-BitN[2]);
sprintf(str,"%s可以自用活动了!",field_mon[num2].name);
}
else if(ski==15)
{
field_mon[num2].state=field_mon[num2].state&(255-BitN[3]);
sprintf(str,"%s从混乱中醒来!",field_mon[num2].name);
}
else if(ski==18)
{
field_mon[num2].state=field_mon[num2].state&(255-BitN[4]);
sprintf(str,"%s从沉睡中醒来!",field_mon[num2].name);
}
else if(ski==21)
{
field_mon[num2].HP=field_mon[num2].ability[1];
field_mon[num2].state=0;
sprintf(str,"%s所有状态恢复了!",field_mon[num2].name);
}
else if(ski==24 || ski==25)
{
if(field_mon[num2].HP>0 || (ski==24 && rand()%2==1))
{
strcpy(str," 不过什么都没有发生! ");
}
else
{
Reset(num2);
if(ski==24) field_mon[num2].HP=1+field_mon[num2].ability[2]/2;
sprintf(str," %s复活了! ",field_mon[num2].name);
}
}
ShowAt(str);
}
}
else if(ski<45)
{
if(ski/3==9)
{
ShowFlash(num2,3,11);
Damage(num2,(3-mon_fast[num2][0])*BitN[ski%3]*17);
}
else
{
l=num2+3;
if(ski/3==10) ShowFlash(l*3,2,0);
else if(ski/3==14) ShowFlash(l*3,2,1);
for(i=0;i<mon_num[l];i++)
{
if(field_mon[3*l+i].HP<=0) continue;
if(ski/3==10)
{
}
else if(ski/3==11)
{
ShowFlash(3*l+i,3,10);
}
else if(ski/3==12)
{
if(ski%3<2) ShowFlash(3*l+i,3,4);
else ShowFlash(3*l+i,3,9);
}
else if(ski/3==13)
{
if(ski%3<2) ShowFlash(3*l+i,3,14);
else ShowFlash(3*l+i,3,15);
}
else if(ski/3==14)
{
ShowFlash(3*l+i,3,5);
}
Damage(3*l+i,(3-mon_fast[3*l+i][ski/3-9])*BitN[ski%3]*17);
}
}
}
else if(ski<60)
{
if(num2<0)
{
l=num2+3;
for(i=0;i<mon_num[l];i++)
{
if(field_mon[3*l+i].HP<=0) continue;
ShowFlash(3*l+i,3,6);
if(ski==46)
{
if(rand()%4>mon_fast[3*l+i][18])
{
field_mon[3*l+i].state=field_mon[3*l+i].state|BitN[0];
sprintf(str,"%s中毒了!",field_mon[3*l+i].name);
}
else
{
sprintf(str,"%s没有中毒!",field_mon[3*l+i].name);
}
}
else if(ski==49)
{
if(rand()%4>mon_fast[3*l+i][20])
{
field_mon[3*l+i].state=field_mon[3*l+i].state|BitN[1];
sprintf(str,"%s被诅咒了!",field_mon[3*l+i].name);
}
else
{
sprintf(str,"%s没有诅咒!",field_mon[3*l+i].name);
}
}
else if(ski==52)
{
if(rand()%4>mon_fast[3*l+i][19])
{
field_mon[3*l+i].state=field_mon[3*l+i].state|BitN[2];
sprintf(str,"%s被麻痹了!",field_mon[3*l+i].name);
}
else
{
sprintf(str,"%s没有麻痹!",field_mon[3*l+i].name);
}
}
else if(ski==55)
{
if(rand()%4>mon_fast[3*l+i][11])
{
field_mon[3*l+i].state=field_mon[3*l+i].state|BitN[3];
sprintf(str,"%s混乱了!",field_mon[3*l+i].name);
}
else
{
sprintf(str,"%s没有混乱!",field_mon[3*l+i].name);
}
}
else if(ski==58)
{
if(rand()%4>mon_fast[3*l+i][7])
{
field_mon[3*l+i].state=field_mon[3*l+i].state|BitN[4];
sprintf(str,"%s睡着了!",field_mon[3*l+i].name);
}
else
{
sprintf(str,"%s没有睡着!",field_mon[3*l+i].name);
}
}
ShowAt(str);
}
}
else
{
ShowFlash(num2,3,6);
if(ski==45)
{
if(rand()%4>mon_fast[num2][18])
{
field_mon[num2].state=field_mon[num2].state|BitN[0];
sprintf(str,"%s中毒了!",field_mon[num2].name);
}
else
{
sprintf(str,"%s没有中毒!",field_mon[num2].name);
}
}
else if(ski==48)
{
if(rand()%4>mon_fast[num2][20])
{
field_mon[num2].state=field_mon[num2].state|BitN[1];
sprintf(str,"%s被诅咒了!",field_mon[num2].name);
}
else
{
sprintf(str,"%s没有诅咒!",field_mon[num2].name);
}
}
else if(ski==51)
{
if(rand()%4>mon_fast[num2][19])
{
field_mon[num2].state=field_mon[num2].state|BitN[2];
sprintf(str,"%s被麻痹了!",field_mon[num2].name);
}
else
{
sprintf(str,"%s没有麻痹!",field_mon[num2].name);
}
}
else if(ski==54)
{
if(rand()%4>mon_fast[num2][11])
{
field_mon[num2].state=field_mon[num2].state|BitN[3];
sprintf(str,"%s混乱了!",field_mon[num2].name);
}
else
{
sprintf(str,"%s没有混乱!",field_mon[num2].name);
}
}
else if(ski==57)
{
if(rand()%4>mon_fast[num2][7])
{
field_mon[num2].state=field_mon[num2].state|BitN[4];
sprintf(str,"%s睡着了!",field_mon[num2].name);
}
else
{
sprintf(str,"%s没有睡着!",field_mon[num2].name);
}
}
ShowAt(str);
}
}
else
{
ShowFlash(num2,3,8);
if(field_mon[num2].monk[0]==ski-60) l=200;
else l=100;
l=l*(3-mon_fast[num2][25])/3;
Attack(num1,num2,l);
}2006-7-11 9:05:00 流风
头衔:轩听雨阁
等级:初级会员
文章:416
积分:1118
门派:无门无派
注册:2005年5月8日第 6 楼 QQ
--------------------------------------------------------------------------------
}
//选择技能对象
int SelSkiUser(int ski)
{
if(ski<27) //对我方使用
{
if(ski<=2 || (ski>=6 && ski%3==0) || ski==25) return 3+SelMon(1);
else return -2;
}
else
{
if(ski>=60 || (ski>=45 && ski <=59 && ski%3==0) || ( ski>=27 && ski<=29) ) return SelMon(0);
else return -3;
}
}
//使用物品
int UseItem(int num,int c)
{
int i,l;
if((c&BitN[4])!=0)//全体
{
l=-1;
}
else
{
l=SelMon(1); //对己方怪兽
if(l==-1) return -1; //取消选择
l=l+3;
}
//0 解毒草 1 苏醒之粉 2 小妖汤药 3 草药 4 月桂树 5 女神水 6 满血草 7 魔法之水 8 贤者之石
//9 天使之铃 10 宇宙树露 11 复活草 12 烂肉 13怪兽食 14熏肉 15带骨肉 16五花肉
//17 速度种//18 力之种//19 守卫种//20 智力种//21 命之果//22 神秘果
//23 雷杖 24火杖 25友情杖 26封魔杖 27雪杖 28真空杖
//29 清水 30金竖琴 31 小金牌 32 卡麦羽
//LV,HP,MP,攻击,防御,敏捷,智力,野性
//bit0->中毒 bit1->诅咒 bit2 ->麻痹 bit3 ->混乱 bit4->睡眠 bit5->死亡
if(num<17)
{
if(num<11)
{
if(num==0) field_mon[l].state=field_mon[l].state&(255-BitN[0]);
else if(num==1) field_mon[l].state=field_mon[l].state&(255-BitN[4]);
else if(num==2) AB_MP(l,999,1);
else if(num==3) AB_HP(l,RandN(35),1);
else if(num==4) field_mon[l].state=field_mon[l].state&(255-BitN[1]);
else if(num==5) AB_HP(l,RandN(55),1);
else if(num==6) field_mon[l].state=field_mon[l].state&(255-BitN[2]);
else if(num==7) AB_MP(l,RandN(25),1);
else if(num==8||num==10)
{
for(i=0;i<mon_num[1];i++)
if((field_mon[3+i].state&(255-BitN[5]))==0)
{
if(num==8) AB_HP(3+i,RandN(75),1);
else if(num==10) AB_HP(3+i,999,1);
}
}
else if(num==9) field_mon[l].state=field_mon[l].state&(255-BitN[3]);
}
else if(num==11) if(field_mon[l].HP<=0) Reset(l);
else if(num==12) AB_ability(l,7,1,-1);
else if(num==13) AB_ability(l,7,5,-1);
else if(num==14) AB_ability(l,7,10,-1);
else if(num==15) AB_ability(l,7,20,-1);
else if(num==16) AB_ability(l,7,100,-1);
}
else if(num<23)
{
if(num==17) AB_ability(l,5,3,1);
else if(num==18) AB_ability(l,3,3,1);
else if(num==19) AB_ability(l,4,3,1);
else if(num==20) AB_ability(l,6,3,1);
else if(num==21) AB_ability(l,1,5,1);
else if(num==22) AB_ability(l,2,5,1);
}
else if(num<29)
{
//if(num==23)
}
else if(num==29) Step=Step+500;
else if(num==30) //战斗
{
Step=0;
}
else if(num==32) {}//返回大树国
return num;
}
//选择技能
int SelectSkill(char n)
{
int i,pages,basic,l;
char state[250],str[25];
if(field_mon[n].skill_num==0) {MsgBox(3,25,8,3,"没有技能",1);return -1;}
for(i=0;i<field_mon[n].skill_num;i++)
{
fseek(f_mon,SSkill+52*field_mon[n].skill,0);
fread(state+i*8,1,8,f_mon);
}
i=0;
pages=(field_mon[n].skill_num-1)/4+1;
basic=0;
l=SelectBoxT(60,17,8,4,field_mon[n].skill_num,state,8,basic*4+i);
while(1)
{
fseek(f_mon,SSkill+9+52*field_mon[n].skill[basic*4+i],0);
fread(str,1,25,f_mon);
WriteBlock(60+2,17+i*15+3,4,8,0x41,cursor[0]);
MsgBox(3,25,8,3,str,0);
Delay(200-delay_time);
GetKey(0);
if(keyUD==4) { return -1;}
if(keyUD==2)
{
return basic*4+i;
}
if(keyLR!=0)
{
basic=(basic+keyLR+pages)%pages;
l=SelectBoxT(60,17,8,4,field_mon[n].skill_num,state,8,basic*4+i);
if(i>=l) { i=l-1;}
}
WriteBlock(60+2,17+i*15+3,4,8,0x41,cursor[1]);
i=(i+keyUD+l)%l;
}
}
//选择工具
int SelectItem(int mode)//2->平时(树国) 4->异界 8->战斗
{
int i,pages,basic,l,u;
char state[250],str[25],c;
if(myitem_num==0) {MsgBox(3,25,8,3,"没有道具",1);return -1;}
for(i=0;i<myitem_num;i++)
{
fseek(f_mon,SItem+4+134*myitem,0);
fread(state+i*8,1,8,f_mon);
}
i=0;
pages=(myitem_num-1)/4+1;
basic=0;
l=SelectBoxT(30,17,8,4,myitem_num,state,8,basic*4+i);
while(1)
{
fseek(f_mon,SItem+13+134*myitem[basic*4+i],0);
fread(str,1,25,f_mon);
WriteBlock(30+2,17+i*15+3,4,8,0x41,cursor[0]);
MsgBox(90,26,8,3,str,0);
Delay(200-delay_time);
GetKey(0);
if(keyUD==4) { return -1;}
if(keyUD==2)
{
strcpy(str,"使用 扔掉 ");
u=SelectBoxH(1,20,5,2,2,str,5,0);
if(u==1) //扔掉物品
{
l=myitem[basic*4+i];
DelItem(basic*4+i);
if(l>=12 && l<=16) return l;
else return 0;
}
else if(u==0) //使用物品
{
fseek(f_mon,SItem+38+134*myitem[basic*4+i],0);
fread(&c,1,1,f_mon);
if((mode&c) == 0 )//可用
{
if(myitem[basic*4+i]==32)
{
DelItem(basic*4+i);
return 32;
}
l=myitem[basic*4+i];
if(l>=23 && l<=28)
{
DelItem(basic*4+i);
return l;
}
if(UseItem(l,c)!=-1)
{
DelItem(basic*4+i);
return -1;
}
}
else
{
if(mode==2) MsgBox(25,35,18,1,"大树国中不能使用!",1);
else if(mode==4) MsgBox(25,35,18,1,"在异国中不能使用!",1);
else if(mode==8) MsgBox(25,35,18,1," 战斗中不能使用! ",1);
Delay(500);
GetKey(0);
}
}
keyUD=0;
keyLR=1;
basic--;
Refresh();
}
if(keyLR!=0)
{
basic=(basic+keyLR+pages)%pages;
l=SelectBoxT(30,17,8,4,myitem_num,state,8,basic*4+i);
if(i>=l) { i=l-1;}
}
WriteBlock(30+2,17+i*15+3,4,8,0x41,cursor[1]);
i=(i+keyUD+l)%l;
}
}
//技能升级
int UpdateSkill(int num)//field_mon[num],num<=2敌方升级,else我方升级,有提示
{
int i,p;
char str[35];
for(i=field_mon[num].skill_num;field_mon[num].skill<91 && field_mon[num].skill>=0;i++)
{
fseek(f_mon,SSkill+52*field_mon[num].skill,0);
fread(ski_tmp,1,52,f_mon);
if(ski_tmp.ability[0]>field_mon[num].LV) continue;
for(p=1;p<7;p++)
{
if(field_mon[num].ability<ski_tmp.ability) break;
}
if(p==7)
{
p=field_mon[num].skill;
field_mon[num].skill=field_mon[num].skill[field_mon[num].skill_num];
field_mon[num].skill[field_mon[num].skill_num]=p;
field_mon[num].skill_num++;
if(num>2)
{
sprintf(str," %s习得技能 < %s >",field_mon[num].name,ski_tmp.name);
MsgBox(25,30,16,2,str,1);
}
}
}
for(i=0;i<field_mon[num].skill_num;i++)
{
fseek(f_mon,SSkill+52*field_mon[num].skill,0);
fread(ski_tmp,1,52,f_mon);
if(ski_tmp.next==0) continue;
fread(ski_tmp,1,52,f_mon);
if(ski_tmp.ability[0]>field_mon[num].LV) continue;
for(p=1;p<7;p++)
{
if(field_mon[num].ability<ski_tmp.ability) break;
}
if(p==7)
{
field_mon[num].skill++;
if(num>2)
{
sprintf(str," %s技能升级 习得< %s >",field_mon[num].name,ski_tmp.name);
MsgBox(25,30,16,2,str,1);
}
}
}
while(num>2 && field_mon[num].skill_num>10)
{
p=SelectSkill(num);
if(p!=-1) DelSkill(num,p);
}
}
//怪兽升级
int UpdateMon(int num)//num是牧场怪兽号
{
int i,p[7];
char str[270];
while(field_mon[num].NetExp>=field_mon[num].Exp)
{
if(field_mon[num].LV>=field_mon[num].ability[0]) break;//到达顶级了
field_mon[num].NetExp=field_mon[num].NetExp-field_mon[num].Exp;
field_mon[num].LV++;
field_mon[num].Exp=field_mon[num].Exp+field_mon[num].Exp*2/field_mon[num].LV;
fseek(f_mon,SMon+field_mon[num].monk[1]*371,0);
fread(mon_tmp,1,371,f_mon);
for(i=1;i<7;i++)
{
p[i-1]=RandN((9-mon_tmp.grow)*5/3);
if(field_mon[num].ability+p[i-1]>999)
{
p[i-1]=999-field_mon[num].ability;
field_mon[num].ability=999;
}
field_mon[num].ability=field_mon[num].ability+p[i-1];
}
field_mon[num].HP=field_mon[num].HP+p[0];
field_mon[num].MP=field_mon[num].MP+p[1];
if(num<3+mon_num[1])
{
sprintf(str," %s 升级了!!",field_mon[num].name);
ShowAt(str);
sprintf(str,"HP+%d MP+%d",p[0],p[1]);
ShowAt(str);
sprintf(str,"攻击+%d 防御+%d",p[2],p[3]);
ShowAt(str);
sprintf(str,"敏捷+%d 智力+%d",p[4],p[5]);
ShowAt(str);
UpdateSkill(num);
Refresh();
}
else
{
field_mon[num].ability[7]=field_mon[num].ability[7]+field_mon[num].LV*2;
if(field_mon[num].ability[7]>999) field_mon[num].ability[7]=999;
}
}
}
//检查有否怪兽加入
void CheckMon(int mode)
{
int i;
char yn[10],tmp[25];
strcpy(yn," 是 否 ");
//一定不加入
if(mode==0) return ;
//可能加入
else if(mode==1)
{
for(i=0;i<mon_num[0];i++)
{
if(field_mon.ability[7]<=field_mon.LV*(rand()%5)) break;
}
if(i==mon_num[0]) return;
}
//一定加入
else i=0;
fseek(f_mon,SMon+(field_mon.monk[1])*371,0);
fread(mon_tmp,1,371,f_mon);
WriteBlock(56,14,48,48,1,mon_tmp.picture);
Refresh();
if(mode!=3)
{
sprintf(tmp," %s 站起来了!!!",mon_tmp.name);
ShowAt(tmp);
}
sprintf(tmp," 与%s做伙伴吗?",mon_tmp.name);
ShowAt(tmp);
if(SelectBoxH(1,20,4,2,2,yn,4,0)==0)
{
if(AddMon(i)==-1)
{
ShowMsg(" 牧场已满! ");
}
else
{
PassName(field_mon[2+field_num].name);
sprintf(tmp," %s 往牧场方向去了。",field_mon[2+field_num].name);
ShowMsg(tmp);
}
}
}
//生成怪兽的各种数据
int LoadMon(int num)
{
//假设field_mon,monk[1](编号)LV(等级)已定
int i,p;
for(i=3;i<3+mon_num[1];i++)
{
fseek(f_mon,SMon+field_mon.monk[1]*371+344,0);
fread(mon_fast,1,27,f_mon);
}
for(i=0;i<mon_num[0];i++)
{
fseek(f_mon,SMon+field_mon.monk[1]*371,0);
fread(mon_tmp,1,371,f_mon);
memcpy(mon_fast,mon_tmp.fast,27); //读取抗性
for(p=0;p<4;p++) field_mon.name[p]='a'+(rand()%26+26)%26;//生成名字
field_mon.name[p]=0;
field_mon.Exp=Ep[mon_tmp.grow[0]];
for(p=1;p<field_mon.LV;p++)
{
field_mon.Exp=field_mon.Exp+field_mon.Exp*2/p;
}
field_mon.NetExp=rand()%field_mon.Exp;
memcpy(field_mon.skill,mon_tmp.skill,3);
field_mon.skill[3]=-1;
field_mon.skill_num=0;
field_mon.ability[0]=RandN(15+mon_tmp.grade*13);
if(field_mon.ability[0]>99) field_mon.ability[0]=99;
field_mon.ability[7]=RandN(4*field_mon.LV-1);
for(p=1;p<7;p++)
{
field_mon.ability[p]=5+num+RandN((9-mon_tmp.grow[p])*field_mon.LV);
}
field_mon.HP=field_mon.ability[1];
field_mon.MP=field_mon.ability[2];
field_mon.state=0;
field_mon.monk[0]=GetKind(field_mon.monk[1]);
field_mon.monk[2]=rand()%2;
field_mon.monk[3]=0-1;
field_mon.monk[5]=0;
UpdateSkill(i);
}
}
2006-7-11 9:06:00 流风
头衔:轩听雨阁
等级:初级会员
文章:416
积分:1118
门派:无门无派
注册:2005年5月8日第 7 楼 QQ
--------------------------------------------------------------------------------
//命令处理
void RunOrder(int mode)
{
int i,j,l;
char str[30];
for(i=0;i<mon_num[0];i++)
{
if(field_mon.HP<=0) continue;
if((field_mon.state&BitN[0]) != 0)
{
j=1+field_mon.ability[1]/25;
sprintf(str," %s因中毒HP -%d",field_mon.name,j);
ShowAt(str);
field_mon.HP=field_mon.HP-j;
if(field_mon.HP<=0)
{
field_mon.HP=0;
if(mon_num[0]==1) Block(3+53,14,51+53,62,0);
else Block(3+53*i,14,51+53*i,62,0);
Refresh();
for(l=0;l<mon_num[0];l++)
{
if(field_mon[l].HP>0) break;
}
if(l==mon_num[0]) result=1;
}
}
}
for(i=3;i<3+mon_num[1];i++)
{
if(field_mon.HP<=0) continue;
if((field_mon.state&BitN[0]) != 0)
{
j=1+field_mon.ability[1]/25;
sprintf(str," %s因中毒HP -%d",field_mon.name,j);
ShowAt(str);
field_mon.HP=field_mon.HP-j;
if(field_mon.HP<=0)
{
field_mon.HP=0;
ShowHM(); |
|