构造使用类C语言的脚本引擎(1)脚本语法定义

构造使用类C语言的脚本引擎(1)

作者 :kevin_qing

转贴请注明

需求:
实现npc逻辑,与游戏(服务器)交互。

例如与商人NPC对话打开买卖物品窗口等


设计:
参考传奇2服务器端脚本后(实现的很烂),定义脚本规则如下:

1.采用类C语言,因为熟悉C的人很多,而且C语法较严谨,且使用方便
2.数据类型只支持int和const string(用于外部函数的参数或返回值).变量只能为int且不需要显示声明.
3.支持的语法有函数调用(外部),if-[else],switch-case,goto,只能定义一个main()函数
外部函数返回值
4.考虑到效率,脚本经编译后在虚拟机内执行。


例:

main(){
 say( "您好:^1%s^0我这为大家提供各种优质的服务/n"
  "如洗红名,转职,买宝宝,药品超负重……等等/n"
  "如果^1%s^0您确认您需要服务,请进入选择所需的服务/n"
  "<进入选择>┃<算了吧>",username(),username() );
 switch(wait(0)){
 1:{
  say( "<转职>┃<药品>┃<美容>/n");
  switch(wait(0)){
   1:{//转职
    if(job()==0)//战士
    {
     say( "作为战士您是否已经厌倦了鲜血与烈火?/n"
      "转职为 <巫师>   <僧侣>/n");
     switch(wait(0)){
      1:

      2:

     }

    }else //........
    //.........
   }
  //.......
   

  }

 
 }
 2: 
  return;
  
 }

}


 

解释:
上面的脚本使用了2个外部函数调用
say()参数和printf()一致,字符串里的^1 ^0是改变字体颜色,<>里的内容是可选择项(像html的link)
wait()是等待事件,0目前定为用户选择事件

main(){
 say( "您好:^1%s^0我这为大家提供各种优质的服务/n"
  "如洗红名,转职,买宝宝,药品超负重……等等/n"
  "如果^1%s^0您确认您需要服务,请进入选择所需的服务/n"
  "<进入选择>┃<算了吧>",username(),username() );
 switch(wait(0)){
 1:{
  say( "<转职>┃<药品>┃<美容>/n");
  switch(wait(0)){
   1:{//转职
    if(job()==0)//战士
    {
     say( "作为战士您是否已经厌倦了鲜血与烈火?/n"
      "转职为 <巫师>   <僧侣>/n");
     switch(wait(0)){
      1:

      2:

     }

    }else //........
    //.........
   }
  //.......
   

  }

 
 }
 2: 
  return;
  
 }

}


 

解释:
上面的脚本使用了2个外部函数调用
say()参数和printf()一致,字符串里的^1 ^0是改变字体颜色,<>里的内容是可选择项(像html的link)
wait()是等待事件,0目前定为用户选择事件


你可能感兴趣的:(游戏开发,C/C++)