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

MIDP 1.0 經典小遊戲:五子棋 1.1 版完整原始碼解析

     編輯:J2ME

版本說明

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() 更新畫面。
  • 玩家提示:棋盤外圍 3 像素寬邊框顏色表示當前落子方。

白方回合 紅方回合

完整類別結構

  • Gobang:繼承 MIDlet,管理應用程式生命週期。
  • GobangCanvas:繼承 Canvas,核心邏輯、繪圖、按鍵處理。
  • Chesses:棋子資料類別,含 isPlayer1 布林值。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved