首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

微信公眾平台開發實戰:成語接龍遊戲完整原始碼解析

     編輯:Java 綜合教學

專案背景

基於 Spring MVC + 微信公眾平台開發的成語接龍小遊戲,支援三種接龍規則(同字、諧音、包含)、積分榜、連勝獎勵、狀態機流程控制。原始碼開源於 GitHub。

核心業務流程

  1. 用戶進入:發送「接龍」或「開始」觸發遊戲,初始化/重置用戶狀態(IdiomUserInfo)。
  2. 出題:從成語庫(IdiomListInfo,共 29543 條)隨機抽取一條,記錄 idiomId、設定狀態為 ANSWER。
  3. 作答判定:用戶回覆成語,依規則計分:
    • 尾字相同:+3 分
    • 尾字諧音:+1 分
    • 包含尾字:+1 分(不可重複成語)
    • 不符合:提示錯誤,首次不扣分
  4. 連續作答:答對自動出下一題,若資料庫無後續成語,獎勵 +5 分並重新出題。
  5. 結束/查看答案:發送「答案」結束本輪,結算連勝獎勵(每 5 連勝獎勵 2^(n/5) 分),重置連勝計數。
  6. 排行榜:發送「排行」查看前 1000 名及自己排名。

關鍵技術實現亮點

1. 狀態機設計(StepEnum)

public enum StepEnum {
    NORMAL(0, "普通狀態"),
    ANSWER(1, "答題狀態");
    // 模組超過 1 小時自動重置為 NORMAL
}

結合 IdiomUserInfo.moduleStep、stepTime 實現會話級狀態管理,避免用戶中途離開產生髒資料。

2. 成語匹配演算法

// 同字匹配
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,查詢無需即時計算拼音,效能極高。

3. 積分與連勝獎勵機制

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);

4. 訊息處理統一入口

@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 表)。
  • 配置微信公眾號介面 URL、Token、EncodingAESKey。
  • 啟動應用,掃碼關注測試。

演示動畫

成語接龍演示

擴充建議

  • 引入 Redis 快取熱門成語、用戶狀態,減輕 DB 壓力。
  • 增加「每日一題」定時任務、好友 PK 模式。
  • 接入微信客服介面,支援圖文混排回覆。
  • 單元測試覆蓋核心匹配邏輯與積分計算。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved