码迷,mamicode.com
首页 > 其他好文 > 详细

点点点游戏之 点灯游戏   加载图片版

时间:2016-07-22 06:41:02      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:小代码

 /**************************
http://www.592xyx.com/gameplay/14193/index.shtml
关灯游戏3
没想到会于这游戏再结缘
会的东西,不应该只是说说而已……
纸上谈兵过后的具体实现
理论为心  技术为要
第一阶段产生地图的思考  
类似而已 还是有区别的
本程序练习图像化 地图是要加载图片 更方便操作
特别地可以用到;;;链表
连线本身是一个问题
**************************/
  import java.awt.Frame;
  
import java.awt.Point;
import java.awt.image.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.imageio.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<Integer> 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(0<o&&o<9&&0<p&&p<9) 	
    		   {s[o][p]=1;ss[o][p]=1;  ///stack.push(o); stack.push(p);rand++;
    		   rand++;
    		   }
    		if(r==0) o--;
    		if(r==1) p++;
    		if(r==2) o++;
    		if(r==3) p--;
    	}
    	if(rand<20)
    		clear();
    }
    public static void clear() {
    	 for(int i=0;i<10;i++)
			{for(int j=0;j<10;j++)  s[i][j]=ss[i][j]=0;			
			}
    	 rand=0;
    	 data();
    }
    public static int  check() {
   	 for(int i=0;i<10;i++)
			{for(int j=0;j<10;j++)
				if(ss[i][j]==1&&ss[i][j]!=0)return 0;			
			}
   	   
   	  return 1;
   	  
   }
    public static void main(String[] args) {
    	data();
    	//int x=stack.peek();
    	//int y=stack.pop();
    	//while(rand-->0)
  	 // 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<p.getX()&&p.getX()<400&&30<p.getY()&&p.getY()<400)
           { 
        	g.drawString("YOU  had  win",(int)p2.getX(), (int)p2.getY());
        	int ii=(int)(p.getX()-35)/40;int jj=(int)(p.getY()-35)/40;
        	
        	 
//        	 try{
//             	BufferedImage src = javax.imageio.ImageIO.read(file);	
//             	g.drawImage(src,(int)p.getX(),(int)p.getY(),10,10,null);
//             } 
//             catch(Exception e){
//                 e.printStackTrace();
//             }finally{ 
//             	;
//                 }
            g.drawString("X = "+ii,444,70);
            g.drawString("Y = "+jj,444,90);
            g.drawString("ss"+ss[jj][ii],444,110);
        }
             
        else
        {
            g.drawString("【error】",44,444);
            
            g.drawString("X = "+p.getX(),44,460);
            g.drawString("ss[][] = "+p.getY(),44,490);
        }  
             
             
        }
         
         
        g.drawString("我会一直打印时间 "+a+"s", 100, 440);
        a++;
         
    }
 
}


点点点游戏之 点灯游戏   加载图片版

标签:小代码

原文地址:http://wzsts.blog.51cto.com/10251779/1828611

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!