public void moveGapUp() { int gapPos = getGapPosition(); int x = getXCoord(gapPos); int y = getYCoord(gapPos); if (!(x == 0)) { int valueOnTop = getValueAt(x - 1, y); setValue(x, y, valueOnTop); setValue(x - 1, y, 0); } }
public Object result(Object s, Action a) { EightPuzzleBoard board = (EightPuzzleBoard)s; if (EightPuzzleBoard.UP.Equals(a) && board.canMoveGap(EightPuzzleBoard.UP)) { EightPuzzleBoard newBoard = new EightPuzzleBoard(board); newBoard.moveGapUp(); return newBoard; } else if (EightPuzzleBoard.DOWN.Equals(a) && board.canMoveGap(EightPuzzleBoard.DOWN)) { EightPuzzleBoard newBoard = new EightPuzzleBoard(board); newBoard.moveGapDown(); return newBoard; } else if (EightPuzzleBoard.LEFT.Equals(a) && board.canMoveGap(EightPuzzleBoard.LEFT)) { EightPuzzleBoard newBoard = new EightPuzzleBoard(board); newBoard.moveGapLeft(); return newBoard; } else if (EightPuzzleBoard.RIGHT.Equals(a) && board.canMoveGap(EightPuzzleBoard.RIGHT)) { EightPuzzleBoard newBoard = new EightPuzzleBoard(board); newBoard.moveGapRight(); return newBoard; } // The Action is not understood or is a NoOp // the result will be the current state. return s; }