一、房間類遊戲的房間基本屬性
房間類遊戲在我們的生活中並不陌生,像跑跑卡丁車、勁舞團、歡樂麻將等,都是房間匹配的。
1、uuid 全域性唯一
2、房間id 當前唯一,且供客戶端顯示
3、房間型別
4、房間名字(可選)
5、建立時間
6、密碼 可選
7、加入條件 如需要扣除多少金幣,房卡等
8、等等。。。。
二、uuid
uuid的設計決定了整個房間管理的複雜度,通常有幾個辦法
1、資料庫自增
2、某程序擁有唯一分配權,或者多程序按段分配
3、自行構建,如時間,md5碼等。
為了便於檢視,在開發中,我選擇了當前時間戳+房間id的方式。
時間為當前utc毫秒數。 13位字元長度, 而房間id一般是4-7位。 整個uuid的長度可以控制在20位左右。
這樣設計有乙個好處,即當我看到uuid的時候,也能立即獲得房間id。除錯的時候非常方便。
三、房間id
房間id作為乙個顯示和玩家操作房間的入口,一般在4-7位。不宜過長。而長度決定了當前房間的容量。
4位:9999 即九千九百九十九
5位:99999 即九萬九千九百九十九
6位:999999 即九十九萬九千九百九十九
7位:9999999 即九百九十九萬九千九百九十九
房間id的生成可以採用十分簡單的辦法。如下偽**所示:
/**
* 房間id生成函式
*/function generateroomid()
return roomid;
}//建立房間偽**
let ret = null;
//最多嘗試10次 避免死迴圈
for(let i = 0; i < 10; ++i)
break;
}}if(ret)
else
在資料庫表設計的時候,uuid為主鍵, id要加unique索引。這樣當插入資料庫的時候,若已經有相同的id存在,則會報錯。
四、uuid和房間id的使用
由於房間id用完後會被釋放,所以系統之間的引用最好是採用uuid。
比如,加入房間,解散房間,退出房間,查詢房間以及記錄使用者所在的房間等,都要使用uuid。
舉乙個簡單的例子。玩家a進入了房間666666,玩到一半下線了。房間666666的其他玩家解散了房間。此時,另乙個玩家建立了乙個新房間,剛好分配到了666666這個房間id。當玩家a再次上線時,如果資料庫裡記錄的是666666,那麼系統就會引導玩家進入這個新建立的房間。然而這個房間並非他原來的房間。
由此可之,會復用的id,是不能作為資料儲存依據的。
這裡有乙個特殊情況,就是玩家會手工輸入房間號。對於這樣的情況,只需要特殊處理一下這個請求即可。
**和生活一樣,每乙個細節都值得去總結,這樣才能一天比一天好。
對於多人聯機遊戲中 遊戲房間實現的想法
實現多人在 間的功能後 為了能讓使用者sessionid與名字匹配 用map將 session與名字 用key value儲存 private static map map newhashmap string session map.put m.getziji session 1 2新建乙個sess...
BFS在Roglike遊戲中生成房間的應用
roglike遊戲中,生成房間後,我們可以使用廣度優先遍歷的思想,利用佇列實現找到最遠距離的房間並返回,這種方法對各種生成的地牢的相容性較好,但也較為複雜。解決了一些如 u字形地牢 起點道終點的距離不是最遠但玩家到達終點的路程最長 不能很好的選擇終點的問題,如圖 下面附上 c 中 廣度優先遍歷的 b...
房間類遊戲後台框架 一 介紹
一 系統結構 設計的思路就是高可擴充套件,只要當前負載已達到上限,只需要整體擴容或者部分擴容即可,整個擴容過程使用者沒有感知。最終目標全自動化,將各個元件放在docker下執行,kubernetes控制遊戲的擴容。1 閘道器 閘道器負責接收來自客戶端資訊,對使用者身份鑑權並解析其資料,從服務發現管理...