目錄
需求
代碼設計
設計資料庫
介面設計
具體使用
我沒有提及的問題:
總結:
今天寫下郵件系統,也是計劃中的文章,走起
郵件系統幾乎是每個游戲必備的,雖然沒什么復雜的,但是還是稍微寫一下,給某些沒寫過的同學參考下

注:網上隨便找了個游戲的郵件界面,沒找到之前做的游戲的郵件界面
需求
通用系統幾乎沒什么策劃案的事,因為這種都是統一的實作,我們自己理一下專案需求
1、發送郵件
2、洗掉郵件,
3、讀取郵件
4、支持發送附件,在附件中可以支持道具的領取
5、支持不同的郵件群組型別,比如系統郵件,公會郵件,戰斗郵件
6、支持配置不同型別的郵件的正文配置,比如排行榜的郵件,公會解散的郵件等等
還可以擴展一些根據游戲的郵件型別
代碼設計
設計資料庫
根據需求我們設計表欄位如下

注:有不明白的可以留言給我交流
介面設計
因為郵件是通用功能,所以介面要盡量的簡單,可以多些一些介面,我們定義一個工具類,下面的是一些底層介面
//查詢郵件
public Letter sendLetter(int sendId, int groupId) throws SQLException;
//發送郵件
public void sendLetter(int sendId, int recId, int groupId,int titleId, String param,String attach) throws SQLException;
//讀取單個郵件(修改讀取狀態)
public ErrorVO readLetter(PlayerLetter lett, int roleid) throws SQLException;
//一鍵已讀
public ErrorVO readAllLetters(int roleId, int groupId) throws SQLException;
// 一鍵領取附件
public ErrorVO attachedAll(int roleId int groupId) throws SQLException;
//一鍵洗掉無附件郵件
public ErrorVO delAllLetters(int roleId, int groupId) throws SQLException;
對應表的entity 可以使用工具根據資料庫表生成,因為本地沒有安裝資料庫,就不展示了
郵件組型別,組型別決定了對應的郵件在客戶端的分類,在這邊我隨便寫了三個組別,系統郵件,戰斗郵件,個人郵件
/
**
* 郵件組型別
*/
public enum LetterGroupType {
//系統
LETT_SYS( 1),
//戰斗
LETT_FIGHT( 2),
//個人
LETT_PLAYER(5),;
private int type;
LetterGroupType(int type) {
this.type = type;
}
public int getType() {
return type;
}
public static LetterGroupType valueOf(int emailType) {
for (LetterGroupType bt : values()) {
if (emailType == bt.getType()) {
return bt;
}
}
return null;
}
}
郵件標題型別列舉,我隨意寫了兩個,根據具體游戲增加吧
/**
* 郵件標題型別
*/
public enum LetterTitleType {
// 等級排行榜郵件
LV_RANK_MAIL(1),
// 在線獎勵郵件
ONLINE_MAIL(2),
;
private final int type;
private LetterTitleType(int type) {
this.type = type;
}
public int getType() {
return type;
}
}
基本的都搞定了我們定下引數的規則:
groupId 決定了客戶端顯示的組別
titleId 決定了顯示的郵件標題和郵件的內容
比如 titleId = 1 排行榜獎勵,在配置表中可以配置
![]()
客戶端通過讀取標題id的組態檔,設定郵件標題和郵件內容,具體的引數可以從郵件的param中讀取,{ } 是占位符,根據順序進行增加
具體使用
其他模塊呼叫,比如某個玩家在等級排行榜中獲得了第11名,則發送郵件呼叫如下
LetterUtil.sendSysMail(1,LetterTitleType.LV_RANK_MAIL,"獎勵",11)
注:這個介面是在底層介面的基礎上進行擴展的,因為是發送的等級排行榜
所以一些引數是默認的,比如:
sendRid = 0,
groupId = LetterGroupType.LETT_SYS,
發送時間是當前時間,
我沒有提及的問題:
1、客戶端紅點問題,在有新郵件的時候推送新郵件的數量
2、郵件因為是一個不需要及時回應的行為,所以可以將任務放到執行緒池執行,不阻塞當前執行緒
3、上層介面的設計,上面代碼里我只展示了最基本的介面,在使用的地方也沒有展示具體的邏輯
4、資料的寫庫問題,因為我本地沒裝資料庫,也每個專案的情況不同,可以自己適配專案的資料寫入
5、和客戶端協議通信沒有展示,基本上就是一個協議內容就是表資料的轉換
6、郵件過期的處理,可以在程式內加定時器進行定時處理,至于附件的處理邏輯可以和策劃進行溝通,是自動領取還是直接刪掉,
總結:
郵件不難,只要按常規的邏輯寫就行了
但是要注意郵件的附件的領取狀態要及時更新,防止被刷獎勵,
今天就這樣吧,因為本地沒有資料庫,具體的實作就留給你了,如有問題可以留言給我,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/289394.html
標籤:其他
上一篇:51單片機系列--定時器中斷
下一篇:2021.7.19模擬賽C組總結
