• 當前位置:首頁 > IT技術 > 編程語言 > 正文

    java實現中國象棋4:悔棋及重新開始
    2021-12-01 23:10:02


    在現實中,我們有可能手抖不小心點到錯誤的位置導致棋子下錯了,這時就應該有個悔棋的功能,讓我們能夠回到上一步。當然這個功能也是非常容易實現的,下面我將大致地說一下思路。

    思路

    創建一個數組用來保存棋盤上所有移動。只需要添加以下代碼即可。

    int[][] lianbiao = new int[99999][6];// 棋子初始位置,現在的位置,棋子的編號,棋子占的位原來的棋子的編號

    當我們點擊“悔棋”按鈕時,將最后一步撤回,即


    1. 將最后移動的棋子移動到的位置原來的棋子(空位)復原;
    2. 將最后移動的棋子返回前一步的位置。

    如此,我們即可實現悔棋的功能。下面說一下具體步驟。

    一、悔棋方法

    按照剛才的思路寫即可

    public void Regret_Chess(){
    r = -1;
    if (index > 0) {
    flag[lianbiao[index - 1][0]][lianbiao[index - 1][1]] = lianbiao[index - 1][4];
    flag[lianbiao[index - 1][2]][lianbiao[index - 1][3]] = lianbiao[index - 1][5];
    rechessflag();
    index--;
    }
    }

    二、重新開始方法

    這個比較簡單,只需要將棋盤初始化以下即可。

    public void renew() {
    flag = new int[][] { { 1, 2, 3, 4, 5, 4, 3, 2, 1 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
    { 0, 6, 0, 0, 0, 0, 0, 6, 0 }, { 7, 0, 7, 0, 7, 0, 7, 0, 7 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
    { 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 77, 0, 77, 0, 77, 0, 77, 0, 77 }, { 0, 66, 0, 0, 0, 0, 0, 66, 0 },
    { 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 11, 22, 33, 44, 55, 44, 33, 22, 11 } };
    chessflag = 1;
    r = -1;
    x1=0;y1=0;x2=0;y2=0;index=0;beindex=0;
    chessflag = 1;
    lianbiao = new int[99999][6];
    curchess = new int[3];
    beforechess = new int[3];
    }

    三、按鈕的回調函數

    public void actionPerformed(ActionEvent e) {
    // 獲取按鈕上的文字
    action = e.getActionCommand();

    if (action.equals("開始游戲")) {
    System.out.println("開始游戲");
    renew();
    ui.repaint();
    } else if (action.equals("重新開始")) {
    System.out.println("重新開始");
    renew();
    ui.repaint();
    } else if (action.equals("悔棋")) {
    System.out.println("悔棋");
    Regret_Chess();
    ui.repaint();
    }
    }

    四、保存移動

    每次棋子成功移動即可將移動的情況保存在 l i a n b i a o lianbiao lianbiao數組中,先創建一個 s e t L b ( ) setLb() setLb()方法,再將此方法添加到 w a l k ( ) walk() walk()方法中即可。

    // 更新悔棋列表
    public void setLb() {
    lianbiao[index][0] = beforechess[0];
    lianbiao[index][1] = beforechess[1];
    lianbiao[index][2] = r;
    lianbiao[index][3] = c;
    lianbiao[index][4] = beforechess[2];
    lianbiao[index][5] = flag[r][c];
    index++;
    }

    更改后的 w a l k ( ) walk() walk()方法如下:

    public void walk(){
    setLb();// 把此棋子的前后位置保存下來
    flag[r][c] = beforechess[2];
    flag[beforechess[0]][beforechess[1]] = 0;
    ifwin();
    curchess = new int[3]; // 走完一步后curchess變為0
    beforechess = new int[3];
    c = -1;
    r = -1;
    rechessflag();
    ui.repaint();
    }

    至此就完成了悔棋以及重新開始的實現。

    關注微信公眾號:圖靈完備,回復中國象棋即可獲得圖片及代碼資源。


    本文摘自 :https://blog.51cto.com/u

    開通會員,享受整站包年服務
    国产呦精品一区二区三区网站|久久www免费人咸|精品无码人妻一区二区|久99久热只有精品国产15|中文字幕亚洲无线码