isokissa / alleswisser
Requires (Dev)
- mthenw/nosqlite: *@stable
- phpunit/phpunit: 4.4.*
This package is not auto-updated.
Last update: 2021-11-02 19:10:21 UTC
README
Web应用程序将提出问题,试图猜测用户所想象的东西。如果找到正确答案,它将庆祝,否则它将学习并在下次变得更有知识。
如果您不介意外观和感觉的完全缺失,请在此处测试一些最近版本:http://alleswisser.isokissa.org
它的工作原理
每个问题都有两个答案:是或否。
答案可以是具体的最终答案,也可以是指向下一个问题的指针
无论答案是是还是否,如果有一个指向下一个问题的指针,则跳转到该下一个问题。如果有最终答案,询问它是否正确。如果是 - 庆祝胜利。如果不是,询问“如何区分?”,并将指向答案的指针放置到相应的占位符。
"questions" 数据映射
<questionId> -> <questionText>
"answers" 数据映射
<questionId>[y|n] -> <answer>|<nextQuestionId>
示例
1 -> Is it a living thing?
2 -> Is it a man-made thing?
1y -> cat
1n -> 2
2y -> car
2n -> stone
控制器动作
下一个动作以粗体显示。
no-action 动作
当请求中没有“动作”时,执行此动作。它开始新的会话,这意味着询问第一个问题的答案。如果没有第一个问题,则执行 init 动作并要求用户添加第一个问题
"init" 动作
添加第一个问题。如果“questions”数据映射不为空,则执行初始 no-action 表单并带有错误信息。此动作有以下参数
- question -> 问题的文本
- answerYes -> “是”的情况下的最终答案
- answerNo -> “否”的情况下的最终答案
如果任何参数未提供,则下一个动作将是再次执行 init,带有适当的错误信息。如果所有参数都已提供,则下一个动作将是“谢谢”消息和 no-action 表单,以便开始新的会话。
"add" 动作
在给定的 parentAnswerId 下添加一个终端问题。一个“终端问题”是指具有“是”和“否”分支的最终答案的问题。动作参数
- parentAnswerId -> 此参数是指向 answers 数据映射的指针。 (1) 新问题将作为该参数的子问题添加 (2) 使用此参数提供的答案将更新以指向新问题 (3) 原始答案将移动到新问题的“否”分支 (4) 新问题的“是”分支将是来自 answerYes 参数的值。
- question -> 问题的文本
- answerYes -> “是”的情况下的最终答案
- answerNo (只读) -> 在“没有”情况下的最终答案。仅用于在出现错误时帮助视图重新渲染表单,而不需要datamap查找。
"answer" 动作
answer 动作显示问题并期望用户回答“是”或“否”。参数
- questionId -> 被问问题的id
- answer -> 包含答案的值:“是”或“否”
作为反应,控制器将查找给定 questionId 和 answer 组合的答案datamap,并根据找到的值执行以下操作之一
- 未找到答案:下一个动作将是无操作并显示错误消息。这是系统错误,意味着数据损坏。
- 答案是数字:这意味着下一个问题的答案id。下一个动作将是下一个问题的 answer。
- 答案不是数字:它被认为是最终答案。下一个动作将是询问最终答案,动作是 answerFinal。
"answerFinal" 动作
询问最终问题。参数
- answerId -> 被问问题的id
- finalAnswer -> 最终答案的文本。
- answer -> 包含答案的值:“是”或“否”
如果答案是“是”,则写入胜利消息并执行无操作。如果答案是“否”,则生成 add 表单以询问正确答案和区分问题。