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

📄 ui.java

📁 eclipse下面实现的java扫雷游戏
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	}

	public Model getModel() {
		return model;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.util.Observer#update(java.util.Observable, java.lang.Object)
	 */
	public void update(Observable o, Object arg) {
		//NotifingObject notifingObject = (NotifingObject)arg;

		int type = ((NotifingObject) arg).getType();

		switch (type) {
		case NotifingObject.TYPE_CELLCHANGED:
			Location location = ((CellNotifingObject) arg).getLocation();
			cellChanged(location);
			break;
		case NotifingObject.TYPE_RESTART:
			restart(model.getWidth(), model.getHeight(), model.getMineNumber(),
					model.getType());
			break;
		case NotifingObject.TYPE_GAMEOVER:
			gameOver();
			break;
		case NotifingObject.TYPE_WIN:
			win();
			break;
		case NotifingObject.TYPE_TIME:
			time.setNumber(String.valueOf(model.getTime()));
			time.repaint();
			//			System.out.println(model.getTime());
			break;
		default:
			break;
		}
	}

	private void win() {

		Location location;
		if (model.getMarkedMineNumber() != model.getMineNumber()) {
			for (int y = 0; y != height; ++y) {
				for (int x = 0; x != width; ++x) {
					location = new Location(x, y);
					if (model.isMine(location)) {
						drawImage(Images.MARKED_MINE, location);
					}
				}
			}
		}
		this.mineNumberLabel.setNumber("0");
		updateImage();
		int type = model.getType();
		switch (type) {
		case Model.TYPE_EASY:
			if (score[0] > model.getTime()) {
				if (breakRecord == null) {
					breakRecord = new BreakRecordDialog(mainFrame,
							BreakRecordDialog.BREAK);
				}
				if (breakRecord.show(model.getTime())) {
					userNames[0] = breakRecord.getUserName();
					score[0] = model.getTime();
				}
			}
			break;
		case Model.TYPE_HARD:
			if (score[1] > model.getTime()) {
				if (breakRecord == null) {
					breakRecord = new BreakRecordDialog(mainFrame,
							BreakRecordDialog.BREAK);
				}
				if (breakRecord.show(model.getTime())) {
					userNames[1] = breakRecord.getUserName();
					score[1] = model.getTime();
				}
			}
			break;
		case Model.TYPE_HELL:
			if (score[2] > model.getTime()) {
				if (breakRecord == null) {
					breakRecord = new BreakRecordDialog(mainFrame,
							BreakRecordDialog.BREAK);
				}
				if (breakRecord.show(model.getTime())) {
					userNames[2] = breakRecord.getUserName();
					score[2] = model.getTime();
				}
			}
			break;
		default:
			new BreakRecordDialog(mainFrame, BreakRecordDialog.JUST_WIN)
					.show(model.getTime());
		}
	}

	private void restart(int width, int height, int mineNumber, int type) {

		if (this.width == width && this.height == height) {
			int x = 0;
			int y = 0;

			for (x = 0; x != width; ++x)
				for (y = 0; y != height; ++y)
					drawImage(Images.UNCLICKED, x, y);

			updateImage();
			time.setNumber("0");
			mineNumberLabel.setNumber(String.valueOf(model.getMineNumber()));
	
			mark.setSelected(model.isMenuMarkSelected());
			return;
		}

		this.width = width;
		this.height = height;

		mainFrame.setSize(margin * 2 + width * buttonSize + 4, headHeight
				+ margin + menuBarHeight + height * buttonSize + 30);

		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

		mainFrame.setLocation((screenSize.width - mainFrame.getWidth()) / 2,
				(screenSize.height - mainFrame.getHeight()) / 2);

		start.setBounds((mainFrame.getWidth() - startButtonSize) / 2,
				(headHeight - startButtonSize) / 2, startButtonSize,
				startButtonSize);		
		mainFrame.setVisible(true);
		mineNumberLabel.fitSizeToFont();
		time.fitSizeToFont();
		mineNumberLabel.setLocation(margin+5, (headHeight - mineNumberLabel
				.getHeight()) / 2);

		time.setLocation(mainFrame.getWidth() - margin - 7
				- time.getWidth(),
				(headHeight - time.getHeight()) / 2);
		
		Image imageBoard = gameImagePanel.createImage(buttonSize * width,
				buttonSize * height);

		g2 = (Graphics2D) imageBoard.getGraphics();
		gameImagePanel.setImageBoard(imageBoard);
		gameImagePanel.setX(margin);
		gameImagePanel.setY(headHeight);

		gameImagePanel.setEdge(2);

		int x = 0;
		int y = 0;

		for (y = 0; y != height; y++) {
			for (x = 0; x != width; x++) {
				drawImage(Images.UNCLICKED, x, y);
			}
		}

		updateImage();

		time.setNumber("0");
		mineNumberLabel.setNumber(String.valueOf(model.getMineNumber()));

		switch (type) {
		case Model.TYPE_EASY:
			easy.setSelected(true);
			break;
		case Model.TYPE_HARD:
			hard.setSelected(true);
			break;
		case Model.TYPE_HELL:
			hell.setSelected(true);
			break;
		case Model.TYPE_CUSTOM:
			custom.setSelected(true);
			break;
		}
	
		mark.setSelected(model.isMenuMarkSelected());
	}

	private void cellChanged(Location location) {
		//		MyButton button = jLabelButtons[location.y][location.x];
		if (model.isClickedButton(location)) {
			if (model.isNumber(location)) {
				//				button.setIcon(Images.number[model.getValue(location) - 1]);
				drawImage(Images.number[model.getValue(location) - 1], location);
			} else {
				//				button.setIcon(Images.CLICKED);
				drawImage(Images.CLICKED, location);
			}
		} else if (model.isMark(location)) {
			//			button.setIcon(Images.MARKED);
			drawImage(Images.MARKED, location);
		} else if (model.isMarkedMine(location)) {
			//			button.setIcon(Images.MARKED_MINE);
			drawImage(Images.MARKED_MINE, location);
		} else {
			//			button.setIcon(Images.UNCLICKED);
			drawImage(Images.UNCLICKED, location);
		}
		mineNumberLabel.setNumber(String.valueOf(model.getMineNumber()
				- model.getMarkedMineNumber()));
		mineNumberLabel.repaint();

	}

	private void gameOver() {
		Location location;

		for (int y = 0; y != height; ++y) {
			for (int x = 0; x != width; ++x) {

				location = new Location(x, y);
				if (model.isMine(location) && model.isClickedButton(location)) {
					//					jLabelButtons[y][x].setIcon(Images.MINE_BLAST);
					drawImage(Images.MINE_BLAST, location);
				} else if (!model.isMine(location)
						&& model.isMarkedMine(location)) {
					//					jLabelButtons[y][x].setIcon(Images.MINE_WRONG)
					drawImage(Images.MINE_WRONG, location);
				} else if (model.isMine(location)) {
					//					jLabelButtons[y][x].setIcon(Images.MINE);
					drawImage(Images.MINE, location);
				} 
			}
		}
		updateImage();
	}

	public void clearRecord() {
		int length = userNames.length;
		for (int i = 0; i != length; i++) {
			userNames[i] = "Unknow Name";
			score[i] = 999;
		}
	}

	public JMenuBar getMenuBar() {
		return jMenuBar;
	}

	//Variables declaration
	private final int buttonSize = 16;

	//	private final int bodyMarginNorth = 20;

	//	private final int bodyMarginOther = 12;

	private final int margin = 11;

	private final int headHeight = 80;

	private final int startButtonSize = 45;

	private final int menuBarHeight = 21;

	private int width;

	private int height;

	private int intMineNumber;

	private int buttonNumber;

	private JMenuBar jMenuBar;

	private JMenuItem about;

	//	private JPanel body;

	//	private Image imageBoard;

	private Graphics2D g2;

	private JMenuItem chinese;

	private JMenuItem contents;

	private JCheckBoxMenuItem custom;

	private JCheckBoxMenuItem easy;

	//private JRadioButtonMenuItem easy;
	private JMenuItem english;

	private JMenuItem exit;

	private JMenu game;

	private JCheckBoxMenuItem hard;

	//	private JPanel head;

	private JCheckBoxMenuItem hell;

	private JMenu help;

	private JSeparator jSeparator1;

	private JSeparator jSeparator2;

	private JSeparator jSeparator3;	

	private JMenu language;

	private JMenuItem load;

	//	private JLabel mineNumberLabel;
	private NumberLabel mineNumberLabel;

	private NumberLabel time;

	//	private JPanel mineNumberPanel;

	private JCheckBoxMenuItem music;
	
	private JCheckBoxMenuItem mark;

	private JMenuItem record;

	private JMenuItem save;

	private JMenu saveAndLoad;

	private JButton start;

	private JMenuItem startItem;

	//	private JPanel startPanel;

	//	private JLabel time;

	//	private JPanel timePanel;

	private BreakRecordDialog breakRecord;

	private JFrame mainFrame;

	private GameImagePanel gameImagePanel;

	//	private MyButton[][] jLabelButtons;

	private ButtonGroup group;

	private Model model;

	private CoreAction coreListener;

	private MenuAction menuListener;

	private HashMap menuItemMap;

	private String[] userNames;

	private int[] score;

	private SaveAndLoad io;

	private int imageX;

	private int imageY;

	//End of variables declaration
}

⌨️ 快捷键说明

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