拼图游戏来至开源中国社区

  1 import java.awt.BorderLayout;
  2 import java.awt.Component;
  3 import java.awt.Container;
  4 import java.awt.Dimension;
  5 import java.awt.Font;
  6 import java.awt.Graphics;
  7 import java.awt.GridBagConstraints;
  8 import java.awt.GridBagLayout;
  9 import java.awt.Image;
 10 import java.awt.image.BufferedImage;
 11 import java.awt.Point;
 12 import java.awt.event.ActionEvent;
 13 import java.awt.event.ActionListener;
 14 import java.awt.Toolkit;
 15 import java.io.*;
 16 import java.io.IOException;
 17 import java.util.Random;
 18 
 19 import javax.imageio.ImageIO;
 20 import javax.swing.ImageIcon;
 21 import javax.swing.JButton;
 22 import javax.swing.JFrame;
 23 import javax.swing.JMenu;
 24 import javax.swing.JMenuBar;
 25 import javax.swing.JMenuItem;
 26 import javax.swing.JOptionPane;
 27 import javax.swing.JPanel;
 28 import javax.swing.KeyStroke;
 29 import java.net.URL; 
 30 
 31 
 32 class J_JPanel extends JPanel
 33 {   
 34     /**
 35      * 
 36      */
 37     private static final long serialVersionUID = 1L;
 38     Image m_image;
 39     int showpicture=0;
 40     @SuppressWarnings("static-access")
 41     public J_JPanel()throws IOException
 42     {            J_Puzzle a = new J_Puzzle();
 43        if(a.changetime==-1)
 44            showpicture = 1;
 45             //File f = new File("src/"+"样图"+showpicture+".jpg");
 46                URL is= this.getClass().getResource("sample"+showpicture+".jpg"); 
 47                new ImageIcon(is);
 48             m_image = ImageIO.read(is);        
 49     }
 50     public void paintComponent(Graphics g)
 51     {            
 52         g.drawImage(m_image, 0, 0, 360, 360, this);
 53     } 
 54     
 55     
 56 }
 57 public class J_Puzzle extends JFrame implements ActionListener
 58 {  
 59     /**
 60      * 
 61      */
 62     private static final long serialVersionUID = 1L;
 63     int i,j;
 64     static int changetime = 0;
 65     Container c = getContentPane();
 66     JButton b[] = new JButton[16];
 67     ImageIcon ic[][] = new ImageIcon[2][15];
 68     public J_Puzzle() throws IOException
 69     {
 70             
 71         super("拼图小游戏");
 72         
 73         String pic_name[] = new String[15];
 74         for(i = 0;i < 2;i ++)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
 75           for(j = 0;j < 15;j  ++)
 76            {
 77              pic_name[j] = String.valueOf(j+1+i*15)+".jpg";
 78              URL is= this.getClass().getResource(pic_name[j]);
 79              ic[i][j] = new ImageIcon(is);
 80            }
 81         
 82         JMenuBar mBar = new JMenuBar();
 83         setJMenuBar(mBar);
 84         
 85         int k = 0;
 86        
 87         JMenu []m = {new JMenu("菜单(M)"),new JMenu("帮助(H)")};
 88         char mC[][] = {{'M','H'},{'S','X','C','Z'},{'E','T'}};
 89         JMenuItem mItem[][] = {{new JMenuItem("开始(S)"),new JMenuItem("重置(X)"),new JMenuItem("背景更换(C)"),new JMenuItem("退出(Z)")},{new JMenuItem("查看样图(E)"),new JMenuItem("关于(T)")}};
 90         for(i = 0;i < 2;i ++)
 91          {
 92             mBar.add(m[i]);
 93             m[i].setMnemonic(mC[0][i]);
 94             if(i==0)k = 0;
 95             else k = 1;
 96             for(j = 0;j < 4-i-k;j ++)
 97             { 
 98                 m[i].add(mItem[i][j]);
 99                 mItem[i][j].setMnemonic(mC[i+1][j]);
100                 mItem[i][j].setAccelerator(KeyStroke.getKeyStroke("ctrl"+mC[i+1][j]));
101                 mItem[i][j].addActionListener(new ActionListener(){
102 
103                     public void actionPerformed(ActionEvent e)
104                     {    
105                         JMenuItem mItem = (JMenuItem)e.getSource();
106                         if(mItem.getText().equalsIgnoreCase("重置(X)")||mItem.getText().equalsIgnoreCase("开始(S)"))
107                          {                                
108                         int    location[][] = {{17,13},{17,103},{17,193},{17,283},{107,13},{107,103},{107,193},{107,283}
109                                      ,{197,13},{197,103},{197,193},{197,283},{287,13},{287,103},{287,193},{287,283}};
110                         int rd_number[] = new int[16];                    
111                         rd_number = randomnumber();
112                         for(i = 1;i < 16;i ++)
113                             b[i].setLocation(location[rd_number[i-1]-1][0],location[rd_number[i-1]-1][1]);
114                          }
115                         else if(mItem.getText().equalsIgnoreCase("背景更换(C)"))
116                         {
117                             
118                             changetime++;
119                             for(i = 0;i < 15;i ++)
120                                 {
121                                 b[i+1].setIcon(null);                                
122                                 b[i+1].setIcon(ic[changetime][i]);
123                                 }
124                             if(changetime==1)
125                                 changetime = -1;
126                         }
127                         else if(mItem.getText().equalsIgnoreCase("退出(Z)"))
128                         {
129                             int a =  JOptionPane.showConfirmDialog(null, "您确定退出游戏?");
130                             if(a==0)
131                                 System.exit(0);
132                         }
133                         else if(mItem.getText().equalsIgnoreCase("查看样图(E)"))
134                         {
135                             
136                                 JFrame jj = new JFrame("样图");
137                                 jj.setSize(360, 360);
138                                 jj.setLocation(Toolkit.getDefaultToolkit().getScreenSize().width/3-360, 
139                                         Toolkit.getDefaultToolkit().getScreenSize().height/4);
140                                 jj.setVisible(true);
141                                 Container c1 = jj.getContentPane();
142                                 
143                                 try {
144                                     c1.add(new J_JPanel(),BorderLayout.CENTER);
145                                 }
146                                 catch (IOException e1) {
147                                     // TODO Auto-generated catch block
148                                     e1.printStackTrace();
149                                 }
150                         }
151                         if(mItem.getText().equalsIgnoreCase("关于(T)"))
152                         {
153                             JOptionPane.showMessageDialog(null, "简单拼图小游戏\n制作人:菜鸟");
154                         }
155                     
156                     }
157                         
158                 });
159             }
160             
161         }
162         m[0].insertSeparator(1);m[1].insertSeparator(1);
163             
164         GridBagLayout gr = new GridBagLayout();
165         c.setLayout(gr);
166         int gx[] = {0,1,2,3};
167         int gy[] = {0,1,2,3};
168         int k1;
169         Dimension d = new Dimension(90,90);
170         String s_number;
171         GridBagConstraints gc = new GridBagConstraints();
172         for(i = 1;i < 5;i ++)
173          {
174             if(i==4)k1=4;//避免对最后一个按钮的操作
175             else k1=5;
176             for(j = 1;j < k1;j ++)
177              {
178                 gc.gridx = gx[j-1];
179                 gc.gridy = gy[i-1];
180                 gc.fill = GridBagConstraints.NONE;
181                 s_number = String.valueOf(j+(i-1)*4);
182                 b[j+(i-1)*4] = new JButton(s_number,ic[0][j+(i-1)*4-1]);
183                 b[j+(i-1)*4].setPreferredSize(d);
184                 b[j+(i-1)*4].setFont(new Font("宋体",Font.PLAIN,0));
185                 gr.setConstraints(b[j+(i-1)*4],gc);   
186                  c.add(b[j+(i-1)*4]);
187              }
188           }        
189           for(i = 1;i <16;i ++) 
190             b[i].addActionListener(this);                          
191     }    
192     public void actionPerformed(ActionEvent e)
193       {
194            int j;
195             JButton b = (JButton)e.getSource();            
196             Point p = b.getLocation();
197             //System.out.print(p.x + " ");
198             //System.out.println(p.y);
199              Point p1 = null;
200                 for(j = -1;j < 2;j ++)
201                 {                        
202                     if(p.y+j*90>283||p.y+j*90<13)//检测y方向前一个空格,当前空格,及后一个空格是否出界
203                         continue;
204                     else
205                     { 
206                         Component a = c.getComponentAt(p.x, p.y+j*90);
207                         if(a.getHeight()!=90)//在y方向,检测是不是空白区。如果是空白区,则a为整个画板
208                         {
209                             //System.out.println(a.getHeight());
210                            p1 = new Point(p.x,p.y+j*90);
211                         }
212                     }     
213                 }
214                 for(j = -1;j < 2;j ++)
215                 {      
216                     if(p.x+j*90>287||p.x+j*90<17)
217                         continue;
218                                      
219                        else
220                     {
221                         Component a = c.getComponentAt(p.x+j*90, p.y);
222                            if(a.getHeight()!=90)                
223                               p1 = new Point(p.x+j*90,p.y);    
224                     }                
225                 }
226                 if(p1!=null)
227                 b.setLocation(p1.x, p1.y);//改变按键的位置
228               if(check()==true)
229                   JOptionPane.showMessageDialog(null, "恭喜您成功了");
230       }
231 /*产生随机数*/
232     public int[] randomnumber()
233     {
234          Random rd = new Random();
235            int n[] = new int[15];
236           for(int i = 0 ;i < 15;i ++)
237            {  
238                int temp = rd.nextInt(15)+1;
239                n[i] = temp;
240                for(int j = 0;j < i;j ++)
241                    if(n[j]==temp)
242                    {                
243                        i--;
244                        break;
245                    }                         
246            }
247         return n;
248     }
249     /*判断是否排序成功*/
250     public boolean check()
251     {
252          Point location[] = new Point[16];
253          boolean bo = false;
254          int count=0;
255          for(int i = 0;i < 4;i ++)
256              for(int j = 0;j < 4;j ++)
257                 location[i*4+j] = new Point(17+j*90,  13+i*90);
258          
259          for(int i = 0;i < 15;i ++)
260          {
261              if(b[i+1].getLocation().x==location[i].x&&b[i+1].getLocation().y==location[i].y)
262                  count++;
263              if(count==15)
264                  bo=true;
265          }         
266        return bo; 
267     }    
268     public static void main(String args[]) throws IOException
269     {
270         J_Puzzle app = new J_Puzzle();
271         app.setDefaultCloseOperation(EXIT_ON_CLOSE);
272         app.setLocation(Toolkit.getDefaultToolkit().getScreenSize().width/3, Toolkit.getDefaultToolkit().getScreenSize().height/4);
273         app.setSize(400,440);
274         app.setVisible(true);
275         app.setResizable(false);
276     }
277 }
View Code

 

posted @ 2013-11-11 20:52  soul390  阅读(344)  评论(0编辑  收藏  举报