/** * Implementation of a State * */ public class Board { /** * Number of elements of the Sudoku */ public static int ELEMENTS = Field.POSSIBILITIES * Field.POSSIBILITIES; protected Field[] board; /** * */ public Board() { this.board = new Field[ELEMENTS]; for (int i = 0; i < ELEMENTS; i++) { this.board[i] = new Field(); } } /** * Resolves field addresses. * * @param struct * @param structNr * @param element * @return */ public Field getField(Structure struct, int structNr, int element) { return board[getIndex(struct, structNr, element)]; } protected int getIndex(Structure str, int nr, int ele) { int sqrt = (int) Math.round(Math.sqrt(Field.POSSIBILITIES)); if (str.name().equals("COL")) return nr + (ele * Field.POSSIBILITIES); else if (str.name().equals("ROW")) return (nr * Field.POSSIBILITIES) + ele; else if (str.name().equals("BOX")) return Field.POSSIBILITIES * (nr / sqrt * sqrt + ele / sqrt) + (nr % sqrt * sqrt + ele % sqrt); else return -1; } public void setField(Structure structure, int structNr, int element, Field f) { board[getIndex(structure, structNr, element)] = f; } }