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

在上一篇帖子中简单介绍了连接组件,并使用连接实现了一个简单的私聊模型,今天我们来制作一个实时对战答题模型。大体的设计思路是,用户A登记进入连接并将自己的CID添加到URL中转发给好友B,B打开带有URL参数的案例创建一个房间并对A发出邀请,A进入房间后答题开始,答对加分,答错对方加分,最后统计总分数分出胜负。

一.数据库

存储题目的questionTable数据库添加了三个字段,title存放题目;options存放选项,并写成JSON格式;correctIndex存放正确答案的序号。存放玩家数据的userTable数据库中nickname字段存放玩家昵称,matchPoint存放玩家总共的胜局数。



二.服务

GetQuestions服务负责将questionTable中的题目输出并发送给前台,postUser服务则负责从是数据库中找到获胜玩家(如果找不到就添加一条玩家数据),并更新其matchpoint字段。



三.变量

下图是案例中使用到的变量


finalResult表示对局的最终结果,案例中会给它赋值“victory”、“failed”和“tie”表示胜、负和平局,choseResult是当前题目的答题结果,案例中会给它赋值“Our Score”和“Opponent score”表示己方得分和对方得分。

AnswerIndex和opponentAnswerIndex分别表示自己和对方的答题结果,即所选选项的序号,初始值都为-1。

QuestionIndex表示当前题目的序号,currentQuestion用于存储当前题目,全部题目则存放在questionList中。


WaitTime是开始答题前的准备倒计时,初始值为5;limitTime是答题时间倒计时,初始值为20。

roomID存放连接创建的房间的ID号;opponentInfo和userInfo分别存放对手和自己的信息,包括得分、昵称和CID码;cid存放的是分享链接中的URL参数,也就是游戏发起人的CID码。


四.实时对战答题流程

1.第一步,对战的发起玩家A打开案例,输入昵称后点击Start按钮,这时会先对当前玩家进行登记,然后将A的信息存入userInfo,注意此时变量“cid”还是空值,所以执行的是其余的条件分支,系统会将当前用户A的CID码添加到URL中,然后显示一个横幅,上面就是添加好参数的分享链接,用户把这个链接分享给好友B即可。



2.第二步,B打开A分享的链接进入案例,前台会在初始化时读取URL中的参数并输出到“cid”中,即此时“cid”中存放了A的CID码值为非空。这样B进行登记并把自己的信息存入userInfo后会执行cid非空的条件分支,首先调用getQuestions从数据库中获取题目,然后生成一个随机数字作为roomID并创建房间,创建成功后B会给A发送一条个人消息,消息的method内容为“starGame”表示邀请进入游戏,同时消息内容还包括roomID、玩家昵称和全部题目,发送完成前台就会跳转到play页面等待下一步操作。



3.第三步是A接收到B发来的个人消息,如果连接监听到个人消息且消息内容的method为“startGame”,就会去判断opponentInfo是否为空,为空就说明当前还没有对手,就会保存对方发来的roomID,题目数据,还有对手的昵称、得分和CID,然后加入对方的房间。


加入房间后A会在房间内发送一条房间消息,告知房间里的用户(也就是B啦)玩家A的昵称和CID,最后跳转到play页面开始播放waitInterval触发器。


当然还有一种可能,比如另外一个玩家C也拿到了A分享的链接,进入案例,但此时A已经进入了B的房间,所以A玩家的opponentInfo参数就已经非空了,这时A就会回给C一条拒绝消息,连接监听并判断出是拒绝消息就会对C进行一个提示。



4.C玩家只是一个插曲,我们再回来看B玩家收到A玩家发送的房间消息的处理,连接如果收到method为“enterGame”的房间消息,且发送者不是自己,就会将对方的信息存入到opponentInfo中,开始播放waitIntercal触发器。


5.waitInterval触发器和limitInterval触发器

上面几个步骤之后A,B两个玩家都执行到播放waitInterval触发器了,它实现的是每道题目开始答题前的准备倒计时,并且在结束时会把题目列表中的第一题赋值给“currentQuestion”,然后将自己重置并播放limitInterval触发器。



而limitInterval触发器则是控制答题时间倒计时的,这里就有两种情况了,一是有玩家进行了答题,这部分逻辑会写在选项的点击事件里,还有就是直到倒计时结束两位玩家都没有答题,那么我们会执行setVariate动作组。



6.setVariate动作组

setVariate动作组会先判断questionIndex的值,如果不等于questionList的行数减1则说明当前题目还不是最后一道题,就会将questionList中的下一道题的内容赋值给currentQuestion,重置waitInterval触发器和limitInterval触发器。



如果相等则说明已经答完全部题目了,就比较自己和对手的得分,显示对局结果。如果自己是胜方就调用postUser服务去数据库中更新自己的matchpoint。



7.玩家选择选项

现在来说一下玩家在答题倒计时结束前进行答题的情况,当玩家点击了选项行或者该选项行中的选择钮,就会把该选项的序号赋值给answerIndex,并且如果对手并未答题对局也没有结束(即opponentAnswer仍为初始值-1,finalResult仍未初始值0),则玩家会给对手发送一条method为chose的个人消息,消息内容就是自己的答题结果。然后执行checkAnswer和setVariate两个动作组。



对应的,当玩家收到method为chose的个人消息,会将消息中的对方答题结果赋值给opponentAnser,同样执行checkAnswer和setVariate两个动作组。


8.checkAnswer动作组

checkAnswer动作组是用来判断当前题目的答题结果,如果opponent大于等于0(即不为初始值-1),则说明当前题目是对手答题,则再判断对手答案是否正确,如果对手答案正确给对手分数加1,choseResult赋值“Opponent score”表示对方的分,如果错误则给自己分数加1,choseResult赋值“Our score”表示己方得分,如果opponent小于0(即仍为初始值-1),则说明当前题目是己方答题,同理进行判断和对应操作。



最后将整个流程总结如下


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容