LinkFrame.java
上传用户:jennyfly
上传日期:2021-08-10
资源大小:735k
文件大小:5k
源码类别:

游戏

开发平台:

Java

  1. package view;
  2. import javax.swing.*;
  3. import model.*;
  4. import java.awt.event.WindowListener;
  5. import java.awt.Container;
  6. import java.awt.Dimension;
  7. import java.awt.Toolkit;
  8. import java.util.Observable;
  9. import java.util.Observer;
  10. import javax.swing.JFrame; //设置皮肤
  11. import com.incors.plaf.alloy.AlloyLookAndFeel;
  12. import control.Control;
  13. /**
  14.  * 程序的主窗口,引入了一款皮肤
  15.  * 
  16.  * @author 何晓飞
  17.  * @version 2.0
  18.  */
  19. public class LinkFrame extends JFrame implements Observer {
  20. /* 序列号 */
  21. private static final long serialVersionUID = 1L;
  22. /**
  23.  * main函数设置了游戏界面的皮肤,同时创建了一个JFrame 将面板内容植入。 设置了界面 的初始位置和大小以及关闭窗口的方式。
  24.  */
  25. public static void main(String args[]) {
  26. setSkin();
  27. /* 创建一个model对象 */
  28. Model model = new Model();
  29. /* 创建一个control对象 */
  30. Control control = new Control(model);
  31. /* 创建一个窗口 */
  32. LinkFrame linkFrame = new LinkFrame(model, control);
  33. /* 为窗口添加监听 */
  34. linkFrame.addController(control);
  35. /* 为窗口添加观察者 */
  36. model.addObserver(linkFrame);
  37. // 创建一个dimension对象存储屏幕大小
  38. Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
  39. /* 读取窗口位置信息为空则给窗口一个默认的位置 */
  40. if (model.getLocation() == null)
  41. linkFrame.setLocation(screenSize.width / 2 - linkFrame.getWidth()
  42. / 2, screenSize.height / 2 - linkFrame.getHeight() / 2
  43. - 100);
  44. else
  45. /* 不为空的话则按读取的数据设置窗口位置 */
  46. linkFrame.setLocation(model.getLocation());
  47. /* 锁定窗口 */
  48. linkFrame.setResizable(false);
  49. /* 关闭窗口方式 */
  50. linkFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  51. /* 自动调整各组件 */
  52. linkFrame.pack();
  53. /* 设置可见 */
  54. linkFrame.setVisible(true);
  55. }
  56. /**
  57.  * 设置皮肤
  58.  */
  59. private static void setSkin() {
  60. try {
  61. // 引入外部皮肤并设置为游戏的皮肤
  62. AlloyLookAndFeel.setProperty("alloy.isSandbox", "true");
  63. AlloyLookAndFeel.setProperty("alloy.isLookAndFeelFrameDecoration",
  64. "true");
  65. UIManager.setLookAndFeel("com.incors.plaf.alloy.AlloyLookAndFeel");
  66. } catch (Exception e) {
  67. e.printStackTrace();
  68. }
  69. }
  70. /* 选项面板也是程序的初始界面 */
  71. Model model;
  72. Control control;
  73. private OptionBoard ob;
  74. private PlayBoard pb;
  75. private Container c;
  76. /**
  77.  * Login 的构造函数
  78.  * 
  79.  * @param content
  80.  *            initPanel实例
  81.  * @param loginSound
  82.  *            sound实例
  83.  */
  84. public LinkFrame(Model model, Control control) {
  85. /* 标题 */
  86. super("连  连  看");
  87. /* 大小 */
  88. setSize(820, 553);
  89. /* 窗口关闭方式 */
  90. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  91. this.model=model;
  92. this.control=control;
  93. ob=new OptionBoard();
  94. ob.addController(control);
  95. pb=new PlayBoard(model);
  96. pb.addController(control);
  97. /* 为面板添加观察者 */
  98. model.addObserver(pb);
  99. c=this.getContentPane();
  100. c.add(pb);
  101. c.add(ob);
  102.         turnTo("ob");
  103. }
  104. /**
  105.  * 为程序添加监听器
  106.  * 
  107.  * @param obj
  108.  *            一个监听器对象
  109.  */
  110. public void addController(Object obj) {
  111. if (obj instanceof WindowListener) {
  112. addWindowListener((WindowListener) obj);
  113. }
  114. }
  115. private void turnTo(String name) {
  116. if(name.equals("pb")){
  117. ob.setVisible(false);
  118. pb.setVisible(true);
  119. }
  120. else if(name.equals("ob")){
  121. pb.setVisible(false);
  122. ob.setVisible(true);
  123. model.IsPlaying=false;
  124. }
  125. c=getContentPane();
  126. c.repaint();
  127. }
  128. /**
  129.  * 对所有与切换界面有关的消息进行响应
  130.  */
  131. public void update(Observable obs, Object obj) {
  132. if(obj instanceof String){
  133. String notice=(String)obj;
  134. if(notice.equals("enter")){
  135. model.restartGame();
  136. turnTo("pb");
  137. }
  138. else if(notice.equals("load")){
  139. State s=model.loadGameData();
  140. if(s!=null){
  141. int level=s.getLevel();
  142. int response = JOptionPane
  143. .showConfirmDialog(null, "上次保存的是第" + level + "关,确定要继续吗?",
  144. "   请 确 认", JOptionPane.YES_NO_OPTION,
  145. JOptionPane.QUESTION_MESSAGE);
  146. if (response == JOptionPane.YES_OPTION) {
  147. model.setPictureFile(s.getPictureFile());
  148. model.setMusic(s.getGameMusic());
  149. model.setLevel(level);
  150. model.setCurrentScore(s.getScore());
  151. model.setLastScore(s.getScore());
  152. model.loadGame();
  153. turnTo("pb");
  154. }
  155. } else {
  156. JOptionPane.showMessageDialog(null, "无存档游戏!");
  157. }
  158. }
  159. else if(notice.equals("cancel")){
  160. int response = JOptionPane.showConfirmDialog(null, "真的要退出吗?",
  161. "   请 确 认", JOptionPane.YES_NO_OPTION,
  162. JOptionPane.QUESTION_MESSAGE);
  163. if (response == JOptionPane.YES_OPTION) {
  164. System.exit(0);
  165. }
  166. }
  167. else if(notice.equals("back")){
  168. turnTo("ob");
  169. }
  170. }
  171. }
  172. }