java迷宫生成

public class DeepPri extends JFrame{
 
 /**
  *
  */
 private static final long serialVersionUID = 1L;
 private int gap=100;
 private int width=25;
 
 public DeepPri(){
  getContentPane().setBackground(Color.gray);
  setVisible(true);
  setSize(800,800);
  setResizable(false);
  setCenter();
 }
 
 public void setCenter(){
  Toolkit kit=Toolkit.getDefaultToolkit();
  Dimension d=kit.getScreenSize();
  int wid=(int) d.getWidth();
  int hei=(int) d.getHeight();
  this.setLocation((wid-getWidth())/2, (hei-getHeight())/2);
 }
 
 @Override
 public void paint(Graphics g){
  super.paint(g);
  int w=getWidth();
  int length=w-2*gap;
  for(int i=0;i<length/width+1;i++){
   g.setColor(Color.green);
   g.drawLine(gap+i*width, gap, gap+i*width, gap+length);
   g.drawLine(gap, gap+i*width, gap+length, gap+i*width);
  }
  generateMaze();
 }
 
 public void generateMaze(){
  Point currentPoint=new Point(gap,gap);
  Stack<Point> route=new Stack<Point>();
  List<Point> havePassed=new ArrayList<Point>();
  
  route.add(currentPoint);
  havePassed.add(currentPoint);
  Color color=getContentPane().getBackground();
  Graphics g=getGraphics();
  g.setColor(color);
  int w=getWidth();
  g.drawLine(gap, gap, gap, gap+width);
  g.drawLine(w-gap, w-gap, w-gap, w-gap-width);
  
  //look for next point
  while(true){
   try {
    Thread.sleep(20);
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
   int x=(int)currentPoint.getX();
   int y=(int)currentPoint.getY();
   int endX=getWidth()-gap;
   int endY=getHeight()-gap;
   
   List<Integer> list=new ArrayList<Integer>();
   if(x+width<endX&&!havePassed.contains(new Point(x+width,y)))
    list.add(1);
   if(y+width<endY&&!havePassed.contains(new Point(x,y+width)))
    list.add(2);
   if(x-width>=gap&&!havePassed.contains(new Point(x-width,y)))
    list.add(3);
   if(y-width>=gap&&!havePassed.contains(new Point(x,y-width)))
    list.add(4);
   if(list.size()==0){
    currentPoint =route.pop();
    if(currentPoint.getX()==gap&&currentPoint.getY()==gap){
     System.out.println("get out");
     break;
    }
    continue;
   }
   int s = list.get(new Random().nextInt(list.size()));
   
   switch(s){
   case 1:g.drawLine(x+width, y+1, x+width, y+width-1);currentPoint=new Point(x+width,y);break;
   case 2:g.drawLine(x+1, width+y, x+width-1, y+width);currentPoint=new Point(x,y+width);break;
   case 3:g.drawLine(x,y+1,x,y+width-1);currentPoint=new Point(x-width,y);break;
   case 4:g.drawLine(x+1, y, x+width-1, y);currentPoint=new Point(x,y-width);break;
   default: break;
   }
   
   havePassed.add(currentPoint);
   route.add(currentPoint);
   
  }
 }
 
/* public void crossMaze(){
  Point p=new Point(gap,gap);
  Graphics g=getGraphics();
 }*/
 
 public static void main(String[] args) {
  DeepPri dp=new DeepPri();
  dp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }
 
}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值