/**************************
http://www.592xyx.com/gameplay/14193/index.shtml
关灯游戏3
没想到会于这游戏再结缘
会的东西,不应该只是说说而已……
纸上谈兵过后的具体实现
理论为心  技术为要
第一阶段产生地图的思考  
类似而已 还是有区别的
本程序练习图像化 地图是要加载图片 更方便操作
特别地可以用到;;;链表
连线本身是一个问题
**************************/
  import java.awt.Frame;
  
import java.awt.Point;
import java.awt.p_w_picpath.BufferedImage;
import java.io.File;
import java.lang.reflect.Field;
import java.util.List;
import java.awt.Button;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem; 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.ArrayList;
import java.util.Date;
import java.util.Stack;
import java.util.Timer;
import java.util.TimerTask;
 
import javax.p_w_picpathio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JPanel;
import javax.swing.JTextArea;
 
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
 
import javax.swing.JFrame;
import javax.swing.JPanel;
 
public class Main extends JPanel {
	static Stack stack = new Stack(); // 创建堆栈对象 
    static int a = 1;
    static int rand = 1;
    static Point p = null;
    static Point p2 = null;
    static int    count=0;
    public static Frame frame = new Frame();
    static int s[][] = new  int [10][10];
    static int ss[][] = new  int [10][10];
    public static void data() {
    	java.util.Random random=new java.util.Random();// 定义随机类
    	  
    	  int sr=random.nextInt(120);
    	int o=2;int p=2;
    	//随机产生rand个连续的点在地图上
    	while(sr-->0)
    	{
    		int r=random.nextInt(20)%4;
    		if(00)
  	 // System.out.println("元素"+rand+"出栈");
  	//  System.out.println("元素"+stack.pop()+"出栈"); 
//    		  for(int i=0;i<10;i++)
//    			{for(int j=0;j<10;j++) System.out.print(" "+s[i][j]);
//    			System.out.println(" ");
//    			}
//    		  for(int i=0;i<10;i++)
//    			{for(int j=0;j<10;j++) System.out.print(" "+ss[i][j]);
//    			System.out.println(" ");    	
//    			}
    	System.out.println(" "+rand);
        Main f = new Main();
        frame.setTitle("【点灯游戏】");
        frame.add(f);        
        frame.setSize(700, 700);
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
         });
        //frame.
        MenuBar bar = new MenuBar();
        Menu CD = new Menu("【菜单】");
        MenuItem m = new MenuItem("【介绍】");
        MenuItem n = new MenuItem ("【版本】");
          
        bar.add(CD); 
        CD.add(m);
        CD.add(n);
         
        f.Action();
        frame.addMouseListener(new MouseAdapter() {            
            public void mouseClicked(MouseEvent e) {
                int x = e.getX();
                int y = e.getY();
                count++;
            
                p = new Point(x, y);
               int i=(x-35)/40;
               int j=(y-55)/40;   
               //先判断在ss数组中的信息   是1才进行
               if(ss[j][i]==1)
               {
            	   s[j][i]=1-s[j][i];
            	   if(ss[j-1][i]==1)s[j-1][i]=1-s[j-1][i];            	   
            	   if(ss[j+1][i]==1)s[j+1][i]=1-s[j+1][i];
            	   if(ss[j][i-1]==1)s[j][i-1]=1-s[j][i-1];
            	   if(ss[j][i+1]==1)s[j][i+1]=1-s[j][i+1];
               }
               
               //再改变s中的状态
               if(check()==1)  p2 = new Point(400, 220);
               else            p2 = new Point(400, 2200);
                frame.repaint();
            }
        });
        frame.setVisible(true);
    }
 
    private Timer timer;
 
    private void Action() {
        // ListenerClick();
        timer = new Timer();
        timer.schedule(new TimerTask() {
            public void run() {
                frame.repaint();
            }
        }, new Date(), 1000);
    }
 
    @Override
    public void paint(Graphics g) {
        g.drawLine(30,30,30,400);  // 左边
        g.drawLine(30,30,400,30);  // 上边    
        g.drawLine(400,30,400,400);// 右边
        g.drawLine(30,400,400,400);// 下边  
        g.drawString("【点灯游戏3】",444,33);
        g.drawString("点正方形区域,相连区域变化",444,50);
        int i=0,j=0;
        BufferedImage b_c;  	//类里面 不能static
        try {
			b_c = ImageIO.read(Main.class.getResource("1.jpg"));
			
    	} catch (Exception e) {
			throw new RuntimeException("图片加载异常");
		}
        
         for(  i=0;i<10;i++)
 		 {
         	for(  j=0;j<10;j++) 
 			if(s[i][j]==1)  g.drawImage(b_c,40+j*40-10,40+i*40-10,null);    //  g.drawString("+",40+j*40,40+i*40);      
 		 }
//        for(  i=1;i<9;i++)
//		 {
//       	   for(  j=1;j<9;j++) 
//		 	 if(ss[i][j]==1&&ss[i][j+1]==1) g.drawLine(40+j*20,40+i*20,40+(j+1)*20,40+i*20);  //右
//       	    //  if(ss[i][j]==1&&ss[i][j-1]==1) g.drawLine(40+j*20,40+i*20,40+(j-1)*20,40+i*20);  //左
//          	   if(ss[i][j]==1&&ss[i-1][j]==1) g.drawLine(40+j*20,40+i*20,40+j*20,40+(i-1)*20);   //上
//         	//if(ss[i][j]==1&&ss[i+1][j]==1) g.drawLine(40+j*20,40+i*20,40+j*20,40+(i+1)*20);    //下         	          	
//		 }
        for(  i=1;i<9;i++)
		 {
      	   for(  j=1;j<9;j++) 
		 	 if(ss[i][j]==1&&ss[i][j+1]==1) g.drawLine(40+j*40,40+i*40,40+(j+1)*40,40+i*40);  //右
      	      if(ss[i][j]==1&&ss[i][j-1]==1) g.drawLine(40+j*40,40+i*40,40+(j-1)*40,40+i*40);  //左
         	       	          	
		 }
        for(  i=1;i<9;i++)
		 {
      	   for(  j=1;j<9;j++)  
         	   if(ss[i][j]==1&&ss[i-1][j]==1) g.drawLine(40+j*40,40+i*40,40+j*40,40+(i-1)*40);   //上
        	 if(ss[i][j]==1&&ss[i+1][j]==1) g.drawLine(40+j*40,40+i*40,40+j*40,40+(i+1)*40);    //下         	          	
		 }
        File file = new File("1.jpg");
       
  
        if (p != null) 
        {   if(30