2017-07-23 00:08
直接提供图片算了,简单粗暴
2017-07-21 23:15
重大更新,因为不考虑ons引擎,只考虑自己的了,所以得先设计语法,明天zai'shuo
结构如下:
PY后端:
- manage.py 用户处理websocket事件
- resolve.py 用于处理引擎
前端就是基础三件套。
目前支持语法
["mov","goto","dwave","bgm","bgmstop","bg","if","SEL","end","fin","gosub"]
可识别语法:
["mov","goto","dwave","print","bgm","lsp","bgmstop","wait","textclear","bg","if","SEL","end","fin","gosub","br"]
通信通过WebSocket通信。
过程:
前端->{dat:游戏脚本路径或者特殊标号}
->后端:
- 是否第一次运行? 找到第一个游戏段,解析;解析段地址为前端给予的地址
- 解析
-返回成指定数据格式`
->前端:
- 数据格式拆包
- 显示给用户
- 遇到SEL/END ->发送下一个章节的代码段(代码段在SEL语句里有)->跳转到最上方
后端解析方式:
更具前端返回,判断是否有cs?
有:读取指定的cs段 ; 没有:从第一个cs段开始解析
读入cs端,逐行解析
两个for迭代循环命令,判断语句是否带有上面的可识别命令
遇到执行命令,append到指定的列表中去(bgm,bg,voice等等),并记录文字列表的长度(好让前端知道什么时候显示
如果全都不是,那么认为为文字(文字之前没有任何命令,print什么的都没有,就直接显示)
append到文字列表
持续到逐行全部解析结束
打包成指定数据格式
通过websocket发送给前端
指定数据格式结构:
一段json:
{
"str":[文本i,文本j....文本n],
"flag":{用户所包含的文本地址},(这个参数请下一次请求时也请原封不动的传递上来)
"bgm":{int:资源地址,int:'资源地址'},
"voice":{int:'资源地址',int:'资源地址'},
"Dwave":{同上},
"bg":{同上},
"Next":下一章节标题名,
}
dict格式{int:资源地址},其中int和list 显示文本一一对应。
后期扩展(如特效等等):延长json长度,后面加入更多的特效指令和list对应。
其中,Next一般是SEL语句或者是直接下一章的章节名,如果是SEL语句请更具用户的选择来返回对应的Next。
完整流程:
第一次运行游戏请用ws传递json {"dat":游戏脚本}
同时,ws端将会返回一大段的
{
"str":[文本i,文本j....文本n],
"flag":{用户所包含的文本地址},(这个参数请下一次请求时也请原封不动的传递上来)
"bgm":{i:资源地址,j:'资源地址'},
"voice":{k:'资源地址',n:'资源地址'}, (ijkl均为int,对应着文本i,j,k,l..)
"Dwave":{同上},
"bg":{同上},
"Next":下一章节标题名, (这个也请原封不动的传递上来)
}
不同的是Next有时候并不会返回章节名,也许会返回选择支,例如
SEL "敲门","今天这先这样吧","*CA_0","*CA_1"
请更具用户的选择修改给函数传递的cs内容。当然,也有会其他类型的文本
error 说明脚本编写错误,请直接停止游戏,因为脚本无法继续运行下去了
GameEnd/End/Fin 说明已经通关到达结局
传递消息
第二次运行时请传递json {"flag":上一次返回的,"cs",也是上一次返回的} 均为上次返回的值
注意cs可能更具SEL的选择支进行改变
返回的内容同上
2017/5/30更新
程序项目新地址:https://git.oschina.net/gaoshi_team/galgame_server
如你们所见基本没怎么动。
把那个很蠢的函数判断方法换了,用了你个略魔幻的方法
9bie,你的本子站呢,就是那个213端口的,我打不开了
关了_(:з)∠)_。。。源码这个站里有
大佬的博客越来越看不懂了……
我只是一条咸鱼啦_(:з)∠)_
搞事竟然没叫上我