/** * Main Sudoku Paint. Paints everything for the sudoku board. * * @param m * @param g * @param w * @param oh */ @Override public void paint(SudokuModel m, Graphics g, int w, int oh) { this.oh = oh; this.w = w; int h = oh - 100; this.h = h; g.setFont(new Font(SANS_SERIF, PLAIN, 50)); m.checkConflict(); for (int i = 0; i < 3; ++i) for (int j = 0; j < 3; ++j) paintSmallGrid(g, i * w / 3, j * h / 3, w / 3, h / 3); m.updateSelection(); for (int i = 0; i < 9; ++i) for (int j = 0; j < 9; ++j) paintBox(g, i * w / 9, j * h / 9, m.get(j, i), w / 9, h / 9); paintGrid(g, w, h); if (m.gameOver()) { g.setColor(Color.BLACK); g.fillRect(w / 2 - 200, h / 2 - 100, 400, 200); g.setColor(Color.RED); drawStringBox(g, w / 2 - 200, h / 2 - 200, "GAME OVER", 400, 400); } }
/** * @param model * @param ea * @param me */ @Override public void handleMouseClick(SudokuModel model, int ea, MouseEvent me) { if (model.gameOver()) return; int row = mousePos(me, w, h)[0]; int col = mousePos(me, w, h)[1]; model.setSelected(row, col); }
public void showInvalid(){ for(int i=0; i < 9; i++){ for(int j=0; j < 9; j++){ board.getButtons().get(i).get(j).setValid(model.isCellValid(i, j)); } } }
public void setSelectedCell(String label, Position p) { if (!model.isCellGiven(p.getRow(), p.getCol())) { if(!inputPanel.getCandidateButton().isSelected()){ model.setCellNumber(p.getRow(), p.getCol(), Integer.parseInt(label)); board.getSelectedButton().setNumberLabel(label); }else{ if(model.hasCellCandidate(p.getRow(), p.getCol(), Integer.parseInt(label))){ // System.out.println(label); model.removeCellCandidate(p.getRow(), p.getCol(), Integer.parseInt(label)); board.getSelectedButton().setCandidateLabel(model.getCandidates(p.getRow(), p.getCol())); }else{ // System.out.println(label); model.addCellCandidate(p.getRow(), p.getCol(), Integer.parseInt(label)); board.getSelectedButton().setCandidateLabel(model.getCandidates(p.getRow(), p.getCol())); } } } }
protected void execute() { SudokuModel model = (SudokuModel) manager.getModel(); SudokuRunField runField = new SudokuRunField(model); SudokuGenerator g = new SudokuGenerator(); g.setField(runField); int maxTreeCount = SudokuPreferences.instance.getGenerateTreeCountLimit(); boolean useTemplate = model.getProblemInfo().isGenerateByTemplate(); int[] template = model.getProblemInfo().getNumbers(); if (useTemplate) { int q = checkUseTemplate(template); if (q == JOptionPane.NO_OPTION) useTemplate = false; else if (q == JOptionPane.CANCEL_OPTION) return; } // TODO we can set options (int stepsLimit, int narrowest) when maxTreeCount = 1. int[] numbers = (!useTemplate) ? g.generate(maxTreeCount, -1, -1) : g.processForm(model.getProblemInfo().getNumbers(), maxTreeCount) // g.generate(model.getProblemInfo().getNumbers(), maxTreeCount); ; SudokuProblemInfo p = model.getProblemInfo(); for (int i = 0; i < numbers.length; i++) p.setNumberAt(i, numbers[i] + 1); model.setSolutionInfo("Tree count=" + g.getTreeCount()); }
public void showIncorrect(){ int curRow = board.getSelectedCell().getRow(); int curCol = board.getSelectedCell().getCol(); board.getSelectedButton().setCorrect(model.isCellCorrect(curRow, curCol)); }
/** * @param model * @param ea * @param ke */ @Override public void handleKeyPress(SudokuModel model, int ea, KeyEvent ke) { if (model.gameOver()) return; switch (ke.getKeyCode()) { case KeyEvent.VK_UP: model.move(-1, 0); break; case KeyEvent.VK_DOWN: model.move(1, 0); break; case KeyEvent.VK_LEFT: model.move(0, -1); break; case KeyEvent.VK_RIGHT: model.move(0, 1); break; case KeyEvent.VK_0: model.submit(0); break; case KeyEvent.VK_1: model.submit(1); break; case KeyEvent.VK_2: model.submit(2); break; case KeyEvent.VK_3: model.submit(3); break; case KeyEvent.VK_4: model.submit(4); break; case KeyEvent.VK_5: model.submit(5); break; case KeyEvent.VK_6: model.submit(6); break; case KeyEvent.VK_7: model.submit(7); break; case KeyEvent.VK_8: model.submit(8); break; case KeyEvent.VK_9: model.submit(9); break; case KeyEvent.VK_BACK_SPACE: model.submit(0); break; } }