1.1 版完善遊戲輸贏判斷邏輯。演算法雖未深度優化,但實現了完整的勝負判定,供參考。其他內容與 1.0 版相同。
玩家落子(按下 FIRE 鍵)時呼叫 checkWin(),從當前落子位置向四個方向(0°/180°、90°/270°、45°/225°、135°/315°)各檢查 5 顆棋子,若連續同色累計達 5 則獲勝。
int player1win, player2win;
protected synchronized void keyPressed(int keyCode) {
// ... 省略按鍵處理 ...
else if (action == Canvas.FIRE) {
if (chesses[selectedY][selectedX] == null) {
chesses[selectedY][selectedX] = new Chesses(this.isPlayer1);
if (checkWin()) {
String winner = isPlayer1 ? "白方勝利" : "紅方勝利";
if (isPlayer1) player1win++; else player2win++;
try { Thread.sleep(3000); } catch (Exception e) {}
Alert winAlert = new Alert("", winner + "\n白方 " + player1win + " : " + player2win + " 紅方", null, AlertType.INFO);
winAlert.setTimeout(Alert.FOREVER);
Display.getDisplay(gobang).setCurrent(winAlert, this);
init();
repaint();
}
this.isPlayer1 = !this.isPlayer1; // 切換玩家
}
}
repaint();
}
private boolean checkWin() {
int num = 1;
// 水平、垂直、對角線四個方向各自雙向檢查,程式碼省略...
if (num >= 5) return true;
else return false;
}
private boolean isPlayer1(int x, int y) {
if (x >= 0 && x <= 15 && y >= 0 && y <= 15 && chesses[x][y] != null) {
return chesses[x][y].isPlayer1 == this.isPlayer1;
}
return false;
}
Chesses 類別標記棋子屬於哪位玩家,二維陣列 chesses[][] 存放棋盤狀態,落子時才建立物件以節省記憶體。repaint() 更新畫面。

Gobang:繼承 MIDlet,管理應用程式生命週期。GobangCanvas:繼承 Canvas,核心邏輯、繪圖、按鍵處理。Chesses:棋子資料類別,含 isPlayer1 布林值。