使用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鏈接組件實現實時對戰答題的經驗總結數據庫

相關文章
相關標籤/搜索