使用ivx链接组件实现实时对战答题的经验总结

在上一篇帖子中简单介绍了链接组件,并使用链接实现了一个简单的私聊模型,今天咱们来制做一个实时对战答题模型。大致的设计思路是,用户A登记进入链接并将本身的CID添加到URL中转发给好友B,B打开带有URL参数的案例建立一个房间并对A发出邀请,A进入房间后答题开始,答对加分,答错对方加分,最后统计总分数分出胜负。
一.数据库
存储题目的questionTable数据库添加了三个字段,title存放题目;options存放选项,并写成JSON格式;correctIndex存放正确答案的序号。存放玩家数据的userTable数据库中nickname字段存放玩家昵称,matchPoint存放玩家总共的胜局数。
使用ivx链接组件实现实时对战答题的经验总结
使用ivx链接组件实现实时对战答题的经验总结
二.服务
GetQuestions服务负责将questionTable中的题目输出并发送给前台,postUser服务则负责从是数据库中找到获胜玩家(若是找不到就添加一条玩家数据),并更新其matchpoint字段。
使用ivx链接组件实现实时对战答题的经验总结
使用ivx链接组件实现实时对战答题的经验总结
三.变量
下图是案例中使用到的变量
使用ivx链接组件实现实时对战答题的经验总结
finalResult表示对局的最终结果,案例中会给它赋值“victory”、“failed”和“tie”表示胜、负和平局,choseResult是当前题目的答题结果,案例中会给它赋值“Our Score”和“Opponent score”表示己方得分和对方得分。
AnswerIndex和opponentAnswerIndex分别表示本身和对方的答题结果,即所选选项的序号,初始值都为-1。
QuestionIndex表示当前题目的序号,currentQuestion用于存储当前题目,所有题目则存放在questionList中。
使用ivx链接组件实现实时对战答题的经验总结
WaitTime是开始答题前的准备倒计时,初始值为5;limitTime是答题时间倒计时,初始值为20。
roomID存放链接建立的房间的ID号;opponentInfo和userInfo分别存放对手和本身的信息,包括得分、昵称和CID码;cid存放的是分享连接中的URL参数,也就是游戏发起人的CID码。
使用ivx链接组件实现实时对战答题的经验总结
四.实时对战答题流程
1.第一步,对战的发起玩家A打开案例,输入昵称后点击Start按钮,这时会先对当前玩家进行登记,而后将A的信息存入userInfo,注意此时变量“cid”仍是空值,因此执行的是其他的条件分支,系统会将当前用户A的CID码添加到URL中,而后显示一个横幅,上面就是添加好参数的分享连接,用户把这个连接分享给好友B便可。
使用ivx链接组件实现实时对战答题的经验总结
使用ivx链接组件实现实时对战答题的经验总结
2.第二步,B打开A分享的连接进入案例,前台会在初始化时读取URL中的参数并输出到“cid”中,即此时“cid”中存放了A的CID码值为非空。这样B进行登记并把本身的信息存入userInfo后会执行cid非空的条件分支,首先调用getQuestions从数据库中获取题目,而后生成一个随机数字做为roomID并建立房间,建立成功后B会给A发送一条我的消息,消息的method内容为“starGame”表示邀请进入游戏,同时消息内容还包括roomID、玩家昵称和所有题目,发送完成前台就会跳转到play页面等待下一步操做。
使用ivx链接组件实现实时对战答题的经验总结
使用ivx链接组件实现实时对战答题的经验总结
3.第三步是A接收到B发来的我的消息,若是链接监听到我的消息且消息内容的method为“startGame”,就会去判断opponentInfo是否为空,为空就说明当前尚未对手,就会保存对方发来的roomID,题目数据,还有对手的昵称、得分和CID,而后加入对方的房间。
使用ivx链接组件实现实时对战答题的经验总结
加入房间后A会在房间内发送一条房间消息,告知房间里的用户(也就是B啦)玩家A的昵称和CID,最后跳转到play页面开始播放waitInterval触发器。
使用ivx链接组件实现实时对战答题的经验总结
固然还有一种可能,好比另一个玩家C也拿到了A分享的连接,进入案例,但此时A已经进入了B的房间,因此A玩家的opponentInfo参数就已经非空了,这时A就会回给C一条拒绝消息,链接监听并判断出是拒绝消息就会对C进行一个提示。
使用ivx链接组件实现实时对战答题的经验总结
使用ivx链接组件实现实时对战答题的经验总结
4.C玩家只是一个插曲,咱们再回来看B玩家收到A玩家发送的房间消息的处理,链接若是收到method为“enterGame”的房间消息,且发送者不是本身,就会将对方的信息存入到opponentInfo中,开始播放waitIntercal触发器。
使用ivx链接组件实现实时对战答题的经验总结
5.waitInterval触发器和limitInterval触发器
上面几个步骤以后A,B两个玩家都执行到播放waitInterval触发器了,它实现的是每道题目开始答题前的准备倒计时,而且在结束时会把题目列表中的第一题赋值给“currentQuestion”,而后将本身重置并播放limitInterval触发器。
使用ivx链接组件实现实时对战答题的经验总结
使用ivx链接组件实现实时对战答题的经验总结
而limitInterval触发器则是控制答题时间倒计时的,这里就有两种状况了,一是有玩家进行了答题,这部分逻辑会写在选项的点击事件里,还有就是直到倒计时结束两位玩家都没有答题,那么咱们会执行setVariate动做组。
使用ivx链接组件实现实时对战答题的经验总结
使用ivx链接组件实现实时对战答题的经验总结
6.setVariate动做组
setVariate动做组会先判断questionIndex的值,若是不等于questionList的行数减1则说明当前题目还不是最后一道题,就会将questionList中的下一道题的内容赋值给currentQuestion,重置waitInterval触发器和limitInterval触发器。
使用ivx链接组件实现实时对战答题的经验总结
使用ivx链接组件实现实时对战答题的经验总结
若是相等则说明已经答彻底部题目了,就比较本身和对手的得分,显示对局结果。若是本身是胜方就调用postUser服务去数据库中更新本身的matchpoint。
使用ivx链接组件实现实时对战答题的经验总结
使用ivx链接组件实现实时对战答题的经验总结
7.玩家选择选项
如今来讲一下玩家在答题倒计时结束前进行答题的状况,当玩家点击了选项行或者该选项行中的选择钮,就会把该选项的序号赋值给answerIndex,而且若是对手并未答题对局也没有结束(即opponentAnswer仍为初始值-1,finalResult仍未初始值0),则玩家会给对手发送一条method为chose的我的消息,消息内容就是本身的答题结果。而后执行checkAnswer和setVariate两个动做组。
使用ivx链接组件实现实时对战答题的经验总结
使用ivx链接组件实现实时对战答题的经验总结
对应的,当玩家收到method为chose的我的消息,会将消息中的对方答题结果赋值给opponentAnser,一样执行checkAnswer和setVariate两个动做组。
使用ivx链接组件实现实时对战答题的经验总结
8.checkAnswer动做组
checkAnswer动做组是用来判断当前题目的答题结果,若是opponent大于等于0(即不为初始值-1),则说明当前题目是对手答题,则再判断对手答案是否正确,若是对手答案正确给对手分数加1,choseResult赋值“Opponent score”表示对方的分,若是错误则给本身分数加1,choseResult赋值“Our score”表示己方得分,若是opponent小于0(即仍为初始值-1),则说明当前题目是己方答题,同理进行判断和对应操做。
使用ivx链接组件实现实时对战答题的经验总结
使用ivx链接组件实现实时对战答题的经验总结
最后将整个流程总结以下
使用ivx链接组件实现实时对战答题的经验总结数据库

相关文章
相关标签/搜索