[Java] java 开窗户游戏(点击一个块,自身和周围的四个块变颜色,直到所有窗口打开) →→→→→进入此内容的聊天室

来自 , 2020-10-16, 写在 Java, 查看 148 次.
URL http://www.code666.cn/view/c5ab0bc6
  1. import java.awt.BorderLayout;
  2. import java.awt.Color;
  3. import java.awt.Dimension;
  4. import java.awt.GridLayout;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7.  
  8. import javax.swing.JButton;
  9. import javax.swing.JFrame;
  10. import javax.swing.JLabel;
  11. import javax.swing.JOptionPane;
  12. import javax.swing.JPanel;
  13.  
  14. /**
  15.  * 开窗户游戏。当你点击游戏界面中的一个正方形按钮时, 它周围的正方形按钮的颜色就会发生变化,当全部正方形按钮的颜色变为一色时,你就胜利了
  16.  */
  17. public class OpenWindows {
  18.         public static void main(String[] args) {
  19.                 JFrame frame = new JFrame("开窗户游戏");
  20.                 frame.getContentPane().add(new MainPanel());
  21.                 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  22.                 frame.pack();
  23.                 frame.setVisible(true);
  24.         }
  25. }
  26.  
  27. /**
  28.  * 主面板
  29.  */
  30. class MainPanel extends JPanel {
  31.         SquarePanel pc = new SquarePanel();
  32.         ControlPanel ps = new ControlPanel(pc);
  33.  
  34.         public MainPanel() {
  35.                 this.setLayout(new BorderLayout());
  36.                 this.add(pc, "Center");
  37.                 this.add(ps, "South");
  38.         }
  39. }
  40.  
  41. /**
  42.  * 方块的面板
  43.  */
  44. class SquarePanel extends JPanel {
  45.         // 包括25个窗户按钮
  46.         JButton[] winbutton = new JButton[25];
  47.         Color c;
  48.  
  49.         public SquarePanel() {
  50.                 // 面板采用网格布局管理器
  51.                 this.setLayout(new GridLayout(5, 5));
  52.                 for (int i = 0; i < 25; i++) {
  53.                         winbutton[i] = new JButton();
  54.                         winbutton[i].setActionCommand(String.valueOf(i));
  55.                         // 获得默认颜色
  56.                         c = winbutton[i].getBackground();
  57.                         winbutton[i].addActionListener(new OpenWindowListener());
  58.                         this.add(winbutton[i]);
  59.                 }
  60.                 // 面板大小值为300*300
  61.                 this.setPreferredSize(new Dimension(300, 300));
  62.         }
  63.  
  64.         /**
  65.          * 单击一个窗户按钮时引起开窗户事件
  66.          */
  67.         class OpenWindowListener implements ActionListener {
  68.                 public void actionPerformed(ActionEvent a) {
  69.                         // 获取被点击窗户的ID
  70.                         int x = Integer.parseInt(a.getActionCommand());
  71.                         // 设置被点击窗户被选。
  72.                         select(x);
  73.                         // 判断是否胜利
  74.                         isWin();
  75.                 }
  76.  
  77.                 // 当一个窗户被选中时进行的操作。需要改变周围窗户的颜色。
  78.                 private void select(int x) {
  79.                         if (x == 0) {
  80.                                 changeColor(winbutton[x]);
  81.                                 changeColor(winbutton[x + 1]);
  82.                                 changeColor(winbutton[x + 5]);
  83.                         } else if (x > 0 && x < 4) {
  84.                                 changeColor(winbutton[x]);
  85.                                 changeColor(winbutton[x - 1]);
  86.                                 changeColor(winbutton[x + 1]);
  87.                                 changeColor(winbutton[x + 5]);
  88.                         } else if (x == 4) {
  89.                                 changeColor(winbutton[x]);
  90.                                 changeColor(winbutton[x - 1]);
  91.                                 changeColor(winbutton[x + 5]);
  92.                         } else if (x == 20) {
  93.                                 changeColor(winbutton[x]);
  94.                                 changeColor(winbutton[x - 5]);
  95.                                 changeColor(winbutton[x + 1]);
  96.                         } else if (x == 24) {
  97.                                 changeColor(winbutton[x]);
  98.                                 changeColor(winbutton[x - 5]);
  99.                                 changeColor(winbutton[x - 1]);
  100.                         } else if (x > 20 && x < 24) {
  101.                                 changeColor(winbutton[x]);
  102.                                 changeColor(winbutton[x - 5]);
  103.                                 changeColor(winbutton[x - 1]);
  104.                                 changeColor(winbutton[x + 1]);
  105.                         } else if (x % 5 == 0) {
  106.                                 changeColor(winbutton[x]);
  107.                                 changeColor(winbutton[x - 5]);
  108.                                 changeColor(winbutton[x + 1]);
  109.                                 changeColor(winbutton[x + 5]);
  110.                         } else if (x % 5 == 4) {
  111.                                 changeColor(winbutton[x]);
  112.                                 changeColor(winbutton[x - 5]);
  113.                                 changeColor(winbutton[x - 1]);
  114.                                 changeColor(winbutton[x + 5]);
  115.                         } else {
  116.                                 changeColor(winbutton[x]);
  117.                                 changeColor(winbutton[x - 5]);
  118.                                 changeColor(winbutton[x - 1]);
  119.                                 changeColor(winbutton[x + 1]);
  120.                                 changeColor(winbutton[x + 5]);
  121.                         }
  122.                 }
  123.  
  124.                 // 改变周围颜色函数。
  125.                 private void changeColor(JButton winbutton) {
  126.                         // 如果窗户的颜色是初始颜色,则变成白色。
  127.                         if (winbutton.getBackground() == c) {
  128.                                 winbutton.setBackground(Color.white);
  129.                         } else {
  130.                                 // 如果窗户的颜色不是初始颜色,则变成初始颜色
  131.                                 winbutton.setBackground(c);
  132.                         }
  133.                 }
  134.  
  135.                 // 判断是否胜出
  136.                 private void isWin() {
  137.                         int a = 1;
  138.                         // 当25个窗户都变成白色时,获胜
  139.                         for (int i = 0; i < 25; i++) {
  140.                                 if (winbutton[i].getBackground() == Color.white) {
  141.                                         a++;
  142.                                 }
  143.                         }
  144.                         if (a > 25) {
  145.                                 JOptionPane.showMessageDialog(null, "恭喜过关");
  146.                         }
  147.                 }
  148.         }
  149. }
  150.  
  151. /**
  152.  * 控制面板
  153.  */
  154. class ControlPanel extends JPanel {
  155.         JLabel label = new JLabel("开窗户游戏");
  156.         // 游戏重新开始按钮
  157.         JButton restart = new JButton("重置");
  158.         SquarePanel pc;
  159.  
  160.         /**
  161.          * 构造函数,参数为待控制的窗户面板
  162.          */
  163.         public ControlPanel(SquarePanel pc) {
  164.                 this.pc = pc;
  165.                 restart.addActionListener(new Reset());
  166.                 this.add(label);
  167.                 this.add(restart);
  168.         }
  169.  
  170.         /**
  171.          * 重设窗户面板,将所有窗户变成初始颜色
  172.          */
  173.         class Reset implements ActionListener {
  174.                 public void actionPerformed(ActionEvent a) {
  175.                         for (int i = 0; i < 25; i++) {
  176.                                 pc.winbutton[i].setBackground(pc.c);
  177.                         }
  178.                 }
  179.         }
  180. }
  181.  

回复 "java 开窗户游戏(点击一个块,自身和周围的四个块变颜色,直到所有窗口打开)"

这儿你可以回复上面这条便签

captcha