Java saolei.txt
上传用户:fuelmate
上传日期:2021-07-26
资源大小:3k
文件大小:13k
源码类别:

游戏

开发平台:

Java

  1. //package com.makoto.MineSweeping; 
  2. import java.awt.*; 
  3. import java.awt.event.*; 
  4. import java.awt.geom.*; 
  5. import java.awt.image.*; 
  6. import java.util.*; 
  7. import javax.swing.*; 
  8. import java.io.*; 
  9. import javax.imageio.*; 
  10. import javax.swing.border.*; 
  11. class MineSweeping extends JFrame{ 
  12. private ResourceBundle bundle; 
  13. private Hashtable numIcons; 
  14. private Hashtable statusIcons; 
  15. private Hashtable bomIcons; 
  16. private String numIconResource = "numIcons"; 
  17. private String statusIconResource = "statusIcons"; 
  18. private String bomIconResource = "bomIcons"; 
  19. private String menuResource = "menu"; 
  20. private String toolBarResource = "toolBar"; 
  21. private String menuSuffix = "Menu"; 
  22. private String labelSuffix = "Label"; 
  23. private String imageSuffix = "Image"; 
  24. private String resetActionName = "reset"; 
  25. private String optionsActionName = "options"; 
  26. private Action[] defaultActions = { 
  27.   new ResetAction(), 
  28.   new OptionsAction(), 
  29.   new AboutAction() 
  30.  }; 
  31.  private Hashtable ActionTable = new Hashtable(); 
  32. private Hashtable menuItems = new Hashtable(); 
  33. private Hashtable toolBarButtons = new Hashtable(); 
  34. private Hashtable regionsTable; 
  35. private ArrayList regionsList; 
  36. private JPanel mineArea = new JPanel(); 
  37. private JDialog aboutBox; 
  38. private Options options = new Options(this); 
  39. private int XSize = 20; 
  40. private int YSize = 20; 
  41. private int bom = 50; 
  42. private int currentBom = 0; 
  43. private int flag = 0; 
  44. public int MAX_XSIZE = 30; 
  45. public int MAX_YSIZE = 30; 
  46. public MineSweeping(){ 
  47. bundle = getResourceBundle(); 
  48. numIcons = createIcons(numIconResource); 
  49. statusIcons = createIcons(statusIconResource); 
  50. bomIcons = createIcons(bomIconResource); 
  51. for(int i = 0;i < defaultActions.length;i++){ 
  52. Action a = defaultActions[i]; 
  53.  ActionTable.put(a.getValue(Action.NAME), a); 
  54. setJMenuBar(createMenuBar(menuResource)); 
  55. add(mineArea,BorderLayout.CENTER); 
  56. add(createToolBar(toolBarResource),BorderLayout.NORTH); 
  57. createArea(); 
  58. setTitle(getString("title")); 
  59. pack(); 
  60. addWindowListener(new Closer()); 
  61. middle(this); 
  62. setVisible(true); 
  63. setResizable(false); 
  64. public static void main(String[] args){ 
  65. new MineSweeping(); 
  66. // ******************************************************* 
  67.  // ******************** Creates *********************** 
  68.  // ******************************************************* 
  69.  public JPanel createToolBar(String resource){ 
  70.   JPanel toolBar = new JPanel(new FlowLayout(FlowLayout.CENTER)); 
  71.   String resources = getString(resource); 
  72.   String[] buttons = resources.split("\s"); 
  73. for(int i = 0;i < buttons.length;i++){ 
  74. JButton button = createToolBarButton(buttons[i]); 
  75. if(button != null) 
  76. toolBar.add(button); 
  77. return toolBar; 
  78.  } 
  79.   
  80.  public JButton createToolBarButton(String buttonName){ 
  81. JButton button = new JButton(new ImageIcon(getString(buttonName + imageSuffix))); 
  82. button.setFocusPainted(false); 
  83. //button.setBorderPainted(false); 
  84. button.setContentAreaFilled(false); 
  85. if(buttonName.equals("reset")){ 
  86. button.setIcon((Icon)bomIcons.get("bomStart")); 
  87. Action action = getAction(buttonName); 
  88. if(action == null){ 
  89. button.setEnabled(false); 
  90. }else{ 
  91. button.addActionListener(action); 
  92. toolBarButtons.put(buttonName,button); 
  93. return button; 
  94.   
  95. public void createArea(){ 
  96. ((AbstractButton)toolBarButtons.get("reset")).setIcon((Icon)bomIcons.get("bomStart")); 
  97. if(XSize > MAX_XSIZE) 
  98. XSize = MAX_XSIZE; 
  99. if(YSize > MAX_YSIZE) 
  100. YSize = MAX_YSIZE; 
  101. mineArea.removeAll(); 
  102. regionsTable = new Hashtable(); 
  103. regionsList = new ArrayList(); 
  104. mineArea.setLayout(new GridLayout(YSize,XSize)); 
  105. for(int i = 0;i < YSize;i++){ 
  106. for(int j = 0;j < XSize;j++){ 
  107.  Region a = new Region(j,i); 
  108.  regionsTable.put(j + ":" + i,a); 
  109.  regionsList.add(a); 
  110. mineArea.add(a); 
  111. mineArea.revalidate(); 
  112. pack(); 
  113. createBoms(); 
  114. public void createBoms(){ 
  115. int[] boms = new int[bom]; 
  116. int m = bom; 
  117. boolean repeat = false; 
  118. int num = 0; 
  119. int index = 0; 
  120. currentBom = bom; 
  121. while(m > 0){ 
  122. num = (int)(Math.random() * (XSize * YSize)); 
  123. for(int i = 0;i < bom - m;i++){ 
  124. if(num == boms[i]) repeat = true; 
  125. if(!repeat){ 
  126. boms[bom - m] = num; 
  127. m--; 
  128. repeat = false; 
  129. for(int i = 0;i < boms.length;i++){ 
  130. ((Region)regionsList.get(boms[i])).isBom = true; 
  131. for(int i = 0;i < YSize;i++){ 
  132. for(int j = 0;j < XSize;j++){ 
  133. Region r = (Region)regionsTable.get(j + ":" + i); 
  134. ArrayList surround = getSurroundRegions(j,i); 
  135. int surroundNum = 0; 
  136. for(int n = 0;n < surround.size();n++){ 
  137. if(surround.get(n) != null) 
  138. surroundNum++; 
  139. int bnum =getNumOfBoms(surround); 
  140. r.round = bnum; 
  141. if(r.round == surroundNum&&r.isBom){ 
  142. r.isBom = false; 
  143. currentBom--; 
  144. flag = currentBom; 
  145. public Hashtable createIcons(String resource){ 
  146. String resources = getString(resource); 
  147. String[] icons=resources.split("\s"); 
  148. Hashtable table = new Hashtable(); 
  149. for(int i = 0;i < icons.length;i++){ 
  150. table.put(icons[i],new ImageIcon(getString(icons[i]))); 
  151. return table; 
  152. public JMenuBar createMenuBar(String resource){ 
  153. JMenuBar menuBar = new JMenuBar(); 
  154. String resources = getString(resource); 
  155. String[] menus=resources.split("\s"); 
  156. for(int i = 0;i < menus.length;i++){ 
  157. JMenu menu = createMenu(menus[i]); 
  158. if(menu != null) 
  159. menuBar.add(menu); 
  160. return menuBar; 
  161. public JMenu createMenu(String menuName){ 
  162. JMenu menu = new JMenu(getString(menuName + menuSuffix + labelSuffix)); 
  163. String resources = getString(menuName + menuSuffix); 
  164. String[] items=resources.split("\s"); 
  165. for(int i = 0;i < items.length;i++){ 
  166. JMenuItem item = createMenuItem(items[i]); 
  167. if(item != null) 
  168. menu.add(item); 
  169. return menu; 
  170. public JMenuItem createMenuItem(String itemName){ 
  171. JMenuItem item = new JMenuItem(getString(itemName + labelSuffix)); 
  172. Action action = getAction(itemName); 
  173. if(action == null){ 
  174. item.setEnabled(false); 
  175. }else{ 
  176. item.addActionListener(action); 
  177. menuItems.put(itemName,item); 
  178. return item; 
  179. // ******************************************************* 
  180.  // ******************** Gets *********************** 
  181.  // ******************************************************* 
  182.   
  183.  public Action getAction(String name){ 
  184.   return (Action)ActionTable.get(name); 
  185.  } 
  186. public ArrayList getSurroundRegions(int x,int y){ 
  187. ArrayList surroundRegions = new ArrayList(); 
  188. surroundRegions.add(regionsTable.get(x + ":" + (y + 1))); 
  189. surroundRegions.add(regionsTable.get(x + ":" + (y - 1))); 
  190. surroundRegions.add(regionsTable.get((x + 1) + ":" + (y + 1))); 
  191. surroundRegions.add(regionsTable.get((x + 1) + ":" + y)); 
  192. surroundRegions.add(regionsTable.get((x + 1) + ":" + (y - 1))); 
  193. surroundRegions.add(regionsTable.get((x - 1) + ":" + (y + 1))); 
  194. surroundRegions.add(regionsTable.get((x - 1) + ":" + y)); 
  195. surroundRegions.add(regionsTable.get((x - 1) + ":" + (y - 1))); 
  196. return surroundRegions; 
  197. public int getNumOfBoms(ArrayList regions){ 
  198. int boms = 0; 
  199. for(int i = 0;i < regions.size();i++){ 
  200. Region region = (Region)regions.get(i); 
  201. if(region != null){ 
  202. if(region.isBom){ 
  203. boms++; 
  204. return boms; 
  205. /** 
  206.  * Returns the resource bundle associated with this program. Used 
  207.  * to get accessable and internationalized strings. 
  208.  */ 
  209.  public ResourceBundle getResourceBundle() { 
  210. if(bundle == null) { 
  211.  bundle = ResourceBundle.getBundle("resources.minesweeping"); 
  212. return bundle; 
  213.  } 
  214.  /** 
  215.  * This method returns a string from the demo's resource bundle. 
  216.  */ 
  217.  public String getString(String key) { 
  218. String value = null; 
  219. try { 
  220.  value = getResourceBundle().getString(key); 
  221. } catch (MissingResourceException e) { 
  222.  System.out.println("java.util.MissingResourceException: Couldn't find value for: " + key); 
  223. return value; 
  224.  } 
  225.   
  226.  protected Frame getFrame() { 
  227. for (Container p = getParent(); p != null; p = p.getParent()) { 
  228.  if (p instanceof Frame) { 
  229. return (Frame) p; 
  230.  } 
  231. return null; 
  232.  } 
  233.   
  234.  public int getXSize(){ 
  235.   return XSize; 
  236.  } 
  237.   
  238.  public int getYSize(){ 
  239.   return YSize; 
  240.  } 
  241.   
  242.  public int getBom(){ 
  243.   return bom; 
  244.  } 
  245.   
  246.  public void middle(Component component){ 
  247. Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
  248.  Dimension frameSize = component.getSize(); 
  249.  component.setLocation((screenSize.width-frameSize.width)/2,(screenSize.height-frameSize.height)/2); 
  250.   
  251.  public void openSurround(Region region){ 
  252.   ArrayList stack = new ArrayList(); 
  253. stack.add(region); 
  254. while(stack.size() > 0){ 
  255. Region sr = (Region)stack.get(stack.size() - 1); 
  256. stack.remove(stack.size() - 1); 
  257. ArrayList surroundRegions = getSurroundRegions(sr.x,sr.y); 
  258. for(int i = 0;i < surroundRegions.size();i++){ 
  259. Region rr = (Region)surroundRegions.get(i); 
  260. if(rr != null){ 
  261. if(!rr.isOpened){ 
  262. if(rr.isTaked) 
  263. flag++; 
  264. rr.open(); 
  265. if(rr.round == 0) 
  266. stack.add(rr); 
  267.  } 
  268.   
  269.  public void bomWin(){ 
  270.   ((AbstractButton)toolBarButtons.get("reset")).setIcon((Icon)bomIcons.get("bomWin")); 
  271.   for(int i = 0;i < regionsList.size();i++){ 
  272.   ((Region)regionsList.get(i)).open(); 
  273.   } 
  274.  } 
  275.   
  276.  public void bomLoss(){ 
  277.   ((AbstractButton)toolBarButtons.get("reset")).setIcon((Icon)bomIcons.get("bomLoss")); 
  278.   for(int i = 0;i < regionsList.size();i++){ 
  279.   ((Region)regionsList.get(i)).open(); 
  280.   } 
  281.  } 
  282.   
  283.  // ******************************************************* 
  284.  // ******************** Sets *********************** 
  285.  // ******************************************************* 
  286.   
  287.  public void setXSize(int XSize){ 
  288.   this.XSize = XSize; 
  289.  } 
  290.   
  291.  public void setYSize(int YSize){ 
  292.   this.YSize = YSize; 
  293.  } 
  294.   
  295.  public void setBom(int bom){ 
  296.   this.bom = bom; 
  297.  } 
  298.   
  299.  // ******************************************************* 
  300.  // ******************** Actions *********************** 
  301.  // ******************************************************* 
  302.   
  303.  class ResetAction extends AbstractAction { 
  304. ResetAction() { 
  305.  super(resetActionName); 
  306.  public void actionPerformed(ActionEvent e) { 
  307.   ((AbstractButton)toolBarButtons.get("reset")).setIcon((Icon)bomIcons.get("bomStart")); 
  308.  createArea(); 
  309.  } 
  310.  } 
  311.   
  312.  class OptionsAction extends AbstractAction { 
  313. OptionsAction() { 
  314.  super(optionsActionName); 
  315.  public void actionPerformed(ActionEvent e) { 
  316.   options.setLocationRelativeTo(MineSweeping.this); 
  317.   options.show(); 
  318.  } 
  319.  } 
  320. private class AboutAction extends AbstractAction { 
  321. AboutAction() { 
  322.  super("about"); 
  323.  } 
  324. public void actionPerformed(ActionEvent e) { 
  325. if(aboutBox == null){ 
  326. AboutPanel panel = new AboutPanel(getString("AboutBox.icon")); 
  327. panel.setLayout(new BorderLayout()); 
  328. aboutBox = new JDialog(getFrame(), getString("AboutBox.title"), false); 
  329.  aboutBox.setResizable(false); 
  330. aboutBox.getContentPane().add(panel, BorderLayout.CENTER); 
  331. JPanel buttonpanel = new JPanel(); 
  332.  buttonpanel.setBorder(new javax.swing.border.EmptyBorder(0, 0, 3, 0)); 
  333. buttonpanel.setOpaque(false); 
  334. JButton button = (JButton) buttonpanel.add(new JButton(getString("AboutBox.ok_button_text"))); 
  335. panel.add(buttonpanel, BorderLayout.SOUTH); 
  336. button.addActionListener(new OkAction(aboutBox)); 
  337. aboutBox.pack(); 
  338. aboutBox.setLocationRelativeTo(MineSweeping.this); 
  339.   
  340.   
  341.   
  342.  aboutBox.show(); 
  343.  } 
  344.  } 
  345. private class OkAction extends AbstractAction { 
  346. JDialog aboutBox; 
  347.  protected OkAction(JDialog aboutBox) { 
  348.  super("OkAction"); 
  349.   this.aboutBox = aboutBox; 
  350.  } 
  351.  public void actionPerformed(ActionEvent e) { 
  352.   aboutBox.setVisible(false); 
  353.  } 
  354.  protected static final class Closer extends WindowAdapter { 
  355.  public void windowClosing(WindowEvent e) { 
  356.  System.exit(0); 
  357.  } 
  358.  // ******************************************************* 
  359.  // ******************** InnerClasses ****************** 
  360.  // ******************************************************* 
  361.  class Region extends JLabel{ 
  362. int x; 
  363. int y; 
  364. int round = 0; 
  365. boolean isBom = false; 
  366. boolean isTaked = false; 
  367. boolean isOpened = false; 
  368. MineSweeping mineSweeping; 
  369. public Region(int x,int y){ 
  370. this.x = x; 
  371. this.y = y; 
  372. this.mineSweeping = mineSweeping; 
  373. setIcon((Icon)statusIcons.get("status1Icon")); 
  374. addMouseListener(new MouseAdapter() { 
  375. public void mousePressed(MouseEvent e){ 
  376. if(!isOpened){ 
  377. setIcon((Icon)statusIcons.get("status2Icon")); 
  378. public void mouseReleased(MouseEvent e){ 
  379. if(!isOpened){ 
  380. if(e.getButton() == 3){ 
  381. setIcon((Icon)statusIcons.get("status1Icon")); 
  382.  sign(); 
  383.  } 
  384.  else{ 
  385.   if(isBom){ 
  386.   bomWin(); 
  387.   } 
  388.   else{ 
  389.   open(); 
  390.   if(round == 0){ 
  391.   openSurround(Region.this); 
  392.   } 
  393.   } 
  394. }); 
  395. public void open(){ 
  396. if(!isOpened){ 
  397. isOpened = true; 
  398. if(isBom){ 
  399. setIcon((Icon)statusIcons.get("status4Icon")); 
  400. if(isTaked){ 
  401. setIcon((Icon)statusIcons.get("status5Icon")); 
  402. else{ 
  403. setIcon((Icon)numIcons.get("num" + round + "Icon")); 
  404. public void sign(){ 
  405. if(!isTaked){ 
  406. if(flag > 0){ 
  407. setIcon((Icon)statusIcons.get("status3Icon")); 
  408. flag--; 
  409. isTaked = true; 
  410. if(isBom){ 
  411. currentBom--; 
  412. if(currentBom < 1) 
  413. bomLoss(); 
  414. else{ 
  415. setIcon((Icon)statusIcons.get("status1Icon")); 
  416. isTaked = false; 
  417. flag++; 
  418. if(isBom){ 
  419. currentBom++; 
  420. }
  421.