⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gamepanel.java

📁 一个Java写的数独游戏
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
			break;		case 2:			c = markColorB;			square[kout[0]][kout[1]].mark(c);			break;		case 3:			c = markColorC;			square[kout[0]][kout[1]].mark(c);			break;		case 4:			c = markColorD;			square[kout[0]][kout[1]].mark(c);			break;		default:  			square[kout[0]][kout[1]].unmark();		}	}		/**	 * <code>unmarkSquare</code>	 * <p>Unmarks a square<p>	 */	public void unmarkSquare(int index){		int[] kout = new int[2];		kout = Convert.indexToKoutia(index);		square[kout[0]][kout[1]].unmark();	}		public void unmarkAll(){		for(int i = 0; i < 9; i++)			for(int j = 0; j < 9; j++)				square[i][j].unmark();	}		// SETS	public void setHighlightColor(Color hc){highlightColor = hc;}	public void setErrorBackColor(Color col){errorBackColor = col;}	public void setFixedBackColor(Color col){fixedBackColor = col;}	public void setShowTrace(boolean state){showTrace = state;}	public void setShowToolTip(boolean state){showToolTip = state;}	public void setMarkColorA(Color col){markColorA = col;}	public void setMarkColorB(Color col){markColorB = col;}	public void setMarkColorC(Color col){markColorC = col;}	public void setMarkColorD(Color col){markColorD = col;}		public void setPanelBackColor(Color col){		panelBackColor = col;		setBackground(col);	}	public void setSquareBackColor(Color col){		squareBackColor = col;		for(int i = 0; i < 9; i++)			for(int j = 0; j < 9; j++)				if(!square[i][j].isFixed())					square[i][j].setDefaultBackgroundColor(squareBackColor);	}		//	// METHODS FOR EVENT HANDLING	//		/** 	 * <code>bKeyPressed</code>	 * <p>1)Handles the event that occurs when the user tries to	 * enter a value on a cell of the board.</p>	 * <p>2)Handles keybord delete</p>	 * <p>3)Handles keyboard arrows events</p>	 * Checks if the entered value is valid and if so submits it	 * @param evt	 */	private void bKeyPressed(KeyEvent evt){		MSquare ob = (MSquare) evt.getSource();		char a;		int k,l;		int index;		String name = ob.getName();		k = Integer.valueOf(String.valueOf(name.charAt(1)));		l = Integer.valueOf(String.valueOf(name.charAt(2)));		a = evt.getKeyChar();		index = Convert.koutiaToIndex(k, l);				if(Character.isDigit(a) && a != '0' && !game.isFixed(Convert.koutiaToIndex(k,l))){			String num_str = String.valueOf(evt.getKeyChar());			if(game.canIAdd(Integer.valueOf(num_str), index)){				addToGame(Integer.valueOf(num_str), index);				ob.setText(num_str);				ob.setForeground(Color.BLACK);				if(game.checkFull())					doParty();				else					setBackground(panelBackColor);			}else{				ob.setText(num_str);				ob.setForeground(Color.RED);				handleError(index);			}		// 127 is the value of key DELETE		}else if(a == 127 && !game.isFixed(Convert.koutiaToIndex(k,l))){			removeFromGame(index, ob);			}				// for handling key arrows		int[] kout = new int[2];		kout[0] = k; kout[1] = l;		int[] kart = Convert.koutiaToKartes(k, l);		index = Convert.koutiaToIndex(k, l);				switch(evt.getKeyCode()){		case KeyEvent.VK_UP:			if((kart[0] - 1) >= 0){				kout = Convert.kartesToKoutia(kart[0] - 1, kart[1]);				try{				Robot r = new Robot();				Point p = square[kout[0]][kout[1]].getLocationOnScreen();				Dimension d = square[kout[0]][kout[1]].getSize();				r.mouseMove(p.x + (3 * d.width) / 4, p.y + (3 * d.height) / 4);				}catch(AWTException e){					System.out.print(e.getMessage());				}			}			break;		case KeyEvent.VK_DOWN:			if((kart[0] + 1) < 9){				kout = Convert.kartesToKoutia(kart[0] + 1, kart[1]);				try{				Robot r = new Robot();				Point p = square[kout[0]][kout[1]].getLocationOnScreen();				Dimension d = square[kout[0]][kout[1]].getSize();				r.mouseMove(p.x + (3 * d.width) / 4, p.y + (3 * d.height) / 4);				}catch(AWTException e){					System.out.print(e.getMessage());				}			}			break;		case KeyEvent.VK_LEFT:			if((kart[1] - 1) >= 0){				kout = Convert.kartesToKoutia(kart[0], kart[1] - 1);				try{				Robot r = new Robot();				Point p = square[kout[0]][kout[1]].getLocationOnScreen();				Dimension d = square[kout[0]][kout[1]].getSize();				r.mouseMove(p.x + (3 * d.width) / 4, p.y + (3 * d.height) / 4);				}catch(AWTException e){					System.out.print(e.getMessage());				}						}			break;		case KeyEvent.VK_RIGHT:			if((kart[1] + 1) < 9){				kout = Convert.kartesToKoutia(kart[0], kart[1] + 1);				try{				Robot r = new Robot();				Point p = square[kout[0]][kout[1]].getLocationOnScreen();				Dimension d = square[kout[0]][kout[1]].getSize();				r.mouseMove(p.x + (3 * d.width) / 4, p.y + (3 * d.height) / 4);				}catch(AWTException e){					System.out.print(e.getMessage());				}						}			break;		// For UNDO		case KeyEvent.VK_Z:			if(evt.getModifiersEx() == KeyEvent.CTRL_DOWN_MASK)				undo();			break;		// For REDO		case KeyEvent.VK_R:			if(evt.getModifiersEx() == KeyEvent.CTRL_DOWN_MASK)				redo();			break;		}	}		private void mouseClickedSquare(MouseEvent evt){		int k, l, state, index;		MSquare ob = (MSquare) evt.getSource();		String name = ob.getName();		k = Integer.valueOf(String.valueOf(name.charAt(1)));		l = Integer.valueOf(String.valueOf(name.charAt(2)));		state = ob.getMarkState();		index = Convert.koutiaToIndex(k, l);				if(evt.getButton() == MouseEvent.BUTTON1){			unmarkSquare(index);		}else if(evt.getButton() == MouseEvent.BUTTON3){			state++;			markSquare(index, state);		}	}		/**	 * <code>mouseEnteredSquare</code>	 * <p>Starts the mouseOver effects for the squares</p>	 * @param evt	 */	private void mouseEnteredSquare(MouseEvent evt){		int[] kart = new int[2];		int k, l;		MSquare ob = (MSquare) evt.getSource();		if(!showToolTip) ob.setToolTipText(null);		refreshPossibles();		String name = ob.getName();		k = Integer.valueOf(String.valueOf(name.charAt(1)));		l = Integer.valueOf(String.valueOf(name.charAt(2)));		kart = Convert.koutiaToKartes(k, l);		if(showTrace){			highlightLine(kart[0]);			highlightColumn(kart[1]);			highlightBox(k);		}		ob.grabFocus();	}		/**	 * <code>mouseExitedSquare</code>	 * <p>Finishes the mouseOverEffects for the squares</p> 	 * @param evt	 */	private void mouseExitedSquare(MouseEvent evt){		restoreBackColors();	}		/**	 * <code>panelResized</code>	 * <p>Adjusts the size of the fonts when the game panel is resized</p>	 * @param evt	 */	public void panelResized(){		int pwidth = square[1][1].getWidth();		int pheight = square[1][1].getHeight();		int pav = (pwidth + pheight) / 2;				for(int i = 0; i < 9; i++)			for(int j = 0; j < 9; j++){				square[i][j].setFont(new Font("Arial", Font.BOLD, (pav / 15) * 10));			}	}		public void addToGame(int number, int index){		int[] kout = Convert.indexToKoutia(index);		square[kout[0]][kout[1]].setText(String.valueOf(number));		square[kout[0]][kout[1]].animate();		square[kout[0]][kout[1]].setForeground(Color.BLACK);		game.add(number, index);		undoStack.add(new GameAction(GameAction.ADDITION, index, number));		if(game.checkFull()){			mStatus.stopTimer();			doParty();		}else			setBackground(panelBackColor);	}		public void removeFromGame(int index, MSquare ob){		ob.setText("");		ob.setForeground(Color.BLACK);		undoStack.add(new GameAction(GameAction.REMOVAL, index, game.get(index)));		game.remove(index);		if(!game.checkFull())			setBackground(panelBackColor);	}		public void addToGameNoUndo(int number, int index){		int[] kout = Convert.indexToKoutia(index);		square[kout[0]][kout[1]].setText(String.valueOf(number));		square[kout[0]][kout[1]].animate();		square[kout[0]][kout[1]].setForeground(Color.BLACK);		game.add(number, index);		if(game.checkFull()){			mStatus.stopTimer();			doParty();		}else			setBackground(panelBackColor);	}	public void removeFromGameNoUndo(int index){		int[] kout = Convert.indexToKoutia(index);		MSquare ob = square[kout[0]][kout[1]];		ob.setText("");		ob.setForeground(Color.BLACK);		game.remove(index);		if(!game.checkFull())			setBackground(panelBackColor);	}		public void undo(){		GameAction ga = null;		if(!undoStack.isEmpty()){			ga = undoStack.pop();			redoStack.push(ga);			switch(ga.getAction()){			case GameAction.ADDITION:				removeFromGameNoUndo(ga.getIndex());				break;			case GameAction.REMOVAL:				addToGameNoUndo(ga.getNumber(), ga.getIndex());				break;			}		}	}		public void redo(){		GameAction ga = null;		if(!redoStack.isEmpty()){			ga = redoStack.pop();			undoStack.push(ga);			switch(ga.getAction()){			case GameAction.ADDITION:				addToGameNoUndo(ga.getNumber(), ga.getIndex());				break;			case GameAction.REMOVAL:				removeFromGameNoUndo(ga.getIndex());				break;			}		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -