📄 board.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 + -