当前位置:首页 > 开发 > 编程语言 > Java > 正文

java迷宫生成

发表于: 2013-07-22   作者:我恨死你的   来源:转载   浏览:
摘要: public class DeepPri extends JFrame{  /**  *   */ private static final long serialVersionUID = 1L; private int gap=100; private int width=25;  public DeepP

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);
 }
 
}

java迷宫生成

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
参考维基百科http://en.wikipedia.org/wiki/Maze_generation_algorithm 1 深度优先搜索 Start at a
迷宫生成算法和迷宫寻路算法 大学二年级的时候,作为对栈这个数据结构的复习,我制作了一个迷宫生成
主要用到了 求并/查找 数据结构,这个结构封装在类DisjSets中。这个结构用于区分等价关系,即将一个
1 #include <iostream> 2 #include <vector> 3 #include <cstdlib> 4 #include &
简单介绍: 考虑一个迷宫的生成,一个简单算法就是从各处的墙壁开始(除入口和出口之外)。此时,不
如题,迷宫效果: #include <stack> #include <vector> #include <iostream> #in
简单介绍: 考虑一个迷宫的生成,一个简单算法就是从各处的墙壁开始(除入口和出口之外)。此时,不
最近整合之前学习的opengl知识,和两个朋友(fluyy,Evergreen)一起制作了一个3D的迷宫游戏。我们先是
[问题描述] 以一个 m*n 的长方阵表示迷宫,0 和 1 分别表示迷宫中的通路和障碍。设计一个程序, 对
今天理解了如何利用图的深度优先算法生成迷宫。关键在于:DFS算法,选择邻结点时必须随机 void DFS(
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号