- 注册时间
 - 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(); |   
 
 
 
 |