`
mmdev
  • 浏览: 13244281 次
  • 性别: 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游戏开发入门)源码分析

    源码分析将帮助我们深入理解Java编程在游戏制作中的应用,以及AVG游戏的基本架构和逻辑。 首先,让我们来了解一下AVG游戏的特性。AVG游戏以丰富的剧情和角色互动为主,玩家通过选择不同的对话或行动来推进故事发展...

    AVG 游戏引擎

    该"AVG 游戏引擎"是一个专门为此类游戏设计的开发平台,允许创作者无需深入编程即可制作出自己的AVG游戏。引擎提供的图形化界面和预设功能简化了游戏制作流程,让非程序员也能尝试创作。开发者可以专注于游戏的剧情...

    AVG游戏素材.rar

    AVG游戏素材是一款专为游戏开发者设计的资源集合,它被封装在名为"AVG游戏素材.rar"的压缩包中,适用于使用唤境(EggEngine)游戏引擎进行avg类型的游戏开发。唤境引擎是一款强大的、易上手的游戏制作工具,特别适合...

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

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

    游戏开发设计————梦开始的地方

    在探讨游戏开发设计的过程中,我们首先要理解游戏不仅仅是技术的展现,更是艺术与创意的结合体。本文将基于给定的标题、描述、标签以及部分内容,深入解析游戏开发设计的基础概念,帮助初学者更好地理解游戏开发的...

    AVG游戏选择例程.rar

    1. **游戏引擎选择**:AVG游戏的开发通常需要一个合适的游戏引擎。引擎的选择对游戏的性能、交互性和可维护性有重大影响。易语言,作为中国本土的一种编程语言,可能被用于构建这样的游戏引擎。它的特点在于易学易用...

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

    吉里吉里(KRIKRIRI,也称为Krkr2)是一个开源的游戏开发工具,特别适合制作 AVG 游戏。它提供了强大的脚本语言(X86汇编语法类似),让开发者能够编写复杂的逻辑和交互。在Android版本的移植中,KAS(KRIKRIRI for ...

    强大的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_MAKER探险游戏制作软件

    AVG_MAKER是一款经典的探险游戏制作软件,专用于创建冒险类游戏。这款软件因其独特的功能和易用性在游戏制作爱好者中受到了广泛欢迎,尤其是在它成为绝版之后,其价值更加凸显。Adventure Game Maker(简称AGM)允许...

    AVG制作软件

    使用AVG制作软件进行游戏开发的过程通常包括以下几个步骤:设计故事线、绘制角色和场景、编写对话和事件脚本、整合音频和视觉元素,以及测试和调试。对于初学者,软件通常会提供直观的界面和详尽的文档来指导他们...

    AVG文字角色游戏对话脚本

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

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

    易语言AVG游戏选择例程源码是一款专为初学者和爱好者设计的编程教程资源,主要使用易语言作为开发工具,旨在帮助用户了解如何在AVG(冒险游戏)中实现玩家的选择逻辑。易语言是中国本土开发的一种编程语言,以其直观...

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

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

    游戏引擎开发技术

    ### 游戏引擎开发技术详解 #### 一、引言 随着信息技术的飞速发展,电脑游戏已成为一种广受欢迎的娱乐形式。对于游戏开发者而言,游戏引擎是控制游戏功能的核心程序,其重要性不言而喻。游戏引擎就像是驱动游戏...

    KiS_max_min_Avg - MetaTrader 4脚本.zip

    《MetaTrader 4脚本——KiS_max_min_Avg 指标通道详解》 MetaTrader 4(MT4)是全球最受欢迎的外汇交易和分析平台之一,它为交易者提供了丰富的技术分析工具和自动化交易功能。在MT4中,用户可以自定义脚本来满足...

    LGAME引擎android开发工具

    LGAME引擎是一款专为Android平台设计的游戏开发工具,主要用于创建JAVA游戏。它的核心目标是提供一个高效、易用且功能丰富的开发环境,帮助游戏开发者快速实现游戏概念并将其转化为实际的移动应用程序。当前版本为...

    AVG游戏演示程序 VB+ViceScript

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

Global site tag (gtag.js) - Google Analytics