用 C 语言和 nkCEngine 写了一个基于命令的迷你脚本编译器与脚本播放器

首先,博主感到非常高兴,就在很久以前,博主就想写一个属于自己的脚本引擎,哪怕功能再简单也好,只要能跑起来就行了,直到今天,博主终于向这个梦想迈出了第一步,将脚本引擎的雏形给做了出来,因为这个脚本系统属于 nkCEngine 的一部分,所以博主将其命名为 nkScript,nkScript 是一门基于命令的语言,没有复杂的函数调用,没有复杂的循环语句,它拥有的,是简单的数值运算语句、条件跳转语句、无条件跳转语句、命令语句,等等;nkScript 的开发目标主要是用于制作简单的文字冒险游戏,就是那种只需要通过点击鼠标,就可以游玩整个游戏的那种游戏;

脚本系统分为两个重要组件,分别是编译器(nkScript Compiler)与播放器(nkScript Player),编译器负责将开发者易于阅读与编写的文本形式的脚本文件,转换为二进制中间码形式,而脚本播放器则加载中间码数据,并进行解释,同时将脚本中的命令以图形的形式呈现出来,还要配合用户的输入,来进行脚本执行与调度(比方说点击鼠标,显示下一句对白);

我们先来看一段简短的脚本代码:

text
"欢迎使用 nkScriptPlayer 脚本播放器\n我们将为你演示脚本播放器的基本功能,请点击鼠标左键"

text
"我们来试着加载并显示背景图"

load bg "CGDATA/title001.bmp"

text
"现在,试着在画面左边加载一个立绘"

load left "CGDATA/MEGU111.BMP"

text
"很好,试着在画面右边再加载一个立绘"

load right "CGDATA/SINO113.BMP"

text
"接下来,我要删除全部图像"

unload all

text
"喔~~一片漆黑,什么都看不到!!"

text
"点击鼠标结束程序哦"

上述脚本代码基本上不言自明,只有三种命令,第一种是 text 命令,用于显示指定文本,第二种是 load 命令,用于加载指定图像文件,并将其显示在屏幕指定位置,第三种是 unload 命令,用户从屏幕中移除指定位置的图像,并且将图像资源从内存中释放;

运行效果如下图所示:

接下来,我要演示一下数值计算的功能,但是,仅仅数值运算,并没有任何作用,在文字冒险游戏中,数值往往必须配合条件判断与跳转语句,才能发挥真正的效用,比方说创建一个变量 LoopCount,初始化为 0,然后为 LoopCount 增加 1,如果发现 LoopCount 小于 3,则跳转到指定的文本指令,显示提示文本,然后跳转到头部重新执行,如果 LoopCount 等于 3,则结束脚本的运行;

为了实现上述效果,我们可以编写出下面脚本:

set LoopCount = 0

:LabelStart
calc LoopCount + 1

if LoopCount == 1 LabelRunFirst
if LoopCount == 2 LabelRunSecond
if LoopCount == 3 LabelEnd

:LabelRunFirst
text
"游戏第一次运行呢"
goto LabelStart

:LabelRunSecond
text
"游戏第二次运行了哦"
goto LabelStart

:LabelEnd
text
"点击鼠标结束程序哦"

代码应该不会很难看懂,如果你稍微有一点点 Windows 系统下的命令行使用经验,或者编写 bat 文件的经验,那么读懂上面脚本应该易如反掌,首先,在脚本的开头,使用 set 命令创建一个变量 LoopCount,并将其初始值设置为 0,用于记录脚本已经重复运行多少次,然后马上为 LoopCount 加 1,随后对 LoopCount 的值进行判断,如果为 1,则显示对话 1,如果为 2,则显示对话 2,如果为 3,则直接跳转到脚本末尾,显示退出提示文本,最终程序退出,运行效果如下所示:

  

  

运行结果并没有什么令人感到惊讶的地方,相反,【容易使用】就是这款脚本系统的最大特点,因为脚本最终是交由脚本编写人员进行编写,程序开发者不会进行过多的干涉,这样子,可以让编写游戏故事的人员可以随时随地测试自己的构思与想法;

最后,放出脚本引擎的可执行程序文件,大家可以下载回来后,通过编辑 main.txt 文件,然后使用 nkScriptCompiler.exe 进行编译,如果成功生成了 main.nse 文件,则可以使用 nkScriptPlayer.exe 进行运行,编写好的脚本保存好后,只需要直接双击 nkScriptCompiler.exe 就会自行编译,然后直接双击 nkScriptPlayer.exe 就会自动运行脚本,点击鼠标左键可以与脚本进行人机交互:

http://pan.baidu.com/s/1jHL8yZc

-- 2016-10-17 By NekoDev cnblogs

-- 原创技术文章,转载请注明出处,并保证内容的完整性

时间: 2024-11-03 05:44:10

用 C 语言和 nkCEngine 写了一个基于命令的迷你脚本编译器与脚本播放器的相关文章

Python写了一个WC命令

Python 写了一个收发数据用的一个wc命令,更多学习交流请加365534424 ,直接上代码 #!/usr/bin/env python # coding:utf-8 # author: 51reboot.com # QQ群:365534424 from optparse import OptionParser import os class Wc(object):     def __init__(self):         self.n = 0              # line 

写了一个基于React+Redux的仿Github进度条

曾经实现过Angular版,这次感觉用了高大上的React却写了更多的代码,需要的配置也更多了,有利有弊吧. 但这个“导航条问题”很有意思,涉及到在Redux中写timer,其实我很困惑,到底如何完美模拟用户的页面加载, 貌似浏览器并没有提供进度API,只能以这样拙劣的方式进行模拟,有兴趣的朋友不妨与我交流. 代码附上: LoadingBar.jsx import React, { Component, PropTypes } from 'react'; import { connect } f

写了一个基于微信公众平台的图片识别应用!

这个东西的来由主要是因为我之前看到一些默生的植物.水果等不知道名字,心里痒痒的,上百度又无从搜索.效果请看图... 想体验的同学请关于博主的微信公众平台微信号: webworking 或 扫下面二维码进行关注:

用Python设计一个基于命令行的图形界面

Introduction 如今很多开发工作都需要远程进行,比如深度学习需要登录到专门的服务器上.当你需要看一些可视化的结果时,可能需要用到matplotlib或是seaborn这样的绘图库.那么你或许还需要通过ssh或者scp把图片下载到你本地的桌面才能看,这样非常麻烦. 考虑到现在的terminal基本都已经支持24-bit真彩色表示,所以很自然地联想到,能不能直接在terminal中进行画图呢?比如常用的柱状图或热图,就足够能解决很多问题了. 原文地址:http://blog.51cto.c

一个基于Dapper的DbContext封装

开篇: 各位博客园的园友好,这是我第一次在园子里写些东西.我是一个技术菜鸟,伴随着苦与乐,已经渡过了8年的IT技术生涯,准备利用这篇天地向大家交流学习. 正题: 今天上午闲来无事,利用上午时间写了一个基于Dapper的DbContext封装.还有很多地方没有完善,敬请期待下次更新. Dapper for DbContext

Go语言和ASP.NET的一般处理程序在处理WEB请求时的速度比较

Go语言和ASP.NET的一般处理程序在处理WEB请求时的速度比较 1.首先写一个Go语言的简单WEB程序,就返回一个HelloWord! package main import ( f "fmt" "log" "net/http" // "strings" ) func sayhelloName(w http.ResponseWriter, r *http.Request) { // r.ParseForm() // f.P

C语言和C++的区别与对比

C是C++的基础,C++语言和C语言在很多方面是兼容的.因此,掌握了C语言,再进一步学习C++就能以一种熟悉的语法来学习面向对象的语言,从而达到事半功倍的目的. 差不多是win98跟winXP的关系.C++是在C的基础上增加了新的理论,玩出了新的花样.所以叫C加加. C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制). C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问

大数据工具比较:R 语言和 Spark 谁更胜一筹?

本文有两重目的,一是在性能方面快速对比下R语言和Spark,二是想向大家介绍下Spark的机器学习库 背景介绍 由于R语言本身是单线程的,所以可能从性能方面对比Spark和R并不是很明智的做法.即使这种比较不是很理想,但是对于那些曾经遇到过这些问题的人,下文中的一些数字一定会让你很感兴趣. 你是否曾把一个机器学习的问题丢到R里运行,然后等上好几个小时?而仅仅是因为没有可行的替代方式,你只能耐心地等.所以是时候去看看Spark的机器学习了,它包含R语言大部分的功能,并且在数据转换和性能上优于R语言

使用DOT语言和Graphviz绘图(翻译)

Casa Taloyum About Me Blog Archives 使用DOT语言和Graphviz绘图(翻译) Date Wed 26 November 2014 Tags graphviz / dot 简述 本文翻译自Drawing Graphs using Dot and Graphviz 1. 许可 Copyright (C) 2013, 2014 Tony Ballantyne. Permission is granted to copy, distribute and/or mo