+ GameBook Plus! ----------一起来写游戏吧。^^
使用论坛代码"GB Plus!",可以创造出各种有趣的GameBook(游戏书?)。
对GameBook没有概念的话可以去玩一玩
『这里是心跳☆高中』。
本次发布的论坛代码是上次的"GB"代码的一次升级,追加了很多新功能,进化至"GB Plus!"。
"GB Plus!"代码支持内容的分页显示,支持变量定义与计算,以及条件页面跳转和随机页面跳转,以及模板变量,并附带一个调试台。
使用"GB Plus!"代码可以实现各种基于选项和记分的测验、占卜、冒险等文字游戏。
对于传统的帖子,内容分页的功能也有助于更好地组织帖子的内容。
爱生活,爱"GB"。一起来使用吧。^^
+ 示例 ----------GameBook("『小白兔的旅途』");* 说明 ***以上游戏移植于米菲剧场的示例。
因为使用了大量的条件跳转,代码会显得很复杂,写起来也很花时间。
以上示例的主要意图是证明“连这种事情啊那种事情啊都可以做哦”,用以演示GB Plus!能强大到什么程度。
实际使用中,大家可以根据自己的根性量力而为。
* 代码 ***为了节省篇幅,使代码的结构清晰可见,以下代码中去掉了实际的代码中用于排版和样式的UBB标签,只保留了核心代码。
点击展开
[ gb=GameBook("『小白兔的旅途』");]
{debug/}
{#}
这是某个兔子星的某只小白兔的故事
{@序曲, carrot=3}开始{/@}
{/#}
{#序曲}
“形式已经相当的严峻了... 即将到来的会是怎样的命运呢”
“家里边的萝卜只剩下三天的份了”
“到米菲乐园去,那里是你的归宿”
一只乌鸦飞来了,叫了一声,然后飞走了
决定后,小白兔带上最后的三根萝卜,踏上了旅程。
到达米菲乐园需要七天时间。
但是每天都需要吃一根萝卜。
只靠三根萝卜的话旅途会变得很艰险。
“总会有办法的吧”
{@早晨, day=1}小白兔的旅途开始了。{/@}
{/#}
// 七日循环开始 ===================================
{#早晨}
第%day%天 萝卜x%carrot%
早晨到了。
"今天也加油哦~"
{@事件}走啊走 走啊走{/@}
{/#}
// 随机事件传送点
{$事件, ?} {20, 无事} {60, 熊} {100, 田} {/$}
{#无事}
第%day%天 萝卜x%carrot%
{@夜晚}今天什么也没发生,平安地度过了。 {/@}
{/#}
// 熊遭遇事件开始 ===================================
// 根据剩余萝卜数量调整事件
{$熊, carrot} {0, 熊1} {99, 熊2} {/$}
// 没有萝卜时
{#熊1}
第%day%天 萝卜x%carrot%
遇到熊了!
熊:“噢噢噢!把萝卜交出来!”
怎么办?
{@战斗}与熊战斗! {/@} {@战斗}与熊战斗! {/@}
{/#}
// 剩余萝卜时
{#熊2}
第%day%天 萝卜x%carrot%
遇到熊了!
熊:“噢噢噢!把萝卜交出来!”
怎么办?
{@交出}交出一根萝卜... {/@} {@战斗}与熊战斗! {/@}
{/#}
{#交出}
第%day%天 萝卜x%carrot%
熊:"噢噢!好兔子!"
{@夜晚, carrot - 1}失去了一根萝卜...{/@}
{/#}
// 战斗胜负判断
{$战斗, ?} {20, 战胜} {100, 战败} {/$}
{#战胜}
第%day%天 萝卜x%carrot%
激烈的战斗之后...
胜利了!
{@夜晚, carrot + 2}战利品的两根萝卜入手了!{/@}
{/#}
// 战败后根据剩余的萝卜调整事件
{$战败, carrot} {1, 战败1} {99, 战败2} {/$}
{#战败1}
第%day%天 萝卜x%carrot%
激烈的战斗之后...
被打败了!
{@夜晚, carrot = 0}所有的萝卜也被抢走了!{/@}
{/#}
{#战败2}
第%day%天 萝卜x%carrot%
激烈的战斗之后...
被打败了!
{@夜晚, carrot - 2}两根萝卜也被抢走了!{/@}
{/#}
=================================== 熊遭遇事件结束 //
// 种萝卜事件开始 ===================================
// 根据剩余萝卜数量调整事件
{$田, carrot} {0, 田1} {99, 田2} {/$}
// 没有萝卜时
{#田1}
第%day%天 萝卜x%carrot%
发现了肥沃的田地!
{@夜晚}但是一根萝卜也没有了...{/@}
{/#}
// 剩余萝卜时
{#田2}
第%day%天 萝卜x%carrot%
发现了肥沃的田地!
要种一根萝卜试试么?
{@种, carrot - 1}种{/@} {@夜晚}不种{/@}
{/#}
// 收成判断
{$种, ?} {60, 收获} {100, 无收} {/$}
{#收获}
第%day%天 萝卜x%carrot%
埋了一根萝卜。
过了很久之后...
{@夜晚, carrot + 2}长出来两根萝卜!{/@}
{/#}
{#无收}
第%day%天 萝卜x%carrot%
埋了一根萝卜。
过了很久之后...
{@夜晚}什么也没发生...{/@}
{/#}
=================================== 种萝卜事件结束 //
// 根据剩余萝卜数量发展剧情
{$夜晚, carrot} {0, 升天} {99, 过夜} {/$}
{#升天}
第%day%天 萝卜x%carrot%
晚上到了。
“已经一根萝卜都没有了啊。”
“看来俺的日子也到头了...”
谁也不知道的寒冷的深夜里,小白兔去了天国。
- Game Over -
{/#}
{#过夜}
第%day%天 萝卜x%carrot%
晚上到了。
{@吃萝卜, carrot - 1}“吃萝卜吧!”{/@}
{/#}
{#吃萝卜}
第%day%天 萝卜x%carrot%
萝卜少了一根。
{@天亮, day + 1}于是夜深了...{/@}
{/#}
{$天亮, day} {7, 早晨} {8, 乐园} {/$}
=================================== 七日循环结束 //
{#乐园}
七天的旅途过去了,小白兔终于来到了米菲乐园。
堆得像山一样高的萝卜印入眼帘。
“啊啊啊!太棒了!”
于是小白兔的幸福生活再次开始了。
- The End -
{/#}
[ /gb]
0
+ 使用说明 ----------* 代码结构 ***[ gb=标题]
{debug/}
注释 {#} {@标识符 , 算式}链接{/@} {/#}
注释 {#标识符} %变量名% {@标识符 , 算式}链接{/@} {/#}
注释 {$标识符 , 变量名} {数值 , 标识符} {数值 , 标识符} {/$}
[/gb] |
* 流程 ***要创造一本书,首先需要定义一些"节点",以及连接各个节点的"边"。
"节点"包括页面节点,以及控制链接跳转方向的传送点。
"边"对应于页面中定义的链接。用户可以点击链接,跳转到不同页面。
从计算机专业的角度换句话说,"节点"和"边"定义了一个图,或者说是定义了一个自动机。
系统根据用户的点击,在不同的节点之间互相切换,显示不同的页面。
* [ GB=标题][ /GB] ***定义一本书。
标题通常是一段文字描述,可包含部分论坛代码。
点击标题后展开或者合上书。
[ GB=标题]与[ /GB]之间可插入代码段,注释,以及调试开关。
* 代码段 ***定义一个节点或一条边。
例如标签{#}与{/#}之间的代码,包含标签本身,定义了一个节点。这称为一个代码段。
* 注释 ***代码段之间可以添加注释。
在不引起与代码段混淆的情况下,注释可以使用任何内容。
注释中不要使用半角"-"号,有可能引发错误。
* {debug/} ***注释中包含"{debug/}"时,开启调试模式。
调试模式下,代码执行过程中的变量计算、节点移动等状态信息将显示在额外的调试台里。
调试模式可以帮助用户在书写代码的过程中检查错误,分析代码执行流程。
正式发布时建议去掉“{debug/}”以关闭调试模式。
* {#标识符}{/#} ***定义一个页面节点。
标识符为空时,该页面节点作为首页。
{#}与{/#}之间可以插入链接,模板变量,以及任何论坛代码。
* 标识符 ***节点的唯一标识,可以使用除半角","号以外的便于理解和使用的任意字符。
同一本书中的标识符不可重复。
* %变量名% ***定义页面中的模板变量。
页面显示时,模板变量会替换为对应的数值。
例如变量"day"等于7,某页面包含"第%day%天",该页面显示时,显示结果为"第7天"。
* 变量 ***用户在脚本中自定义的变量。
变量主要用于页面的条件跳转。
变量名可以使用除半角","号以外的便于理解和使用的任意字符。
* {@标识符 , 算式}链接{/@} ***定义一个节点指向另一个节点的链接。
用户点击链接后,系统跳转到与标识符对应的节点,并利用算式更新变量的值。
标识符为空时,跳转到首页。
算式为空时,跳转时不更新变量。
{@}与{/@}之间可以插入部分论坛代码。
* 算式 ***定义点击链接时伴随的运算操作。
格式:[变量名] [运算符:+-*/=] [数字]
示例:"x + 5"、"neko_number = 1"、"经验值 / 2"
运算符使用 + - * / = 之一。
运算时,[变量名] = [变量名] [运算符] [数字]。例如"x + 1"对应于 x = x + 1。
当变量名第一次出现时,系统自动创建该变量,并将其值初始化为0。
除号"/"使用整除计算。例如x等于5时,算式"x/2"运算后,x等于2。
等号"="使用赋值运算。例如x等于5时,算式"x=3"运算后,x等于3。
* {$标识符 , 变量名} {数值 , 标识符} {/$} ***定义一个传送节点。
变量名等于半角“?”号时,定义一个随机传送节点。
系统逐一对比指定变量与{$}{/$}之间定义的跳转条件,满足条件时跳转至相应节点。
{$}与{/$}之间可以包含多对形如 {数值 , 标识符} 的跳转条件定义。
数值为整数,如:5、0、-1,标识符为节点标识符。
按照跳转条件定义的先后顺序,系统依次对比“数值”与“变量”。
当第一次满足“变量”小于等于“数值”的条件时,跳转到该数值对应的节点。
最后一组跳转条件定义必须使得“变量”满足小于等于“数值”,否则会因为没有适合的跳转条件而发生错误。
因此最后一组定义中的“数值”可以取一个足够大的值,比如9999。
随机传送节点的情况下,系统用值为0~99之间的随机等概率整数取代变量名对应的值,完成上述对比。