基於 J2ME + JSR-82 實現的 C/S 架構雙人五子棋,通過藍牙連接兩台手機對戰。包含服務端/客戶端模式切換、棋盤渲染、落子邏輯、勝負判定、網絡同步完整流程。
src/
├── bluetooth/ # 藍牙通信層
│ ├── BlueClientService.java # 客戶端服務:設備發現、服務搜索、連接管理
│ ├── BlueServerService.java # 服務端服務:服務註冊、連接接受、數據收發
│ └── BtConnection.java # 連接封裝:流讀寫、斷開處理
├── components/ # UI 組件層
│ ├── GameZone.java # 棋盤主界面:繪製棋盤、處理觸摸事件、顯示對手落子
│ └── IndexForm.java # 啟動選擇界面:Server/Client 切換
├── logic/ # 遊戲邏輯層
│ ├── GameLogic.java # 核心規則:落子合法性、五子連珠判定、棋盤狀態維護
│ └── Controller.java # 協調器:邏輯層與藍牙層交互、狀態機驅動
└── midlet/
└── FiveChessGame.java # MIDlet 入口:生命周期管理、界面切換
F0E0D0C0B0A000908070605040302010 標識服務DataInput/OutputStream 讀寫 UTF 字符串
"MOVE:x,y" 或 "RESTART""ACK" / "WIN" / "DRAW" / "YOUR_TURN"acceptAndOpen() 循環 + 每連接一線程 (ProcessConnection) 處理收發Canvas,重寫 paint(Graphics g) 繪製網格、棋子、坐標標識pointerPressed(int x, int y) 觸摸轉換為棋盤坐標 (row, col)drawImage 到屏幕// 四個方向檢查:水平、垂直、主對角線、副對角線
int[][] directions = {{0,1}, {1,0}, {1,1}, {1,-1}};
for (int[] dir : directions) {
int count = 1;
// 正向
for (int i=1; i<5; i++) if (check(r+dir[0]*i, c+dir[1]*i, player)) count++; else break;
// 反向
for (int i=1; i<5; i++) if (check(r-dir[0]*i, c-dir[1]*i, player)) count++; else break;
if (count >= 5) return true; // 獲勝
}
時間複雜度 O(1),適合資源受限手機環境。
WAIT_CONNECT → MY_TURN → OPPONENT_TURN → GAME_OVEROPPONENT_TURN 等待對方數據MY_TURN

完整工程源碼(含 WTK 專案文件、構建腳本)可在文末「本文配套源碼」下載。導入 EclipseME/NetBeans Mobility Pack 即可編譯運行。
此專案展示了 J2ME 平台下「藍牙通信 + 遊戲邏輯 + UI 渲染」的完整整合,是學習移動網絡遊戲開發的優秀入門案例。核心價值在於通信層與邏輯層解耦、事件驅動狀態機、資源受限環境下的算法優化三大工程實踐。