📄 ui.java
字号:
}
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 + -