`
mmdev
  • 浏览: 12845902 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Java版AVG游戏开发入门示例[3]——脚本引擎的制作及应用

 
阅读更多

源码下载地址:http://code.google.com/p/loon-simple/downloads/list


根据wikipedia的解释:脚本语言(Script language,scripting language,scripting programming language),是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言。此命名起源于一个脚本“screenplay”,每次运行都会使对话框逐字重复。早期的脚本语言经常被称为批次处理语言或工作控制语言。一个脚本通常是解释运行而非编译。脚本语言通常都有简单、易学、易用的特性,目的就是希望能让程序设计师快速完成程序的编写工作。

对于脚本语言,想必我们这些Java程序员都再熟悉不过,因为我们每天都在使用的Java,从严格意义上讲也是一种解释型语言——毕竟class是凭借JVM进行字节码解释才得以执行,故而长期被排斥于编译型语言的门槛之外(但是,由于Java有编译过程,若CPU支持字节码那么class就可以脱离JVM限制,说Java是纯粹的解释型语言似乎也很不妥+︿+……期待java cpu普及中……)。

在这个讲解AVG游戏开发的系列博文中,为什么会提到脚本引擎的制作及应用呢?笔者将在下面加以说明。

在游戏开发中,我们将无可避免的遇到很多重复性工作,比如角色A-Z的创建,物品0-n的编辑,对话x->+∞的添加等等——这些并不是需要复杂的编码,甚至仅是单纯的数据录入,但由于数据量庞大,通常也会耗费相当的时间进行设定。

如果让您来做,要怎么办呢?以最直观的方式来说,可能有些人会考虑硬编码,直接编码似乎能省去很多的麻烦事。

OK,或许我们完全可以采过硬编码方式解决问题,比如建立一个对应物品的class,而后为其添加各种对应字段。

那么,假设现在我们在某个同人游戏的开发中这样干了,并且将游戏对外发布。三天后,问题来了,有人反映某物品——我虚构个名字,就叫[对抗网瘾专用电棍]吧。有人反映它杀伤力太低,且对[网瘾]状态无伤害加成……嗯,我们考虑后认为有道理,怎么办呢?一个字——改,反正就是一两行代码的事情,重新编译,打包,发布——简单简单。

这下高枕无忧了吧?可惜,出乎我们意料之外的事情又再次发生,又过了两天,有玩家反映我们的最终BOSS[真.红色有角.砖家叫兽地狱鬼畜模式]的大招[终极网瘾扩散]会将所有我方角色全体[网瘾化],并且会持续投掷[对抗网瘾专用电棍]攻击我方角色,由于改版后的[对抗网瘾专用电棍]攻击力太强,并对[网瘾]状态有极强的伤害加成,我方角色很容易便会被BOSS团灭。

你问我这下怎么办?硬编码的还有什么新鲜,只能再重新编译……用户就是上帝,上帝让改就改吧……但是,尽管我们非常努力,却总有欠缺在这个游戏中存在,如果这样改下去,三次、四次、十次、二十次|||,次次都需要重新编译及发布,就是再简单也受不了了(做Java还好,搞C/C++的很多人都经历过守夜等编译结果吧……),恐怕最终此游戏只好停止发布,烂尾了事。如果你将每个物品都直接编码到游戏当中,那么毫无疑问你将会陷入到噩梦一般的处境。

为什么我们不能选择更加简单的方式来处理呢?既然每次重新编译、重新发布程序那么麻烦,干什么不将配置放在游戏外面呢?实际上,我们完全可以创建一个文本文件记录下所有物品参数,而每次更新时,我们仅需修改此文本文件便可以改变整个游戏中的属性设置,再也不必事无巨细都重新编译、重新发布整个游戏了。

事实上,笔者之所以耗费笔墨写这么一个例子,无非是为了说明脚本应用背后的基本准则——简化软件制作流程,避免硬编码。

脚本可以使你真正在游戏引擎之外编写代码,然后再将这些代码加载到游戏引擎之中并对它加以执行。一般情况下,脚本是按照它们自己的语言格式进行编写的,使用何种语法完全由脚本引擎决定,脚本就好像是运行在游戏程序内部的小程序,它们的工作原理和其他的普通程序一样,你可以使用一个普通的文本编辑器来编写它们,然后在你的主程序中执行它们。脚本通常使用它们自己的编译器或者解释器,它们对游戏主引擎并没有任何影响——除非你希望它这么做。

同时,游戏和脚本之间通常是分离的。你可以像加载图形、声音,甚至早期的物体描述文件一样加载脚本。但是,你并不能在显示器上将它们显示出来或者是通过喇叭把它们播放出来,取而代之的是,你可以执行它们,它们也可以和你的游戏进行通信,而游戏也可以作出应答。

简单的说,如果我们将游戏引擎和游戏数据理解为人与积木,那么脚本就是用来搭建积木的图样;如果我们将游戏引擎和游戏数据理解为海洋与大陆,那么脚本就是通行在海洋与大陆间传递资源的货轮。

游戏脚本是游戏引擎不可或缺的最佳搭档。

可能您会问,既然脚本有这么多的好处,想必制作起来很麻烦吧?

关于这点,需要从不同的角度来加以考虑。如果我们以groovy、ruby、python、lua、angelscript这些已经成熟或接近成熟的脚本语言为标准来看,那么开发一种脚本语言的确是件很复杂的事情,涉及到易用性、执行效率、安全性、资源回收、并发等等许多的“额外”问题,而且既然有groovy、ruby、python、lua、angelscript这林林种种,我们也大可不必耗费心智来重复发明轮子。

但是,如果我们从与游戏引擎交互,减少游戏代码量的角度出发,那么自己设计的脚本与自己游戏引擎间的藕合性当然会较第三方的脚本为高,代码量也当然会更少,而且维护管理也更为简便。况且交给脚本来执行的部分,通常也不会对运行效率有太高的要求,我们与大师的差异,也仅仅是体现在决定成败的“细节”方面,单就构建脚本解释器本身而言,完全算不得难事,甚至简单到一两个小时就可以搞定一个具有初步功能的脚本引擎(别说脚本,很多80后乃至90后的程序员都开始自己写编译器玩了|||……)。

比如TJS(就是做吉里吉里那个)及RGSS (Ruby Game Scripting System)等,都是为了更加适应自身游戏引擎而开发出来的游戏脚本语言。

下面我将提供一个非常简单的脚本解释器代码,主要功能被集中在一个Command类中。



为了与游戏相交互,此示例构建了一个顺序执行的动态解释型脚本语言,其中每一行实际上就是一组独立的命令,无论分支或者输入输出都仅在程序读取到本行时才会活性化, 以此保证与游戏主程序数据交互的实时性。

本例解释的脚本start.txt内容如下:

游戏运行界面如下图:

04

03

02

01

00

源码下载地址:http://code.google.com/p/loon-simple/downloads/list


——————————————————————————————————————

天气很热,写不出什么正经东西,由于最近[叫兽]很猖獗,随便做点东西借机踩踩它(昨天晚上写的,因为太热导致MV归0,今天晚上才发出来|||)。

不过这星期六、日两天TLOH基础部分应该也能写完了,下周估计能发。总之是个AVG+RPG+SLG的开源游戏,剧情部分就靠发到网上情大家帮忙添加∩ω∩,功能我会慢慢再补,所有对它的意见反馈最终都会归结到Loonframework-Game这个框架(简称LFG)上去。

分享到:
评论

相关推荐

    Java版AVG游戏开发入门示例

    这是一个Java版的桌面AVG游戏入门示例程序(源码在Jar内),演示了一个AVG游戏需要的基本功能。

    魍魉校园(Java版AVG游戏开发入门)源码分析

    NULL 博文链接:https://xpenxpen.iteye.com/blog/2171032

    起司工具(avg游戏制作工具)v0.25.3.11中文官方安装版

    起司工具是一款非常好用且功能强大的avg游戏制作工具,不需要专业的编程能力就可以轻松的使用起司游戏制作工具制作各种文字冒险游戏,像玩游戏一样做游戏,只要你有编故事的能力都可以制作属于自己的游戏,欢迎有...

    强大的unity3d集成Ink语言插件用于avg文字游戏

    强大的unity3d集成Ink语言插件用于avg文字游戏 Ink Objects是一个简单的包,可以让对C#和Unity有基本理解的开发人员采用面向对象的方法编写广受喜爱的Ink语言。在Unity编辑器中构建对象库并将其导出到Ink中,就可以...

    AVG游戏演示程序

    本演示程序是使用VB+ViceScript 制作的AVG游戏。亦是ViceScript的一个使用实例。由于制作仓促,程序中不免有许多错误,还望见谅。 注:ViceScript 是由鄙人使用PowerBASIC 10 开发的一款脚本语言。

    AVG游戏引擎pyMO.zip

    pymo (Python Memories Off) 是一个针对手机设计的AVG游戏引擎。可以使您不用懂得编程也可以较为方便地制作出一款简单的AVG游戏。 pymo是由chen_xin_ming开发的开源软件。pymo遵循BSD许可证,欢迎任何人下载代码或对...

    免费杀毒软件——avg_free_stb免费版在线安装

    免费杀毒软件——avg_free_stb免费版在线安装

    AVG游戏素材.rar

    版权在唤境引擎手中,用唤境引擎做avg游戏可以免费使用

    AVG游戏演示程序 VB+ViceScript

    本演示程序是使用VB+ViceScript 制作的AVG游戏。亦是ViceScript的一个使用实例。开发时间3天。由于制作仓促,程序中不免有许多错误,还望见谅。 游戏中剧情、对话、图片均来自GBA游戏《逆转裁判》。 注:...

    易语言AVG游戏选择例程源码

    资源介绍:。易语言AVG游戏选择例程源码。资源作者:。@游戏开发。资源界面:。资源下载:。

    AVG游戏选择例程.rar

    AVG游戏选择例程.rar

    storyscript, 用于表示AVG故事的脚本系统,AVG.js的DSL.zip

    storyscript, 用于表示AVG故事的脚本系统,AVG.js的DSL Storyscript中文版请点击此处( 查看中文版)介绍和设计思想Storygscript是一套用来表示AVG故事的脚本系统,它是类似于其他AVG引擎的官方模块之一,它与其他AVG...

    真正的AVG电脑防护软件官方卸载工具——感谢大家支持并评论

    今天被CCleaner摆了一道,强制安装了个AVG电脑防护软件,也让我重新审视了目前网上可以查到的卸载工具,很遗憾最终的结果都是卸载不了,不过从博文中也获得了不少信息,该流氓软件的确有卸载工具并曾在官网上发布过...

    AVG文字角色游戏对话脚本

    这是一个为Unity构建的C#脚本。它接收一个字符串数组,并将它们与字符潜台词一起输出到文本字段中。 包括: -不同字符的几句台词 -包括任何字符名 -更改读取速度 -更改文本之间的速度 场景里面已经设计有暂停对话 和...

    AVG制作软件

    国外授权汉化的AVG游戏制作平台,支持多种借口,还可以写插件

    AVG游戏Android移植框架源码(吉里吉里与NS)

    AVG游戏Android移植框架源码(吉里吉里与NS),其中包含了ONS-Android与KAS两个Android开源项目,以及NS的打包与解包工具。

    易语言AVG游戏选择例程

    易语言AVG游戏选择例程源码,AVG游戏选择例程,程序,程序1,程序2,程序3,程序4,执行子程序,最近的输入虚拟键状态_

    AVG 游戏引擎

    一个演示程序,它可以用来制作《心跳回忆》类型的游戏,这些都不需要你修改程序的源代码。而且作者也提供程序的源代码给大家下载。作者网站:http://yahle.yeah.net

Global site tag (gtag.js) - Google Analytics