基於 Spring MVC + 微信公眾平台開發的成語接龍小遊戲,支援三種接龍規則(同字、諧音、包含)、積分榜、連勝獎勵、狀態機流程控制。原始碼開源於 GitHub。
IdiomUserInfo)。IdiomListInfo,共 29543 條)隨機抽取一條,記錄 idiomId、設定狀態為 ANSWER。public enum StepEnum {
NORMAL(0, "普通狀態"),
ANSWER(1, "答題狀態");
// 模組超過 1 小時自動重置為 NORMAL
}
結合 IdiomUserInfo.moduleStep、stepTime 實現會話級狀態管理,避免用戶中途離開產生髒資料。
// 同字匹配 idiomListInfo.getWordEnd().equals(idiomAnswerInfo.getWordBegin()) // 諧音匹配(拼音首字母) idiomListInfo.getWordEndSpell().equals(idiomAnswerInfo.getWordBeginSpell()) // 包含匹配 idiomAnswerInfo.getWord().indexOf(idiomListInfo.getWordEnd()) > -1
資料表預存 word_begin、word_end、word_begin_spell、word_end_spell,查詢無需即時計算拼音,效能極高。
int score = 0;
if (comboTimes > 1) {
int rank = comboTimes / 5 + 1;
score += Math.pow(2, rank); // 5連勝+2, 10連勝+4, 15連勝+8...
}
iUserInfo.setScore(iUserInfo.getScore() + score);
iUserInfo.setComboTimes(comboTimes + 1);
@RequestMapping(value = "msg", produces = "text/plain;charset=utf-8")
@ResponseBody
public String textMsg(HttpServletRequest request) {
// 1. 解析微信 XML 訊息 -> BaseMsgReq
// 2. 註入 Document Root -> wechatEventCenter.setRoot(root)
// 3. 根據 MsgType/EventKey 反射調用對應方法
// 4. 統一記錄日誌、封裝回覆 XML
}
idiom_list 表)。