易码技术论坛

 找回密码
 加入易码
搜索
查看: 997403|回复: 14

什么是脚本

[复制链接]
发表于 2007-9-25 13:24:21 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2007-9-25 17:13:49 | 显示全部楼层
对于某种语言编写的程序,我们需要对其进行编译,链接等等,把它变成二进制可执行代码,然后交给计算机去执行。比如在windows平台上c,pascal,都会编译成.exe去执行。所以每次写完代码,或者修改完代码,都要编译。
而脚本语言则不同,他写好之后,是通过一个指定的解析程序来运行。比如perl,你写一段程序叫做hello.pl,这个文本文件要通过解析器来执行,这个解析器就是perl.exe。所以你在命令行下面打
perl hello.pl
这样perl这个解析器就会解析,并运行其中的程序。这样的好处是编写程序不用再经过编译,连接这样的步骤,对于很小的程序来说这省了很多事情。
下面是wiki上面的定义
定义
计算机语言是为了各种目的和任务而开发的,一个常见任务就是把各种不同的已有组件连接起来以完成相关任务。大多脚本语言共性是:良好的快速开发,高效率的执行,解释而非编译执行,和其它语言编写的程序组件之间通信功能很强大。


许多脚本语言用来执行一次性任务,尤其是系统管理方面。它可以把服务组件粘合起来,因此被广泛用于GUI创建或者命令行,操作系统通常提供一些默认的脚本语言,即通常所谓shell脚本语言。

脚本通常以文本(如ASCII)保存,只在被调用时进行解释或编译。

有些脚本是为了特定领域设计的,但通常脚本都可以写更通用的脚本。在大型项目中经常把脚本和其它低级编程语言一起使用,各自发挥优势解决特定问题。脚本经常用于设计互动通信,它有许多可以单独执行的命令,可以做很高级的操作,(如在传统的UNIX shell (sh)中,大多操作就是程序本身。)

这些高级命令简化了代码编写过程。诸如内存自动管理和溢出检查等性能问题可以不用考虑。在更低级或非脚本语言中,内存及变量管理和数据结构等耗费人工,为解决一个给定问题需要大量代码,当然这样能够获得更为细致的控制和优化。脚本缺少优化程序以提速或者降低内存的伸缩性。

综上所述,脚本编程速度更快,且脚本文件明显小于如同类C程序文件。这种灵活性是以执行效率为代价的。脚本通常是解释执行的,速度可能很慢,且运行时更耗内存。在很多案例中,如编写一些数十行的小脚本,它所带来的编写优势就远远超过了运行时的劣势,尤其是在当前程序员工资趋高和硬件成本趋低时。

然而,在脚本和传统编程语言之间的界限越来越模糊,尤其是在一系列新语言及其集成畅出现时。在一些脚本语言中,有经验的程序员可以进行大量优化工作。在大多现代系统中通常有多种合适的脚本语言可以选择,所以推荐使用多种语言(包括C或汇编语言)编写一种脚本。
 楼主| 发表于 2007-9-26 12:29:01 | 显示全部楼层
比如我要使NPC说话  话的内容是:"我是人!"
写一个判断对话的程序S.EXE
再写个调用脚本的程序J.EXE
如果S.EXE成立  
则在文本文件上写上:J 我是人!
再用J.EXE解释它可以吗?
 楼主| 发表于 2007-9-26 12:29:31 | 显示全部楼层
有点头晕
发表于 2007-9-26 12:44:45 | 显示全部楼层
脚本常常用于RPG游戏的制作当中,制作者一般使用它来简化剧情的设计工作,用它来控制RPG游戏中剧情的发展。事件的运作建立在脚本的基础上,而脚本的设计建立在引擎的基础上,所以设计脚本之前因该想一想引擎,好的脚本对剧情的描述具有简单、准确的性质。如同编程语言一般高级语言往往简单而无扩张性,低级语言复杂而灵活,故好的脚本亦如C语言一般高低兼顾。
   脚本功能的实现过程一般为:脚本代码的编写->生成脚本伪代码->游戏引擎解释脚本伪代码,从而实现脚本的功能.
   先来说说的脚本的语法:脚本具备最基本语法,如表达式求值(包含各种常用的运算),无条件转向,条件分支,循环,子函数等。
   触发事件的条件:Lookinto,在Tile面前按下调查键触发事件
              Walkon,停留在Tile上面触发事件
              Leave,离开Tile时触发事件
   脚本语句组成:脚本的语句由关键字和参数组成,参数一般由括号"(",")"括起来或者由空格" "分隔关键字和参数。脚本语句参数用","分开,表示可以省略,一般省略的部分都给出缺省值("0")。
   脚本语句参数的类型:String,字符串
                Integer,整数
                Real,实数
                UnsignInteger,没有符号的整数(即不小于0的整数)
                UnsignReal,没有符号的整数(即不小于0的整数)
   逻辑运算符:= :等于
           < :小于
           > :大于
           <= :小于等于
           >= :大于等于
           == :等于(字符串)
           !! :不等于(字符串)
   再来说说生成脚本伪代码,可以自己来设计脚本代码编译器,编译出的伪脚本代码类似于汇编的机器码,脚本语句中的关键字和参数分别被编译为"操作数"和"立即数"/字符串等。
   脚本的解释过程一般体现在RPG引擎的中,一般都在内存中开辟一个足够大的数组存编译好的指令,三个2k的整型数组用于存脚本中用道的整形变量。一个字符型二级指针来记录一个脚本中出现的所有字串,一个整形数据ip代表当前指令地址。比如:
  short code[0xFFFF/2];
  short data[3][1024];
  char **msg;
  long ip;
   然后用switch();函数来逐个地解释每一种脚本语句的功能,解释完一种脚本语句后向后移动ip指针,使其指向下一句。就这样直到游戏结束。
发表于 2007-9-26 13:00:30 | 显示全部楼层
引用第4楼qqq7895432007-09-26 12:29发表的“”:
有点头晕
首先,所谓脚本,其实全称叫做脚本语言,也就是说它是一种程序设计语言,虽然有些脚本,比如自己定义的,操作系统定义的shell脚本之类的,其能力不是十分强大,但是很多脚本语言,诸如ruby,python,perl其强大直逼c/c++,java,c#之流

然后,举个例子,比如自己定义一种脚本语言,比如叫shooting language。注意,这个语言和c,java理论上是同一样东西,只不过比较萎。
这个语言只有三个关键字,go和stop和say
其中say 后面可以跟一个字符串。
于是我用这个语言写一段程序:xiaoren.shooting
go
stop
say hello
go
stop
say goodbye
这就是用这个脚本语言写的程序。但是他并不能运行,那么谁来运行他呢?你得自己写解析器。比如你用c语言程序,写一个小人,可以走,可以说话,然后你读进来这段脚本程序,发现第一行是go,那么就让你那个小人走,发现第二行是个stop,那么就让你那个小人停下来。第三行是个say,那么就让你那个小人说句hello。依此类推,你写的这个小人程序就是你这个脚本的解析器。

也就是说,解析器是可以读取脚本文件,并根据脚本的内容执行相应操作的程序。解析器本身是什么不要紧,只要他能读入脚本文件,并根据其内容进行操作即可。或者也可以把脚本程序看作是外部的控制指令,用来控制解析器的执行。
 楼主| 发表于 2007-9-26 13:27:08 | 显示全部楼层
高手就是高手  厉害 !
还有一个问题  
有专门介绍脚本怎么写的书吗?  我得好好学习了!
发表于 2007-9-26 15:15:45 | 显示全部楼层
有,LZ可以翻一下<Visual C++冒险游戏程序设计>和<Visual C++角色扮演游戏程序设计>。
这两本书有说道脚本相关的内容,还不错。
 楼主| 发表于 2007-9-26 19:32:14 | 显示全部楼层
谢谢大家
发表于 2007-9-27 11:49:44 | 显示全部楼层
引用第7楼qqq7895432007-09-26 13:27发表的“”:
高手就是高手  厉害 !
还有一个问题  
有专门介绍脚本怎么写的书吗?  我得好好学习了!
看你想做啥了。
一般的脚本语言可以找perl,ruby,python看看
游戏中常用的脚本语言去看 lua的材料
要想自己设计自己的脚本语言,那就去看Isword推荐的
 楼主| 发表于 2007-9-25 12:22:05 | 显示全部楼层 |阅读模式
  老弄不懂脚本是什么


在网站上搜了很多关于脚本的解释

但是就是一句话:"使程序简洁  脚本不需编译..."

老是感到困惑  怎么使程序简洁  不编译怎么用?

哪位大哥解释解释啊?
发表于 2007-10-17 20:26:57 | 显示全部楼层
酱紫啊..

脚本语言和BASIC有啥差别吗?
发表于 2007-10-17 21:19:47 | 显示全部楼层
呵呵,LS算是说到点了。其实GVBASIC可以算是一种脚本语言。由于脚本语言的特点,所以造成GVBASIC的运行方式是解释一句运行一句,所以速度也慢了。呵呵。
发表于 2007-10-18 08:00:21 | 显示全部楼层
=v=解释性的语言就等于脚本啦?小I……
发表于 2007-10-18 12:36:10 | 显示全部楼层
GVBASIC本来就很像脚本嘛!
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-3-29 06:29 , Processed in 0.015160 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表