diff --git a/MineSweeper.java b/MineSweeper.java new file mode 100644 index 0000000..b5b3781 --- /dev/null +++ b/MineSweeper.java @@ -0,0 +1,87 @@ +package source; + +import source.component.game.ControlPanel; +import source.component.game.GamePanel; +import source.component.menubar.MenuBar; +import source.resource.ConfigResolver; +import source.resource.Resource; +import source.util.Dragger; +import source.util.TaskExecutor; + +import javax.swing.*; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.util.Map; + +import static javax.swing.JFrame.EXIT_ON_CLOSE; + +/** + * 扫雷 | Minesweeper + */ +public class MineSweeper { + private final JFrame frame; + + private MineSweeper() { + frame = new JFrame(); + + appConfigure(); + frameSettings(); + + // handlers + Compatibility.init(frame); + Handler.init(frame); + + // menus + MenuBar menus = MenuBar.getInstance(); + Dragger.drag(frame, menus); + frame.setJMenuBar(menus); + + // panels + ControlPanel controlPanel = ControlPanel.getInstance(); + GamePanel gamePanel = GamePanel.getInstance(); + Dragger.drag(frame, controlPanel); + + frame.add(controlPanel); + frame.add(gamePanel); + + afterPreparation(); + + // shutdown tasks + frame.addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + TaskExecutor.shutdown(); + } + }); + } + + private void appConfigure() { + // UI settings + Map uiConfig = ConfigResolver.resolveOneLevelMap("ui"); + UIDefaults defaults = UIManager.getLookAndFeelDefaults(); + defaults.putAll(uiConfig); + uiConfig.clear(); + + // System settings + Map systemConfig = ConfigResolver.resolveMap("system"); + systemConfig.forEach((k, v) -> System.setProperty(k, v.toString())); + systemConfig.clear(); + } + + private void frameSettings() { + frame.setLocation(70, 80); + frame.setDefaultCloseOperation(EXIT_ON_CLOSE); + frame.setLayout(null); + frame.setTitle(Resource.getString("title")); + frame.setResizable(false); + } + + private void afterPreparation() { + Handler.getInstance().prepareGame(GameLevel.DEFAULT, true); + frame.setVisible(true); + } + + public static void main(String[] args) { + new MineSweeper(); + } +}