脚本语言见解之一

来源:互联网 发布:淘宝保证金能退回吗 编辑:程序博客网 时间:2024/06/05 05:54
 什么是脚本语言,脚本语言的详细的具体的意义又是怎么样的。都知道ASP,PHP,JavaScript这些是脚本语言(JAVA应该也算是一种脚本语言)
    了解一样东西自然是要从其根本开始。脚本为什么叫脚本呢,当你用星际译王翻译Script这个单词时得到的那些解释你就会多多少少明白这个脚本的一些内在涵意了。在解释里得到的都是一些像手稿,剧本,电影文学载体之类的东西。这说明脚本是一个比较抽象化的,比较没有逻辑的东西。说白了脚本其就是一些内容的载体,这些内容不包括逻辑部分。这是脚本的最初定义由来。之所以说它是最初定义的由来是因为后来脚本不光光只包涵内容的载体,同时也包涵了一些具体的实现和功能上的逻辑部分。比如if之类的判断语句,和函数之类的实现。现在主要是要介绍脚本最初的定义。比如我们要写一个游戏程序,这个游戏程序要由引擎,图形,声音和情节内容等各部分组成。引擎部分负责游戏的功能实现。玩家在引擎的帮助下可以自由走动,与NPC打斗,和其他人对话,NPC可以有“智商”的走动着,等等这些功能。图形可以用Photoshop和3ds max和完成制作。比如游戏里的各种人物画像,道具和地图等。但一个游戏最主要的部分--情节和角色用什么来描述呢?我们用什么把这些“输入”到游戏里呢?自然我们可以在引擎里把这些东西都写进去,比如游戏里的物品定义一个结构体来表示:

typedef struct _Item

{

char *pstrName;

int iType;

int iPrice;

int iPower;

}Item;

pstName是物品的名称,比如是羲和剑,iType是物品的类型,可以是武器类,药品类还是魔法用品类等等。IPrice是物品的价格,iPower是这个物品所能发挥的作用。注意,这个结构体是写在引擎里的。一个游戏里有成百上千的物品。所以在定义一个物品的数组来存放:

const MAX_ITEM_COUNT=500;

Item ItemArray[MAX_ITEM_COUNT];

下面来添加一些物品到游戏里,再次注意是在引擎代码里添加:

//先来些武器

ItemArray[0].pstrName=”羲和剑“;

ItemArray[0].iType=”武器“;

ItemArray[0].iPrice=1000;

ItemArray[0].iPower=2000;

//来些疗伤药品

ItemArray[1].pstrName=”止血草“;

ItemArray[1].iType=”药品“;

ItemArray[1].iPrice=50;

ItemArray[1].iPower=500;

//来些装饰的物品

ItemArray[2].pstrName=”蚕丝风衣“;

ItemArray[2].iType=”装饰“;

ItemArray[2].iPrice=200;

ItemArray[2].iPower=400;

很好,现在游戏里已经有了这些物品了。好我们编译我们的游戏,引擎代码数万行,好不容易编译完后,我们运行游戏。发现止血草这个物品又便宜,才50块,而回复HP值有500之多,这让游戏难度很低,因此游戏失去了可玩性。因此我们必须了从新修改这个物品属性才行。于是改成:iPrice=100,iPower=300;改完后我们再次编译,唉又是一个漫长的等待。如此的反复测试,直到每个物品都达到一种平衡为此。要知道一个游戏里有成百上千的各种物品,如果每一个都是这种来改那简直就是末日。所以必须要想一个办法才行。办法是有的,“那就是把逻辑和具体实现互相分离”。那么是如何把逻辑与具体实现互相分离的呢,来看上面的代码中的一行:

ItemArray[0].pstrName=”羲和剑“;

这行代码的逻辑部分就是:把字符串“羲和剑”放到变量pstrName当中。具体实现就是字符串“羲和剑”。现在把上面武器物品的定义进行分离:

“羲和剑”

“武器”

1000

2000

这样就把上面武器部分的具体实现即代码的右边部分独立出来。把上面四行代码用一个文件保存起来比如:weapon.script

这样weapon.script就是一个脚本文件了。然后我们再编写一个支持这种脚本格式的逻辑解释器就可以让这个脚本运行了。这个逻辑解释器是分离的逻辑部分。运行解释器会读取weapon.script这个文件,然后执行逻辑部分具体是:

1.读取weapon.script的第一行,把第一行的字符串存放到变量pstrName当中。

2.读下一行,判断物品的类型,赋值给iType.

3.读下一行,把值赋给iPric;

4.读下一行,把赋值给iPower;

重复1~4步直到读取完文件为止。这个逻辑解释器可以和引擎一起,也可以独立出来。当独立出来后就是一个简单的脚本语言系统了。当然是一个相当“简单”,真正的脚本语言系统要复杂的多。其中要用到VM,都知道JAVA的JVM了,其实原理都是一样的,JVM里也有个逻辑解释器。用来解释JAVA的每一条命令。从上面可见,当我们把逻辑部分与具体实现部分分离后,我们就可以随便在脚本文件里增删物品的数量,种类和修改各种属性了。修改完后,由LOADER一读就可以了,根本用不着编译其他无关的代码。网上找到一个解释却是很形象的:脚本语言一般都是以文本形式存在,类似于一种命令.
举个例子说,如果你建立了一个程序,叫aaa.exe,可以打开.aa为扩展名的文件.
你为.aa文件的编写指定了一套规则(语法),当别人编写了.aa文件后,你的程序用这种规则来理解编写人的意图,并作出回应.那么,这一套规则就是脚本语言.

原创粉丝点击