智能型文字游戏开发工具

智能型文字游戏开发工具

2022-11-06 1046次阅读 1人点赞

开发工具演示站点:[心的彼端](心的彼端 (oujo.cn))
源码下载链接: 智能型文字游戏开发工具(稳定版).rar

使用说明

人工智能方式,把剧本文字自动转化成动画影片,还可以向动画人物提问故事里的事情。

你可以教动画人物知识,然后提问教过的知识,或动画人物已知的知识。

现在知识库知识太少,请按问答方法,先教后问,不要直接就问。教和问不能一起发送。

此程序完全开源、完全免费。先看完教程,才能看懂源码。源码做了详细的注释,没注释的源码都是次要的、辅助的、美化网页的程序,那些不用学习。

此源码只用于个人研究,不得用于商业目的。

界面





安装方法

运行需要mysql数据库(建议用5.7版本)和php运行环境(例如AppServ)。

新建数据库,把snow.sql导入数据库,字符集设utf8,排序规则设utf8_general_ci

配置文件config.php改成你的信息,就可以运行了。
安装mysql数据库:

第一步:安装mysql数据库。

第二步:安装navicat或workbench,就是mysql的可视化界面。

第三步:新建数据库,把snow.sql导入进去。

(1)Navicat导入数据库的方法:





先连接mysql,点击工具栏的连接(connection),再点mysql,然后设置。

连接后,点击左侧导航栏的连接名,使其变绿。然后鼠标右键的菜单中,新建数据库(New Database),字符集(character set)选择utf8,排序规则(collation)选择utf8_general_ci。

双击新建好的数据库,使其变为绿色。鼠标右键菜单,选择运行sql文件(Excute SQL file)。点击文件框(file)右边的小方形按钮,选择文件snow.sql,点击开始,就可以导入进去了,导入成功后点关闭按钮。

查看存储过程:navicat中,不叫存储过程,而叫函数。在左侧导航栏的函数列表,双击名称就可以打开了。

(2)Workbench导入数据库的方法:

先连接mysql,然后新建数据库(Create a new schema),default charset选择utf8,default collation选择utf8_general_ci,然后点apply。

左侧导航栏(Navigator)下有两个按钮:Administration和schemas。选择Schemas,点击新建的数据库,鼠标右键菜单选择Set as default schema(设为默认数据库)。再选择Administration,选择Data Import/Restore,就是导入数据,选择Import from Self-Contained File,选择文件snow.sql。点击下面Default Target Schema的输入框,选择刚才新建的数据库,再点右下角的按钮start import。等待一会,显示Import Completed时,就完成了。还需要刷新一下左侧导航栏的数据库,就是鼠标右键菜单的reflesh all。

查看存储过程:选择Stored Procedures,就显示所有的存储过程。要打开存储过程,鼠标光标放到存储过程名称上,右边出现小圆形的扳手图标,点击该图标,就显示存储过程了,而双击名称是无用的。

显然workbench比较麻烦,不适合新手,而且没有夜晚模式,看久了眼睛不舒服。

搭建php运行环境:

第一步:安装AppServ。安装时,出现4个组件的选择安装,把MySql Database的钩去掉,就是不要安装,否则会覆盖已安装的mysql数据库。mysql数据库应另外单独安装,用不着通过AppServ方式安装。

第二步:把网页程序文件,都放到C盘的AppServ文件夹里的www文件夹里。

第三步:浏览器网址栏输入localhost/index.html就可以打开网页主页了。

最好在www文件夹下,再建立一个文件夹,例如叫a。网页文件都放入a文件夹,那么网址就是localhost/a/index.html

搭建远程服务器环境(本地运行,不用考虑这个):

远程服务器有两种类型:云服务器和轻量应用服务器。

云服务器的优点:允许同时访问网站的最大访问量高,也就是允许同时在线的人物多。

云服务器的缺点:初始时,只有操作系统,没有其它软件。

轻量应用服务器的优点:第一,已经搭建好了网站设置的可视化界面,以及常用软件。所以对于新手而言,最好选择轻量应用服务器。第二,同一档次的情况下,轻量应用服务器的带宽,通常比云服务器高,也就是传输速度快。

搭建云服务器:

第一步:给服务器安装操作系统,一般选择轻量级的操作系统centOS,最好用稳定的7.6版本。

第二步:用SSH工具(远程连接工具)连接到服务器,建议用PuTTY。

第三步:centOS系统时,用yum指令,在线安装堡塔(宝塔)。堡塔方便给服务器下载和安装应用软件,以及搭建网站。

第四步:通过网页方式,进入堡塔管理页面,这样就有个可视化的界面来管理服务器了。

第五步:在堡塔界面中,新建网站。

第六步:导入数据库,上传网页文件。

第七步:防火墙放行mysql专属的3306端口。

第八步:设置新的root密码。

第九步:把网页文件中的config配置文件的host值写为127.0.0.1,不要写localhost。

127.0.0.1是计算机环回地址,也就是服务器自身访问自身。

如果报错,错误编号为1130。解决方法:SSH工具连接mysql,进行如下设置:

mysql -u root -p

mysql>use mysql;

mysql>update user set host = ‘%’ where user =’root’;

mysql>flush privileges;

mysql>select host,user from user where user=’root’;

然后就可以正常运行了。

如果把host写为服务器ip,而不是计算机环回地址127.0.0.1,才会报错1130。

安全说明:一般程度的安全是做到了,把配置文件保护好了。php写的配置文件,如果直接从网页页面下载配置文件,php程序内容会显示为空,只有在源码中才能看到php程序的内容,这是本来就有的保护机制。至于高级的保护机制,我不会。

首页为index.html,数据库为snow.sql

人工智能程序都写为了mysql存储过程,网页只是输入输出的显示。

已有非常唯美的网页显示界面。由于人工智能程序都在数据库里,所以如果你们要做电脑客户端或手机客户端,只需要做个显示界面就行。

你可以不要任何网页文件,只要数据库文件(snow.sql),就包含全部的人工智能程序。调用存储过程enter,就可以完成人工智能。enter第一个是输入参数(用户输入),第二个是输出参数(电脑回答)。如果要网页文件,index.html中,arr[0]里面就是电脑的回答,是connect.php从mysql数据库传回的回答。

剧情设计

主话语是对话框每次显示的人物话语,可以连带(附带)提问选项、后果影响、前提条件。

主话语框的内容,一次不要写的太多,建议分多次写完,免得文字溢出对话框。

主话语要选择说话人和表情(一般、高兴、忧伤、生气、惊讶)。

说话人阿哲不显示阿哲的人物图片,因为阿哲是用户视角,只显示对话文字。

场景模式分为:正常、有景无人、全屏文字。

正常:有景有人。

无名:不显示名字框。用于主人公的旁白和心理自述。

有景无人:有背景图片,但是没有人物,用于介绍环境。

全屏文字:黑颜色的背景,人物和背景环境都没有,用于介绍故事背景。

场景图片(背景图片)、人物图片(人物1和人物2)、音乐,共同构成了影片画面。所以写主话语时,不要忘记在右边栏中设置场景、人物、音乐。

每个场景可以选择时间:白天、傍晚、晚上。时间不同,图片效果就不同。还可以选择天气:晴天、下雨。

人物设置上,如果不选人物2(人物2为“无”),就是只有1个人物,居中显示。如果选择了人物2,画面中就有两个人物,人物1在左,人物2在右。

阿哲之外的说话人,要记得配上人物图片,否则就成了空气在说话。例如说话人栏选择阿玉,那么设置人物图片栏也要选择阿玉。

如果你不了解书写规范,就在剧情设计界面的各个小框里写,然后点“小框内容提交到剧情栏”。如果你了解书写规范,可以直接在界面左边的剧情栏里写。

只有剧情栏的内容会被保存,小框的内容不会被保存,所以小框内容必须提交到剧情栏,才有效。

不是写一行保存一行,而是剧情栏里都写完了,最后点保存按钮,保存剧情栏的所有内容。保存前,还可以在剧情栏里检查和修改。

保存时,如果勾选了“语义理解”,就会人工智能的语义分析,这样就可以向动画人物提问故事里的事情。例如故事里写“阿玉喜欢猫。”就可以问“阿玉喜欢什么”

剧情设计界面,如果填写了选项框,播放剧情时,就会弹出选项框。点击选项,就会显示选项的回答。

最好把分支归一框填了,否则每个选项后面,就开启一条剧情线。如果其中哪个剧情线后面忘写了,而用户又偏偏点了那个选项,后面就没东西了,故事也就提早终结了。而如果填了分支归一框,无论用户选择哪个选项,选项回答后,下一句话都是分支归一框的内容,这样就避免分成多个剧情线。

还可以设置前提条件。满足前提条件时,才执行主话语句。如果不满足条件,就执行不满时的话语句。当然最好把分支归一框填了,这样的话,无论是否满足条件,回答后,接下来的句子都是归一框的句子,从而防止分成两条剧情。

还可以设置后果影响,就是主话语句对条件状态的改变。如果条件状态改变了,下次运行同样的剧情,却可能由满足条件,变为不满足条件。

书写规范:

(1)主话语在前,其它方面(例如场景、音乐、选项)写在后面(下一行开始)。

不同内容,每次要换行,不能写在一行上。

(2)人物说话:

人物名字(表情):话语内容。

如果表情是一般,则省略不写。

阿玉:你好。表示阿玉的表情为一般。

阿玉(高兴):你好。表示阿玉的表情为高兴。

(3)场景:

场景(时间、天气):场景名称。

如果时间为白天,则省略不写。如果天气为晴天,则省略不写。

场景:卧室1。表示场景为卧室1,时间为白天,天气为晴天。(白天和晴天都省略不写)

场景:卧室1(傍晚)。表示时间为傍晚,天气为晴天。(晴天省略不写)

场景:卧室1(下雨)。表示时间为白天,天气为下雨。(白天省略不写)

场景:卧室1(傍晚、下雨)。表示时间为傍晚,天气为下雨。(没有可省略的)

错误的写法:

场景:卧室1(白天)

场景:卧室1(晴天)

场景:卧室1(白天、晴天)

(4)不变就不写

最初的第一句话,要写场景、人物、音乐。随后的话语中,不变就不写,变化了才写。

阿玉:你好。

人物:阿玉

场景:街1

阿玉:很高兴见到你。

人物:阿玉(不要写这一句,因为人物没有变化,不用重复写)

场景:街1(也不要写这一句,因为场景没有变化,不用重复写)

但是,即便场景名称没变,时间或天气变了,也要重写场景。也就是说:场景名称、时间、天气,这三者任何一个变了,都要重写场景。

(5)两个角色时,人物名用顿号分开。

人物:阿玉。表示一个人物。

人物:阿玉、小茜。表示两个人物。

(6)全屏和有景无人

全屏文字时,写全屏:内容。

有景无人时,写无人:内容。

无名模式时,写无名:内容。

全屏文字模式回到正常模式,要重新写场景和人物。(因为之前场景和人物都没了)

有景无人模式回到正常模式,要重写人物。(因为之前人物没了)

(7)选项:

有选项时,在主话语后面写选项和答。例如:

选项1:选项内容。

答:回答的内容。

选项2:选项内容。

答:回答的内容。

选项归一:归一的内容。

具体看下面的例子,就是剧情中“简单介绍”的剧本文字:

标题:简单介绍

阿玉:初次见面,我叫阿玉。我来为大家介绍这个网站。剧情设计栏目,可以把文字转化为动画。按问答方法,可以人工智能对话,还可以提问剧情里的事情。

场景:卧室2

人物:阿玉

音乐:主旋律1

阿玉:接下来为大家介绍表情系统。人物有五种表情,以适应不同的剧情。现在是一般表情。

阿玉(高兴):生活中总有些快乐的事情,让我喜笑颜开。

阿玉(悲伤):但是人生中有阳光就有风雨,有时我也会悲伤。

阿玉(生气):有些事情,惹得我生气。

阿玉(惊讶):还有些事,会让我表情惊讶。

阿玉:人物不仅可以选择表情,还可以选择穿着。现在我换成了校服,在人物下拉框里设置。

人物:阿玉(校服)

小茜:大家好,我是可爱的小茜。场景中可以设置两个人物喔,在人物2里设置另一个人物。有很多人物可以选择。

人物:阿玉(校服)、小茜

小茜:说话人和人物图片要对应,否则说话人的名字和人物图片不匹配。

小茜:接下来,由我来介绍场景系统。场景就是背景图片,有很多种场景可以选择。每种场景分为白天、傍晚、晚上三种光影模式,还可以设置晴天或下雨。

人物:小茜

小茜:现在切换到傍晚模式,夕阳余晖下的房间。在具体场景中切换。

场景:卧室2(傍晚)

小茜:随后,夜晚降临。拉上窗帘,打开了灯。

场景:卧室2(晚上)

小茜:场景模式上,正常就是有景有人,有景无人用于介绍环境,全屏文字用于介绍故事背景。

无人:现在是有景无人模式。

全屏:现在是全屏文字模式。

小茜:现在恢复回正常模式。想出去走走。

场景:卧室2(晚上)

人物:小茜

小茜:来到了家门口。

场景:家门口2

小茜:下雨啦。

场景:家门口2(下雨)

音乐:下雨1

小茜:主话语是对话框每次显示的话语。最好每次少写,多次写完。主话语可以附带提问选项、后果影响、前提条件,也可以只写主话语。

小茜:如果填写了提问选项,就会弹出选项框,点击不同选项,产生不同回答。例如想吃点什么?

选项1:苹果

答:小茜:给你一个青苹果。

选项2:西瓜

答:小茜:给你一块大西瓜。

选项归一:小茜:要填写分支归一。这样的话,无论用户选择什么选项,回答后,下一句话都是分支归一框的句子。

小茜:后果影响是主话语句对条件状态的改变。如果条件变化了,下次可能由满足条件的剧情,变为不满足条件的剧情。

小茜:前提条件是满足条件时,才执行主话语句,否则执行不满足条件时的句子。

小茜:带大家到学校看看。

场景:教室2

音乐:一般1

小茜:如果你了解书写规则,可以直接在剧情设计界面左边的剧情栏里写剧情。

小茜:小框的内容要提交到剧情栏,因为小框的内容不会被保存,只有剧情栏的内容才会被保存。不是写一行保存一行,是都写完,最后再保存。

阿玉:保存剧情时,如果勾选了语义理解,动画人物就会通过人工智能方式理解剧情。然后可以向动画人物提问剧情里的事情。

人物:阿玉(校服)、小茜

阿玉:也可以向动画人物教知识,然后提问教过的知识,或动画人物已知的知识。由于知识库知识太少,所以请按问答方法,先教后问。

阿玉:先简单介绍这些,更多内容请点击菜单按钮。

小茜:以后请大家多多关照。

问答方法

知识库知识太少,所以请先教后问。教和问不要一起发送。

提问动作执行者(主语)或动作对象(宾语)用:谁、什么、啥

教:猫吃鼠,问:猫吃什么,答:鼠

注意1:不要写“教:”直接写猫吃鼠。也不要写“问:”直接写猫吃什么。

注意2:问主语或宾语,用“谁”或“什么”,不要再加多余的字。例如问猫吃什么,不要问猫吃什么动物,多加“动物”两个字,就错了。

问:什么吃鼠,答:猫。

教:猫给鼠苹果,问:猫给鼠什么,答:苹果

教:猫让鼠跳舞,问:猫让谁跳舞,答:鼠

提问动作(谓语动词)用:怎么

教:猫吃鼠,问:猫怎么鼠,答:吃

提问行为(动作及动作对象)用:干什么、做什么

提问主语的行为:教:猫吃鼠,问:猫干什么,答:吃鼠

提问宾语的行为:教:猫让鼠跳舞,问:猫让鼠干什么,答:跳舞

提问主语的身份、性质、状态(表语)用:是什么

教:猫是动物,问:猫是什么,答:动物

提问形容词用:什么样的

教:猫吃黑色的鼠,问:猫吃什么样的鼠,答:黑色的

提问数词用:多少、几

教:猫吃两只鼠,问:猫吃多少鼠,答:2只

提问所属(名词所有格)用:谁的、什么的

教:阿哲的猫吃鼠,问:谁的猫吃鼠,答:阿哲的

提问动作方式(副词)用:怎么的

教:猫经常吃鼠,问:猫怎么的吃鼠,答:经常

提问时间用:什么时候,什么时间

教:昨天猫吃鼠,问:什么时候猫吃鼠,答:(显示昨天的年月日)

提问地点用:在哪里、什么地方

教:猫在花园吃鼠,问:猫在哪里吃鼠,答:花园

“吗”字句:

教:猫咬鼠,问:猫咬鼠吗,答:是的

问:猫咬蛇吗,答:没听说过

已知句(教过的句子,再教):

教:猫咬鼠

答:这个我知道

原因结果连接词:所以、因为

教:猫饿了,所以猫吃鼠

或者教:因为猫饿了,猫吃鼠

或者教:猫吃鼠,因为猫饿了

提问因果关系:为什么、所以怎样、结果怎样

问:为什么猫吃鼠。答:因为猫饿了

问:猫饿了,所以怎样。答:猫吃鼠

其实输入原因(猫饿了),直接就会回答结果(猫吃鼠)

输入结果(猫吃鼠),直接就会回答原因(猫饿了)

先后顺序连接词:然后

教:猫吃饭,然后睡觉

提问先后顺序:然后怎样,然后干什么,之前怎样

问:猫吃饭,然后怎样。答:睡觉

目的连接词:为了、目的是

教:猫吃饭,为了生存

或者教:猫吃饭,目的是生存

提问目的:为了什么,目的是什么

问:猫吃饭,为了什么。答:生存

建议句型

五种基本句型:

主谓句型:动作执行者 - 动作

例如:猫玩耍

主谓宾句型:动作执行者 - 动作 - 动作对象

例如:猫吃鼠

双宾语句型:动作执行者 - 动作 - 间接宾语 - 直接宾语

例如:猫给鼠苹果

双宾语句型的常见动词:给、给予、交给、供给、提供、供应、赠、赠送、送、送给、捐给、捐赠、捐献、献给、资助、赞助、授予、交付、花费、递给、递来、借、借给、租借、还、归还。

宾语补足语句型:动作执行者 - 动作 - 动作对象 - 动作对象的行为

例如:猫让鼠跳舞

宾语补足语句型的常见动词:把、使、让。

定语(形容词、数词、名词所有格)修饰名词。

例如:白色的猫、两只猫、阿哲的猫

副词修饰动词。

例如:轻轻的、快速的、不断的。

抽象思维

我不可能教机器人所有的具体知识,只要教抽象知识,就等于教了很多具体知识。

第一步教导抽象知识,第二步说清归属关系:用“属于”或“是”,第三步提问。

如果教过具体知识,优先按具体知识回答。如果没有具体知识,才开始抽象思维回答。

单句的抽象问答:

(1)抽象回答:

例如:没有教过狼吃羊,但是教过动物吃肉,且教过狼属于动物。那么问狼吃什么,虽然无法回答羊,但是电脑把“狼吃什么”抽象成“动物吃什么”之后,就会回答肉。

(2)抽象到具体的回答:

例如:教:哺乳动物吃鱼。教:熊属于哺乳动物,鲤鱼属于鱼。问:熊吃什么。答:鲤鱼。而不是答鱼,就是由抽象到具体了。

双句的抽象问答:

(1)关联句的回答:

例如教:人吃动物,所以动物怕人

再教:我属于人,牛属于动物

问:我吃牛

电脑把“我吃牛”抽象化为“人吃动物”(全抽象化)、“人吃牛”(主语抽象化)、“我吃动物”(宾语抽象化)

其中“人吃动物”这一条知识是教过的,所以就能回答

答:牛怕你

注意:双句关系要写连接词(例如所以、然后),不能写“人吃动物,动物怕人”(不能省略“所以”)

再例如教:老师爱护学生,所以学生尊敬老师

再教:张三是老师,李四是学生

问:张三爱护李四。或者问张三爱护李四,所以怎样

答:李四尊敬张三

(2)甲乙句

例如教:甲踢乙,所以乙打甲

问:张三踢李四

答:李四打张三

状态判断

一、文字形式的状态:

(1)具体的句子:

我饿了,所以吃饭。这样说话太抽象,应该具体问题具体分析:

教:如果我在家,我饿了,所以自己做饭

教:如果我在外面,我饿了,所以餐馆吃饭

如果句就是条件。对于同样的提问(我饿了),条件不同(在家或在外面),回答就不同。

教:我在家

问:我饿了

答:自己做饭。

有了“我在家”这个条件约束,就会回答“自己做饭”,而不是回答餐馆吃饭,否则默认回答餐馆吃饭。

注意1:带“如果”二字的句子,只表示假设,不表示事实条件。例如前面教了“如果我在家”,还需要另外单独再教“我在家”。也就是说,不带“如果”二字,才算满足“我在家”这个事实条件。

注意2:人们一般的说话习惯“如果我在家,我饿了,自己做饭。”此句中少了连接词“所以”,提问就无法回答。

当然也可以不做条件限定,就是没有“如果”二字的条件限定句。

例如教:我饿了,所以吃饭

问:我饿了

答:吃饭

(2)抽象的句子:

教:如果食肉动物饿了,食肉动物看见食草动物,所以食肉动物吃食草动物

教:狼是食肉动物,羊是食草动物

教:狼饿了

问:狼看见羊

答:狼吃羊

既然告诉了电脑狼是食肉动物,那么教狼饿了,在狼与羊的关系句中,就等于教了“食肉动物饿了”这个条件,也就表示满足此条件,从而能回答。

二、数字形式的状态:

每个对象(事物)都有多个属性(对象的状态、对象拥有的物品数量)。

属性的三种操作:前提条件,后果影响,自动触发。

(1)前提条件:

输入:心情大于60,体力大于40,去公园

下次再输入去公园,如果心情小于60,或体力小于40,那么“去公园”这件事就无法执行,电脑会回答不满足条件。

要知道心情是多少,在对象分析栏目下可以查看。

(2)后果影响

输入:写作业,心情减20

现在心情已经减了20,以后每次输入写作业,心情都会减20

那么现在再输入去公园,就无法执行了,因为心情减20后,心情不足60了,不符合去公园的前提条件。

输入:玩游戏,心情加30

以后每次输入“玩游戏”,心情都会加30。现在心情恢复到60以上了,再输入去公园,又可以执行了(电脑回答这个我知道,而不是回答不满足条件)。

(3)自动触发

输入:心情小于10,自动触发睡觉

注意:在事件前写“自动触发”四个字,才算是自动触发。

以后只要心情发生变化,且变化到10以下,就会自动执行事件“睡觉”。也就是说,只有刚刚改变了的属性,才会自动判断是否自动触发事件。否则即便满足自动触发的条件,也不会触发事件,这是为了避免频繁的自动触发。

由于现在心情还大于10,不能自动触发“睡觉”。那么反复输入写作业,每输入一次,心情就减20。直到心情减到10以下时,就会自动执行“睡觉”。

说明1:心情、体力等就是对象的属性。用户可以自定义属性:用户输入的话语中,如果出现了表中没有的属性,就会自动添加为新属性。那么新创建的属性的初始值是多少?最初话语里属性后面的数字就作为初始值。

说明2:前面输入的话语(心情大于60)里,并没有对象。其实省略对象,默认就是指电脑阿玉。

要指定对象应该这样写:猫的心情大于60,猫的心情加20。就是说明对象的属性。

说明3:可以一次写多个前提条件,或多个后果影响。

如果写了多个前提条件(逗号隔开),就必须全部满足,才算满足条件。

如果写了多个后果影响(逗号隔开),每个影响都会执行。

说明4:前提条件操作符:大于、小于、等于、为。例如心情大于50。

后果影响操作符:加、减、为。例如心情减10。

说明5:如果一个数值,上限是100,应在数值后面加星号*,例如心情大于30*,表示心情的最大上限是100。如果超过100,按100算。再例如体力加40*,表示属性体力的最大上限为100。如果不加星号,则不设上限。属性的最小值低于0时,按0算。

双屏界面时:

商店系统:在虚拟世界的商店,机器人阿玉给自己买东西

首先输入:去商店

背景图片为商店的情况下,才可以买东西

输入:买XX

例如输入买苹果,属性的物品就会增加苹果,如果已经有苹果,苹果数量加1。

虚拟商店中,每件物品都是10元。阿玉的金钱数量,会因为买东西而减少。阿玉的金钱数量也会每天补充,最大上限为1000。

输入不含买字的话语,就自动离开商店。

切换场景,还可以输入:回家、去学校。

查找对象的属性和对象的事件:

对象分析栏目下,有查找对象,输入对象名称。

如果之前教过:猫的心情大于90,猫玩耍。而且前面已经教过关于猫的事件(例如猫吃鼠),那么查找对象猫,就会显示猫的属性和事件。

链式思维

教:张三摔倒,所以张三受伤。

再教:张三受伤,所以张三去医院。

再教:张三去医院,然后张三治疗。

再教:张三治疗,然后张三出院。

也可以不按先后顺序,或中间间隔其它教导,反正只要教完这四条就可以。

形成链式关系:张三摔倒-张三受伤-张三去医院-张三治疗-张三出院。

也可以直接一次教:张三摔倒,所以受伤。张三受伤,所以去医院。张三去医院,所以治疗。张三治疗,所以出院。

如果省略主语,就自动用上一句话的主语。

电脑进行正向推理和逆向推理。

问:张三摔倒

提问的内容在链的开头,所以只有正向推理。

电脑回答:张三摔倒,所以张三受伤。张三受伤,所以张三去医院。张三去医院,所以张三治疗。张三治疗,所以张三出院。

问:张三去医院

提问的内容在链的中间,所以既有正向推理,也有逆向推理。

电脑回答:正向推理:张三去医院,然后张三治疗。张三治疗,然后张三出院。逆向推理:张三受伤,所以张三去医院。张三摔倒,所以张三受伤。

如果提问的内容在链的末尾,只有逆向推理。

注意1:句子之间的关联,要用所以、然后等词,否则不作为关联。

注意2:如果有提问词,例如问:张三受伤,所以怎样。电脑只回答去医院,不会继续关联下去。

其它

之前的句子“猫饿了,所以猫吃鼠”原因句和结果句是相连的,而且有连接词(所以)。如果两个句子,既不相连(原因句和结果句之间还间隔着其它句子),也没有连接词(没有所以、然后等词),电脑怎样识别这两句话是因果句?就要用以下方法:

教:爬山-所以-累

这种把句子之间连接起来的教法,是有两个横杠的,而且中间连接词是所以、因此、然后等词。

再教:我下午爬山,回到家,我累了

电脑分析:由于教过“爬山”和“累”是因果关系,所以含有“爬山”二字的句子“我下午爬山”和含有“累”字的句子“我累了”,也是因果关系。

构成因果关系,就可以问答了。

提问:为什么我累了

电脑分析:提问结果,回答原因。

电脑回答:你下午爬山

提问:我下午爬山,所以怎样

电脑回答:你累了

如果“我下午爬山”和“我累了”中间相隔100句话,那么这两句话之间就不该有关联了,按照经验,相隔不要超过两句话。

网页游戏:心有一玉

网页剧情游戏《心有一玉》开源源码,用RPG maker就可以编辑和开发。

游戏特点1:救回阿玉后,可人工智能对话。阿玉可以理解和学习用户所教的话语,可以提问用户教过的知识和阿玉已知的知识。

游戏特点2:夜景系统,灯光夜景很漂亮。

游戏特点3:潜行类游戏。很难战胜妖怪,以躲避妖怪为主。妖怪有视野(区块表示),不要出现在妖怪视野范围里。

游戏《心有一玉》目前做完了第一章:阿玉傍晚坐车回家的路上,道路塌方,车上的人只得绕山路回家,被晚上山上的鬼怪阻截,大家走散了,阿玉躲到了废弃的屋子里。阿玉的母亲让阿哲上山救阿玉,于是故事开始了。

RPG maker有mv和mz等多个版本,虽然用了mz版本的图片素材,但是用mv版本才能编辑和正常运行。

读取存档后,如果对话输入框消失,切换到下一个场景时,就会显现对话输入框。

使用RPG maker打开文件夹yu下的game.project即可编辑和开发游戏。

运行游戏:打开文件夹yu下的index.html

鼠标左键点击要移动的位置。

Esc键菜单。

鼠标右键返回。

走到场景边缘,自动切换到下一场景。

开着的门(黑色表示)可以进入。

点击人物可以上前对话。人工智能对话需找到阿玉之后。

技术原理

我的人工智能程序是MySQL语言的存储过程,存放于数据库中,方便直接操作数据表,作为后台。而网页是html、JavaScript(含ajax)、php语言写的,作为前台,用于显示数据。

数据传输过程:index.html(主页)→ ajax技术 → connect.php → MySQL数据库。

html一般是静态网页,但是用了ajax技术(异步JavaScript),html格式的网页就可以连接数据库了,但还要写php程序(connect.php)用于连接数据库。

ajax的好处在于更新数据时不用刷新整个网页,尤其是这种频繁更新数据的网页,如果用户每点一次发送按钮,就要刷新一次网页,那就不好了。

目前人工智能,其实就是模式匹配:如果用户输入的话语和提问,能匹配上已经设定好的模式(规则),机器人就能回答,否则就回答不了。

MySQL存储过程:

一、处理流程

enter:进入程序,网页与此连接。

先调用存储过程correct,纠正不规范输入。

如果是可直接处理的句子,调用存储过程direct,快速处理,不用做逐句分解和语义理解。

如果无法直接处理,则调用存储过程SplitSS,逐句分解,作为一个个的单句处理。

如果最终都没有结果,就回答我不知道,或不知道啦。

correct:纠正不规范输入

英文标点符号变为中文标点符号。

纠正连接词前没写逗号。例如“因为饿了所以吃饭”变为“因为饿了,所以吃饭”

标注连接词语序颠倒,之后处理。例如该先说原因后说结果,但是用户先说结果后说原因,程序需要标注这种颠倒的连接词语序。

direct:可直接处理的信息

判断用户输入的话语,是否包含禁止使用的词语。

电脑可以直接回答的话语,不用分析语法。例如用户输入“你是谁”电脑回答“我是人工智能妹阿玉”。还有处理回家、去学校、去商店等转移位置的话语。

判断是否为教导方法。

判断是否为设定自动触发。如果是设定自动触发,调用存储过程TriggerInsert,向表中添加信息。

判断是否为设定“前提条件-事件-后果影响”,如果是,调用存储过程AttributeInsert,向表中添加信息。

虚拟商店系统,人工智能的虚拟人可以在商店买物品。

SplitSS:思维主框架,并且把输入的多句,分割成一个个单句进行处理

Split的意思是分割,S表示sentence,SS表示多句话。

第一阶段:先判断有没有提问词,也就是判断是不是提问句。

提问词分为两类,一类是双句(例如因果句,先后顺序句)关系的提问词(例如:为什么、然后怎样),另一类是单句的提问词(例如单句“猫吃什么”中的“什么”)。

第二阶段:

判断标点符号的数量,输入了多少句话。

把输入的多句,按标点符号,分割成一个个的单句进行处理。

第三阶段:单句的处理。

先调用AttributeControl:在“前提条件--事件-后果影响”的句型中,看是否满足前提条件,以及对属性的改变操作。

判断当前单句,是不是双句关系的提问句,是不是单句的提问句。

如果不是提问句,只是教导知识的陈述句。判断教导的知识,是否已经教过。如果没有教过,就存入sentence表,作为新知识。如果是“吗”字句(事件加“吗”字结尾,就是问事件是否存在),就要判断事件是否已经存在。

如果当前单句和上一句话是因果关系、先后顺序关系等,就要调用存储过程InsertSS,把这两句话一起存入知识表2。

调用存储过程single,执行单句的自然语言处理。

如果当前句和之前句是关联的双句,但没有提问词,就调用存储过程AnswerSS,问当前句,回答之前句,问之前句,回答当前句。如果回答不了,用抽象句、甲乙句再试。

如果是关联句,且有双句关系的提问词,也调用AnswerSS回答双句关系。和之前调用AnswerSS不一样,这次是带双句关系提问词的提问。如果回答不了,也用抽象句和甲乙句再试。

single:作用:单句的处理

(1)为单句的语义理解(mean)做准备,就是割掉句头词(例如所以)和句尾词(例如吗)等,到时候语义理解就干净方便了

(2)调用单句的问答(AnswerSingle)

(3)单句的抽象化

(4)如果当前单句和前面的句子构成关系句,例如因果关系句,就插入双句关系表

二、问答

AnswerSingle:单句的回答,以及单句存入知识表

动态SQL:根据情况,智能拼接成查询指令。

疑问词决定select的选择对象,句子中其它成分作为where查询条件。例如教导“猫吃鼠。”语义理解:主语:猫,谓语动词:吃,宾语:鼠,然后存入知识表know。随后用户问“猫吃什么”提问词“什么”出现在宾语位置,说明提问宾语,那么select对象就是宾语。而where查询条件就是主语“猫”和谓语动词“吃”,这样就构成了一条SQL指令,查询结果就是“鼠”。

如果是陈述句,插入到知识表know中(不是sentence),作为电脑的新知识。

AnswerSS:双句关系的回答

双句回答:双句中(例如猫饿了,所以猫吃鼠),如果有提问词(例如为什么猫吃鼠),则以已知句(例如猫吃鼠)作为搜索条件(where),提问词(例如为什么)对应回答句(select)。回答猫饿了。

如果没有提问词,问关联双句中的一句,则回答剩下的另一句。例如输入猫饿了,回答猫吃鼠。这话里没有提问词。

三、抽象与具体

abstract:抽象化

把各个名词抽象化,并组装成抽象句。

例如:猫吃鼠,猫属于动物,鼠属于动物,猫吃鼠变为动物吃动物(全抽象)、动物吃鼠(主语抽象)、猫吃动物(宾语抽象)。

简化:抽象句里,定语(形容词、数词、名词所有格)、副词、时间、地点都不要。

AnswerAbstract:双句关系的抽象句的回答

如果具体句子的方式无法问答,把具体的已知条件句,抽象成三种抽象句:全抽象句、主语抽象句、宾语抽象句,再尝试问答。

concrete:具体化,把抽象的回答变为具体的回答

AnswerSS2:和AnswerSS相似,但处理的是抽象句,而不是具体句

四、属性操作:前提条件、后果影响、自动触发

AbstractAnswer:具体句变为抽象句,再用抽象句问答。比AnswerAbstract要全面。

ExistCondition:判断是否有条件限定。

JudgeCondition:判断是否满足条件。

AttributeInsert:把前提条件、后果影响的信息,插入到表中。

AttributeControl:判断是否符合前提条件,以及对属性值的变化操作。

TriggerInsert:把自动触发的信息,插入到表中。

TriggerControl:按照自动触发的设定,改变属性值,并产生自动触发的事件。

shop:在虚拟世界的商店,阿玉给自己买东西。

AttributeYu:机器人阿玉的事件。

ObjectThing:查询任何对象的事件。

五、链式关联

DepthSearch:对于链式关联的深度遍历,包括正向推理和逆向推理。

六、自然语言处理

mean:自然语言处理框架

自然语言处理就是理解一句话中主语是什么、谓语动词是什么、宾语是什么,还有其它语法成分都是什么。

需要先判断出句型,后面才能具体判断出语法成分。例如双宾语结构的句型,就有直接宾语和间接宾语。再例如宾语补足语句型,要判断出宾语补足语。

割掉句头的连接词,例如因为、所以。割掉句尾的多余字,例如吗、啊。割掉句中的多余字:例如了。

调用存储过程:SearchTime、SearchVerb、SearchLeft、SearchO、SearchDO、SearchOC。

SearchTime:找出时间

确定年、月、日、时、分。

把今天、昨天等词转化为具体的日期。

调用存储过程NumConvert,把汉语数字转化为阿拉伯数字。

周末、春季等词也作为时间。

SearchVerb:找动词,判断句型

用游标找出所有动词:游标从动词表中逐一读出每个动词,并判断该动词是否包含在句子里。如果包含,就说明句子里有该动词,整个过程仅耗时0.2秒。

以动词来判断句型:

如果句子只有1个动词:如果有双宾语句型的引导词(例如给、看见),就是双宾语句型,如果没有,就是主谓宾句型。如果有“是”字,就是表语句型。

如果句子有2个动词:如果这两个动词连在一起(中间没有间隔词),则等于一个动词,按1个动词的情况来处理。如果这两个动词没有连在一起,则是两个动词,为宾语补足语句型。这两个动词之间的间隔,就是宾语。例如“我让她跳舞”动词“让”和“跳舞”之间是宾语“她”。

如果句子有3个动词:只有宾语补足语句型有这么多动词。

如果是被动句,调整为主动句结构。

以动词来分割句子:以谓语动词为分割词,把句子分为谓语动词左边句和谓语动词右边句,后面分开处理。

SearchLeft:自然语言处理:谓语动词左边句

找主语、主语的定语(形容词、数词、名词所有格)、副词、地点。

找形容词:调用存储过程SearchAdj。

找名词(名词、名词所有格、地点名词):调用存储过程SearchNoun。

句子修复:补全省略的主语,把代词替换为指代的具体内容。

找副词:调用存储过程SearchAdv,这里指修饰谓语动词的副词,如果是修饰形容词的副词,直接与形容词合并。

SearchO:自然语言处理:主谓宾句型或表语句型的谓语动词右边句

找宾语、宾语的定语、地点。

O指object,原理与SearchLeft相似,但处理的是谓语动词右边句。

SearchDO:自然语言处理:双宾语句型的谓语动词右边句

找直接宾语、间接宾语、宾语的定语、地点。

DO指Double Object,原理与SearchLeft相似,但要找两个宾语。

区分直接宾语和间接宾语:直接宾语在句子底端,后面没内容了,而间接宾语后面还有内容。例如“我给她苹果。”“苹果”是直接宾语,“她”是间接宾语。如果一个定语,左边是间接宾语,说明这个定语是直接宾语的定语,如果左边没有间接宾语,就是间接宾语的定语。

SearchOC:自然语言处理:宾语补足语句型的谓语动词右边句

找宾语、宾语的定语、宾语补足语、地点。

OC指Object Complex,原理与SearchLeft相似,但处理的是谓语动词右边句。

前面SearchVerb已经找出所有动词,包括宾语补足语动词。宾语补足语动词左边是宾语,右边是宾语补足语的名词部分。

SearchNoun:找出名词

游标找名词、动词、形容词、副词,都要面临一个问题,例如“熊猫”被游标理解为三个名词:熊、猫、熊猫。需要长词(熊猫)覆盖短词(熊),短词(熊)吸收长词(熊猫),这样结果就只有一个名词“熊猫”。

如果名词右边有“的”字,就是名词所有格。如果名词左边有“在/去/到/来/回”等词,说明该名词为地点。

游标找出名词的顺序,不是句子里出现的先后顺序,而是名词表里出现的先后顺序。因此要排序,使之符合句子里出现的先后顺序。

名词之间如果是“和”字、“与”字、顿号,或没有间隔字符,就要连接成一个名词。

SearchAdj:找出形容词

SearchAdv:找出副词

NotVerb:进一步确定到底是不是动词

进一步判断一个动词到底是不是动词。例如“学”字是动词,但在“学生”这个词里作名词。再例如“成”指变成,做动词,但是在“成绩”里做名词。

如果一个词,既可以做动词,也可以作名词。那就看这个词前面是否是定语(尤其是“的”)字,因为定语只能修饰名词。如果这个词后面是“的”字,那个词本身就是定语,而不是动词。

NotAdj:进一步确定到底是不是形容词

进一步判断一个形容词到底是不是形容词。例如“白”字是颜色形容词,但在“莲花白”里做名词。再例如“老”字做形容词,但在“老鼠”里做名词。

NotAdv:进一步确定到底是不是副词

进一步判断一个副词到底是不是副词。例如“太”字是程度副词,但是在“太阳”里做名词。再例如“才”表示刚才,做时间副词,但是在“才能”里做名词。

IsName:确定是不是名字

如果句子中出现姓氏,就要看其左右的字符,来判断到底是不是姓氏。例如“王”字,如果左边的字符是“大”,那么“大王”的“王”显然不是姓氏。

如果姓氏前有“小”字,例如“小蔡”,就构成名词。

姓氏和动词之间的部分就是名字,例如“蔡昊哲爱阿玉”,姓氏“蔡”到动词“爱”之间的部分是名字。

NumConvert:汉字型数字转阿拉伯数字

汉字型数字(例如三百六十五)转化为阿拉伯数字(例如365),方便后面加减乘除计算。

InsertSS:双句存入数据表

前后两句话,如果有关系,就是有连接词。例如“猫饿了,所以猫吃鼠。”前后两句话是因果关系,存入双句关系表中。SS表示双句。

七、其它

SentencceRelation和SentenceRelation2:判断句子之间的关联

SentenceRelationInsert:句子之间关联的插入

SplitOnce:把每次输入的段落,拆分成一个个单句

TimePosition:根据现实世界的时间,来决定网页显示的环境背景图和人物图。

八、剧情设计

Story:剧情程序

StoryAffect:后果影响

StoryCondition:前提条件

StoryEnd:读取剧情线最后一句话

StoryList:读取剧情标题

StorySave和StorySave2:网页剧情栏的内容,存入数据库的数据表中

StorySelect:选项处理

StoryKnow:理解剧情(之后可以向动漫人物提问故事里的事情)

各个表格的作用

noun:名词词库

verb:动词词库

adj:形容词词库

adv:副词词库

verb_judge:进一步判断是不是动词

type_col中l表示left,r表示right

生l1花:如果“生”字左边1个字符是“花”,既花生,那么“生”字就不是动词

adj_judge:进一步判断是不是形容词

老r1师:如果“老”字右边1个字符是“师”,既老师,那么“老”字就不是形容词

other_word:引导双宾语句型的词,数词单位,带“的”字的副词

first_name:姓氏表

sensitive_word:敏感词(不可以用的词,以免人乱说话)

know:知识表:把一个单句,分割为语法词语

subject_col:主语列

verb1_col:谓语动词1列

verb1_col:谓语动词2列

object_col是宾语列,双宾语句型做直接宾语列

indirect_col是间接宾语列,宾语补足语句型做宾语补足语的动词列

adj_subject_col:主语的形容词

adj_object_col:宾语的形容词

adj_indirect_col:间接宾语的形容词

num_subject_col:主语的数词

num_object_col:宾语的数词

num_indirect_col:间接宾语的数词

po_subject_col:主语的名词所有格

po_object_col:宾语的名词所有格

po_indirect_col:间接宾语的名词所有格

adv_col:副词列

time_col:时间列

position_col:位置列

pattern_col:句型列

know2:双句的关系

s1_col:第一句话

s2_col:第二句话

con_col:第一句话和第二句话之间的关系,例如因果

sentence:输入的单句(未经自然语言处理)

attribute:对象的属性

attribute_control:对象属性的形式:前提条件、后果影响

auto_trigger:自动触发的条件和事件

belong:事物的归属关系

sentence_once:每次输入的段落,拆分成一个个单句

sentence_relation:句子之间的关系

setting:系统设置

temp:对象事件临时的表

article:文章表

mes:留言表

story:剧情表

人物1和人物2的NULL不代表没有人物,而是表示较上一次不变

选择(choose)、后果影响(affect)、前提条件(condition)不是直接显示文字,而是显示链接到另一个表的id数字

story_affect:后果影响

story_choose:选项

story_condition:前提条件

story_end:结尾的末端句

story_list:标题列表

网页程序中,各个文件的作用

一、前台页面:

1.根目录下:

(1)人工智能方面:

index.html:主页

2.html:影院模式

a.php:文章阅读界面

login.php:登录

logout.php:登出

mes.php:留言板

condition.php:机器人阿玉的状态、物品、事件

condition2.php:机器人阿玉所处的场所位置

object.php:查询对象

(2)剧情方面

story.html:剧情设计

choose.php、choose2.php进入剧情设计前,选择数据的页面

pictest和storytest是测试页面

2.其它目录下:

cute文件夹下,1.html是双屏模式

book文件夹下,book1、book2、book3、book4是教程

book文件夹下的t文件夹里是教程实例

二、后台页面

(1)网页连接数据库

ajax方式,需要调用php文件来连接数据库,下面这四个文件,就是ajax方式调用的php文件:

connect.php:用以连接数据库中的人工智能程序enter

storycon.php:用以连接数据库中的剧情程序

storycon2.php:用以连接数据库中的剧情存储程序

titlecon.php:用以连接数据库中的标题读取程序

(2)其它

manage.php:后台管理

(3)网页样式表

style.css、style2.css、style3.css、style4.css

三、文件夹:

img:图片文件夹

js:JavaScript脚本文件夹。

里面jquery.min.js代码看着很乱,因为min是jquery库的密集压缩形式,是为了减少代码,加快加载速度。jquery库是网页动态特效的常见库。

music:音乐文件夹

cinema:影院模式

cute:双屏模式

story:剧情设计

book:教程

yu:网页游戏《心有一玉》

设计杂谈

机器人达到人类的思维水平,只是时间问题,早晚能达到的。但是这个过程有两种可能,一种是人们研发出聪明智能的算法,使机器人像人类一样聪明。另一种是研发不出聪明智能的算法,但是笨办法的数量多,深入生活的各个细节,结果也能使机器人像人类一样聪明。就像笨孩子,只要努力多学,也能像聪明的孩子一样。但目前的人工智能,不过是人工智障而已。也就是说,现在还是人工智能的初期阶段。目前的主流方式是模式匹配和逻辑思维。模式匹配就是如果知识和提问能匹配上程序设定,机器人就能回答,否则就回答不了。逻辑思维就是因果关系、先后阶段、条件状态等,这种思维方式显得理性、机械化,不是情感思维。

让机器人自己给自己编写程序来解决问题,从而实现智能,目的是使人工智能成为摆脱人工的智能。动态sql让我看到了希望,因为动态sql是根据不同的情况,把不同的sql程序碎片拼接到一起,组成一个程序,然后执行该程序。目前我的程序中,单句的问答就是用动态sql方式,机器人根据不同的提问,把不同的sql程序碎片组装成回答程序。具体过程看数据库的存储过程AnswerSingle,就是单句的问答程序,源码已经都开源了。应先看完教程的动态sql和基本问答程序,才能理解动态sql的方式。

我用sql语言开发人工智能,一方面因为只有sql语言有动态sql功能。另一方面人工智能需要频繁而复杂的操作表格数据,sql语言就是专门操作表格数据的。虽然其它语言可以调用sql语句,但是有时候操作表格的sql语句要达到成百上千行,其它语言不可能一次调用这么多的sql语句。而且sql程序之间还要相互调用,只能直接用sql语言设计人工智能。

开发人工智能,最不可以做的事情是调用库。现在网上有各式各样的人工智能库,库里有各式各样的人工智能函数。一旦调用了那些人工智能库和库函数,就全完蛋了。因为第一,程序之间是相互协调的,新写一个程序,就要修改其它程序,使之能协调新程序。而调用的库是修改不了的,因为大都不开源,就算开源,数万行代码也难以看懂和研究。对于人工智能,新写了顶层程序,就要修改底层程序,使底层程序能协调新的顶层程序。如果调用库作为底层程序,就没法改了,那么顶层程序也就做不好,只能在调用的那些库作为基础和约束限制下,去开发顶层程序。第二,调用的每个库函数,可能只是几个人开发出来的。如果大家都调用那些库(以及库函数),以那些库作为标准,整体行业的开发水平就会受限于那几个人的水平。

最后编辑:2023年1月2日 21:07:20

留言板

只有一处小故障:十几个人物中,选“由加利”时会故障,其他人物都正常。“由加利”作为次要人物,不选就可以了。

2022-11-08 13:44

上个版本,使用次要人物由加利,会出现故障。现发布新版本,修复此故障,并增加了很多场景图片。
程序下载的网盘链接:https://pan.baidu.com/s/1IY6gV15Yn4b_wWWtp37yGQ?pwd=1111
提取码:1111

2022-11-10 11:59

发生未知错误

请尝试刷新页面,如果问题无法解决,可加 QQ群 761794704 进行反馈