在介紹匹配系統之前,先說一下專案的整體結構。
專案主要有四個場景: start --> home --> choose --> game
**home_scene: **授權成功之後,就跳轉到此場景。
進入此場景之後,需要初始化mgobe框架的sdk。
首先,設定sdk所需要的引數值(gameid , openid, secretkey, server,從控制台獲取),並放入快取中。
initlisten函式做的就是初始化listener,並建立房間例項,給房間新增監聽。擷取主要**如下:
初始化完成之後,就可以選擇1v1,3v3。目前3v3其實我現在設定的是2v2,沒有實際去測效果,但是計算坦克的初始位置的時候,把這種情況考慮進去了,這個到幀同步時再細講。
choose_scene:選擇1v1或者3v3之後,就會進入此場景。其實,目前來講,choose_scene完全可以和home_scene合併為乙個場景。在此,我說明一下為什麼把它們分開。
因為,之前我設想的是,在這個場景可以由玩家自由選擇坦克型別什麼的,選擇好之後,由玩家手動點選匹配。同時,也可以在玩家匹配成功之後,顯示所有對戰玩家的對局資訊,類似於王者榮耀進入遊戲之前的那個場景。這是為了以後,拓展功能方便。比如以下這種:
現在省略掉這些優先順序較低的環節。因此,進入choose_scene場景之後,就直接發起匹配。
發起匹配之前,我們需要在mgobe控制台建立乙個匹配規則。
首先,在控制台左側選單【房間管理】,找到【匹配規則集】
新建規則集,填寫規則集名稱和規則集內容。名稱隨意填就好,規則集內容是乙個json。它的結構是這樣的:
我以當前坦克大戰的規則集為例,解釋一下各個欄位的含義。
],
"playerattributes": [
],"rules": }
],"timeout": 15 //全域性匹配超時時間
}
更複雜的匹配規則,可以參考官方文件:
點選確定之後,就會分配乙個匹配code,這個code就是呼叫發起匹配api需要傳入的乙個引數。
現在,可以呼叫room.matchplayers方法發起匹配了。匹配超時之後,會彈出超時的對話方塊,可以選擇重新匹配,或者取消匹配退出匹配佇列。取消匹配,會返回到home_scene場景。(超時對話方塊是我從cocos論壇找的ui,結合自己需要改的)
說明一下:
框架所有的api都可以在 mgobe.t.ds檔案裡找到相對應的解釋和使用方法。因此,多看此檔案會讓你更加熟悉整個框架。
**中有很多被注釋掉的**。有的是為了不讓之前的**影響到現在的邏輯,有的是在除錯過程中,為了對比各種實現方式而留下的。忽略即可。
坦克大戰 坦克類
坦克類 class tank public void setx int x public int gety public void sety int y y表示坦克的縱座標 int y 0 public tank int x,int y 定義坦克方向 0表示向上,1右,2下,3左 int direc...
C 遊戲《坦克大戰》 坦克
這裡的各種型別,使用struct而不是enum,避免後面強制轉換。子彈資訊 public struct t bulletinfo 坦克型別 public struct t type 坦克行動方向 public struct t dir 公共引數 public struct t commpar 設計框...
java 坦克大戰
include include using namespace std void print int a void shellinsert int a,int n,int d 間隔d進行排序 a j x 插入 print a void shell int a,int n shell插入排序 void...