Beispiel #1
0
  /**
   * 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);
    }
  }
Beispiel #2
0
 /**
  * @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));
	}
Beispiel #7
0
 /**
  * @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;
   }
 }