package cn.zhongZw.model;

import java.util.ArrayList;

import java.util.Random;

public class MazeModel {

private int width = 0;

private int height = 0;

private Random rnd = new Random();

public MazeModel() {

this.width = 50; //迷宫宽度

this.height = 50; //迷宫高度

}

public int getWidth() {

return width;

}

public void setWidth(int width) {

this.width = width;

}

public int getHeight() {

return height;

}

public void setHeight(int height) {

this.height = height;

}

public MazeModel(int width, int height) {

super();

this.width = width;

this.height = height;

}

public ArrayList  getMaze() {

ArrayList  maze = new ArrayList  ();

for (int h = 0; h

for (int w = 0; w

MazePoint point = new MazePoint(w, h);

maze.add(point);

}

}

return CreateMaze(maze);

}

private ArrayList  CreateMaze(ArrayList  maze) {

int top = 0;

int x = 0;

int y = 0;

ArrayList  team = new ArrayList  ();

team.add(maze.get(x + y * width));

while (top >= 0) {

int[] val = new int[] {

-1, -1, -1, -1

};

int times = 0;

boolean flag = false;

MazePoint pt = (MazePoint) team.get(top);

x = pt.getX();

y = pt.getY();

pt.visted = true;

ro1: while (times

int dir = rnd.nextInt(4);

if (val[dir] == dir)

continue;

else

val[dir] = dir;

switch (dir) {

case 0: // 左边

if ((x - 1) >= 0 && maze.get(x - 1 + y * width).visted == false) {

maze.get(x + y * width).setLeft();

maze.get(x - 1 + y * width).setRight();

team.add(maze.get(x - 1 + y * width));

top++;

flag = true;

break ro1;

}

break;

case 1: // 右边

if ((x + 1)

maze.get(x + y * width).setRight();

maze.get(x + 1 + y * width).setLeft();

team.add(maze.get(x + 1 + y * width));

top++;

flag = true;

break ro1;

}

break;

case 2: // 上边

if ((y - 1) >= 0 && maze.get(x + (y - 1) * width).visted == false) {

maze.get(x + y * width).setUp();

maze.get(x + (y - 1) * width).setDown();

team.add(maze.get(x + (y - 1) * width));

top++;

flag = true;

break ro1;

}

break;

case 3: // 下边

if ((y + 1)

maze.get(x + y * width).setDown();

maze.get(x + (y + 1) * width).setUp();

team.add(maze.get(x + (y + 1) * width));

top++;

flag = true;

break ro1;

}

break;

}

times += 1;

}

if (!flag) {

team.remove(top);

top -= 1;

}

}

return maze;

}

}

迷宫

[java] view plain copy

//作者:zhongZw

//邮箱:zhong317@32313133353236313431303231363533e58685e5aeb931333365633966126.com

package cn.zhongZw.model;

import java.util.*;

import java.lang.*;

public class MazePoint {

private int left = 0;

private int right = 0;

private int up = 0;

private int down = 0;

private int x;

private int y;

public boolean visted;

public MazePoint(int x, int y) {

this.x = x;

this.y = y;

}

public int getLeft() {

return left;

}

public void setLeft() {

this.left = 1;

}

public int getRight() {

return right;

}

public void setRight() {

this.right = 1;

}

public int getUp() {

return up;

}

public void setUp() {

this.up = 1;

}

public int getDown() {

return down;

}

public void setDown() {

this.down = 1;

}

public int getX() {

return x;

}

public void setX(int x) {

this.x = x;

}

public int getY() {

return y;

}

public void setY(int y) {

this.y = y;

}

}

java生成迷宫_java怎么生成迷宫地图相关推荐

  1. java 随机生成手机号_Java随机密码生成并和邮箱、手机号匹配

    废话不多说了,直接给大家贴java代码了,代码有所注释,写的不好,还请各位大家多多关照. 代码如下所示: package com.alibaba.uyuni.common.util; import j ...

  2. java 动态 枚举_java 动态生成枚举值

    在某些场景下我们需要动态生成一些枚举值,主要是通过反射生成,但是这种生成枚举值是不能switch的 1.枚举值类 public enum CodeInfoEnum { LOCK(1L, 1L, &qu ...

  3. 如何用java做游戏地图_Java为游戏绘制地图网格

    嘿,我正在尝试制作地牢爬虫,但我仍停留在地图生成上.我希望生成随机的房间,但是在完成所有操作之前,我必须先在屏幕上绘制地图.我希望地图自上而下,几乎是一个网格,稍后再将地板图像添加到其中.我的思维方式 ...

  4. java生成迷宫_Java实现可视化迷宫

    需求 使用深度优先算法求解迷宫路径,使用Java实现求解过程的可视化,可单步运行,形象直观. 演示效果 红色格子为迷宫终点,迷宫可放大缩小,为了录屏选择了较小的尺寸,有多种不同难度的迷宫可以加载. 简 ...

  5. java 随机数生成实现_Java中生成随机数的实现方法总结

    搜索热词 在实际开发工作中经常需要用到随机数.如有些系统中创建用户后会给用户一个随机的初始化密码.这个密码由于是随机的,为此往往只有用户自己知道.他们获取了这个随机密码之后,需要马上去系统中更改.这就 ...

  6. java 时间生成字符串_java随机生成时间字符串的方法

    本文实例为大家分享了java随机生成时间字符串的具体代码,供大家参考,具体内容如下 package com.wechat.utils; import java.text.SimpleDateForma ...

  7. java怎么生成字母_java自动生成字母

    新建一个类SpringContextUtil.java: import org.springframework.beans.BeansException; import org.springframe ...

  8. java 字母随机数_java如何生成指定长度的随机数字和英文的字符串

    最后贴一下完成的工具类代码 import java.util.Random; public class GeneId { /** * 随机生成包含大小写字母及数字的字符串 * @param lengt ...

  9. java 唯一流水号_JAVA流水号生成规格,采用同步单例生成,保证永远唯一

    流水号格式为yyyyMMddXXXX,规定每天只能到9999,代码如下: 01 import java.text.DecimalFormat; 02 import java.text.SimpleDa ...

最新文章

  1. Spring Cloud @RefreshScope 原理是什么?
  2. 个人专著推荐1:Red Hat Linux 9实务自学手册(含光盘)
  3. YBTOJ:前缀匹配(AC自动机)
  4. ROS与Android的通信
  5. mastercam后处理升级_Mastercam中文版后处理MPFan 有了它就可以自己修改后处理了 呵呵...
  6. jq点击事件多次响应_分享同一个按钮jQuery多次点击实现不同事件的代码
  7. HTML把表格链接进下拉菜单,excel表格下拉菜单怎么做
  8. 二级c语言不写编程,计算机二级C语言 到底是不是考原题
  9. Android 混淆总结
  10. Win11查看电脑磁盘分区格式的方法教学
  11. 上海十大it外包公司
  12. js 获取移动端设备类型及系统版本号
  13. 电大计算机应用基础期末考试题,电大计算机应用基础模拟题答案.docx
  14. app常见的专项测试以及面试题
  15. Linux 命令之 jq
  16. 安卓(android)即时通讯
  17. selenium.common.exceptions.WebDriverException: Message: unable to set
  18. Iar工程编译和下载的使用教程
  19. 《C#零基础入门之百识百例》(九十一)预处理器指令 -- 代码示例
  20. 计算机应用多媒体设计,2020年计算机软件水平考试《多媒体应用设计师》问答题及参考答案...

热门文章

  1. 【面试宝典】Mysql面试题大全
  2. 科研,办公几款强大又实用的软件(含安装包)
  3. Apollo星火计划学习笔记|控制模块
  4. CF连杀喊话_WeGame修改
  5. 手机寂静岭 java 攻略_寂静岭PT最终房间进入及通关攻略
  6. SAP—IDoc操作步骤
  7. 手机软件可让全民监控蚊媒病毒
  8. android手机运行win10,Win10可以直接运行你手机里的安卓APP了:三星率先支持
  9. 每日一问。2015.1.8
  10. Mysql- --DQl语句(select数据查询语言,多表查询,View试图)linux常用(重点)