⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 board.java

📁 这是一个汉诺塔程序
💻 JAVA
字号:

/**
 * This class models a HannoiTower.
 *
 * @author 程宇恒
 * @version 1.0.0
 */
 
 
/*控制盘子位置及游戏*/

final class Board
{
	private int peg[][];
    private int pegTop[];
    private int discWidth[];
    private int discs;
    private int moveCount;
    private int minMoves;
    private Hanoi11 main;
    static final int PEGS = 3;
    static final int DISC_SIZES[][] = {
        {68, 18}, {76, 16}, {84, 14}, {92, 13}, {100, 12}, {108, 12}, {112, 11}, {116, 10}
    };
/*构造函数*/
    Board(int i, Hanoi11 hanoi11) 
    {
        pegTop = new int[3];
        discs = i;
        main = hanoi11;
        peg = new int[i][3];
/*把所有盘子放在第一个塔上*/
        for(int j = 0; j < i; j++)
        {
            Hanoi11 _tmp = hanoi11;
            peg[j][0] = i - j;
        }

        Hanoi11 _tmp1 = hanoi11;
        pegTop[0] = i - 1;
        for(int k = 1; k < 3; k++)
            pegTop[k] = -1;

        discWidth = new int[i];
        for(int l = i - 1; l >= 0; l--)
        {
            Hanoi11 _tmp2 = hanoi11;
            Hanoi11 _tmp3 = hanoi11;
            discWidth[l] = DISC_SIZES[i - 3][0] - DISC_SIZES[i - 3][1] * (i - 1 - l);
        }

        moveCount = 0;
/*最少移动步数*/
        minMoves = (int)Math.pow(2D, i) - 1;
       
    
}
    void setDisc(int i, int j)
    {
        peg[++pegTop[j]][j] = i;
    }

    int getDisc(int i, int j)
    {
        return peg[i][j];
    }

    int getTopDisc(int i)
    {
        return peg[pegTop[i]--][i];
    }

    int getPegTop(int i)
    {
        return pegTop[i];
    }

    int getMoveCount()
    {
        return moveCount;
    }

    int getMinMoves()
    {
        return minMoves;
    }

    int getDiscWidth(int i)
    {
        return discWidth[i - 1];
    }

    boolean isStartPeg(int i)
    {
        return i >= 0 && pegTop[i] >= 0;
    }

    String getBoardStatus()
    {
        String s = null;
        if(pegTop[2] == discs - 1)
            if(moveCount == minMoves)
                s = "你真厉害!";
            else
            
                s = "恭喜你完成了,但是你可以只用"+minMoves+" 步,加油再试一遍哟^_^";
        return s;
    }
/*移动*/
    boolean moveDisc(int i, int j, int k)
    {
        if(j >= 0 && k >= 0 && j != k && (pegTop[k] < 0 || peg[pegTop[k]][k] > i))
        {
            setDisc(i, k);
            moveCount++;
            return true;
        } else
        {
            setDisc(i, j);
            return false;
        }
    }

    void moveDisc(int i, int j)
    {
        setDisc(getTopDisc(i), j);
        moveCount++;
    }

   

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -