## 动脑猜猜接口文档
sys.action.game/dongnaocaicai/play 动脑猜猜
<br>
#### 参数说明
|名称|类型|是否必须|说明|
|:----:|:----:|:----:|:----:|
|text|String|是|用户回答的话,一般用text和lastAnswer来判断用户是否回答正确|
|lastQuestion|String|否|上一轮的问题|
|lastAnswer|String|否|上一轮的答案|
|lastExplanation|String|否|上一轮问题的解释|
|score|String|否|用户积分|
|numChanceLeft|String|否|用户剩余答题次数|
|totalNumUserSay|String|否|用户总共答题次数|
|prevQuestion|String|否|用户已答题目集,字符串,形式是q1##q2##q3……用来统计用户答题数以及筛选给用户非重复的题目|
|prevAnswer|String|否|用户已答题目的答案集a1##a2##a3……|
|tag|String|否|游戏数据类别,跟动脑猜猜游戏相关|
#### 接口说明
**接口基本逻辑说明:**<br>
![](https://box.kancloud.cn/cda3ebc6d5593b3e13e6e0794ddb79be_847x843.png)
从图中可以看到,动脑猜猜游戏基本可以分为这么几步:
1. 进入动脑猜猜
2. 选择类别
3. 玩游戏
4. 退出
<br>
其中**进入动脑猜猜**和**退出**都算是问答对,不需要出题,不涉及接口调用,而从用户选择类别开始,需要给用户出题,需要记录答题过程,就需要调用接口了。<br>
总结一下,动脑猜猜接口主要做了以下事情:<br>
* 根据用户回答的话和之前问题的答案判断用户是否回答正确
* 统计用户的积分
* 统计用户答题数
* 根据答题次数和是否答对来决定继续让用户答还是给出新的题目
* 根据用户选择的类别以及用户答过的题(避免重复)出题
接口参数就是依据以上逻辑来设计的。<br>
**接口内部实现说明:**<br>
* 首先totalNumUserSay+1,numChanceLeft-1
* 根据text和lastAnswer判断本轮用户是否回答正确,如果正确或者numChanceLeft=0(已经没有剩余答题机会),那么获取一个新的问题,更新prevQuestion,prevAnswer,score;如果不正确,不获取新的问题,不需更新prevQuestion,prevAnswer,score。
* 生成返回结果
**接口建议**:
当初限于架构,接口参数完全通过开发者后台传递,导致接口参数很多,不易于维护,且开发者后台的编辑也很繁琐。<br>
目前在开发者后台调用API接口时,会把userId作为参数传递给接口,所以**建议接口设计只需两个参数:userId和text**,其中text还是用户回答的话,而userId作为用户标识,用来记录用户答题过程中的数据,把lastQuestion,lastAnswer,score,prevQuestion等数据维护在接口所在的服务器端,这样接口逻辑更加清晰,参数更加可控,开发者后台编辑也比较简单。