设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

随机迷宫生成[深度/广度]

查看数: 5807 | 评论数: 4 | 收藏 6
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2015-1-2 21:45

正文摘要:

唔 我来6R好像没怎么发过东西呢 只知道用别人的 ..偶尔还是来一发做做贡献吧 不然觉得有点对不起大家呢OTZ 此货为迷宫生成算法,应该算是比较完善了吧 不知道有人写过没有 不过由于鄙人阅读脚本的能力甚是太好,别人 ...

回复

7408 发表于 2015-1-11 18:35:46
chd114 发表于 2015-1-3 16:58
随机生成的迷宫会自动保存到地图文件里吗?

Umm..貌似map对象访问不到来着 那就酱紫直接加载吧 不动默认脚本= =
RUBY 代码复制
  1. def save_map
  2.   map = load_data(sprintf("Data/Map%03d.rxdata", $game_map.map_id))
  3.   map.data = $game_map.data.clone
  4.   save_data(map,sprintf("Data/Map%03d.rxdata",$game_map.map_id))
  5. end

如果要保存成新的文件大概..就必须改Mapinfo了吧 毕竟编辑器就要靠它啦
欧买歌 发表于 2015-1-3 17:45:04
好东西啊,拥有了va的功能,收藏先

点评

VA看来很强大呢!  发表于 2015-1-5 15:01
chd114 发表于 2015-1-3 16:58:20
随机生成的迷宫会自动保存到地图文件里吗?

点评

地图名什么的无所谓吧···主要是存一个新的地图文件···  发表于 2015-1-9 22:06
Umm..不会呢 都是临时更改 应该可以把地图直接save_data吧?而且大概..也要改下MapInfos来着  发表于 2015-1-3 22:13
taroxd 发表于 2015-1-3 16:39:12
本帖最后由 taroxd 于 2015-1-3 16:44 编辑
不过由于鄙人阅读脚本的能力甚是太好,别人写的基本都看不懂OTZ Umm..所以还是自己写好了


十分赞同楼主这一观点,于是我也写了一个玩了玩

果然 Ruby 写类似伪代码的东西就是舒爽

(暂时还没有定义访问方法和 each 系列的迭代方法,不过有了转成字符串的 to_s ,能输出就能凑合着玩了)

RUBY 代码复制
  1. class Maze
  2.  
  3.   def initialize(xsize, ysize, ox = rand(xsize), oy = rand(ysize))
  4.     @xsize = xsize
  5.     @ysize = ysize
  6.     prim(ox, oy)
  7.   end
  8.  
  9.   # 生成迷宫
  10.   def prim(ox, oy)
  11.     init_maze
  12.     init_list
  13.     remove_wall(ox, oy)
  14.     add_adjacent_wall_to_list(ox, oy)
  15.     while (pos_data = list_sample)
  16.       (x, y), (new_x, new_y) = pos_data
  17.  
  18.       if wall?(new_x, new_y)
  19.         remove_wall(x, y)
  20.         remove_wall(new_x, new_y)
  21.         add_adjacent_wall_to_list(new_x, new_y)
  22.       end
  23.  
  24.       remove_from_list(x, y)
  25.     end
  26.   end
  27.  
  28.   def wall?(x, y)
  29.     exist?(x, y) && !@maze[x][y]
  30.   end
  31.  
  32.   def to_s
  33.     @xsize.times.map { |x|
  34.       @ysize.times.map { |y| wall?(x, y) ? '●' : '○' }.join
  35.     }.join("\n")
  36.   end
  37.  
  38.   private
  39.  
  40.   def init_maze
  41.     @maze = Array.new(@xsize) { Array.new(@ysize) }
  42.   end
  43.  
  44.   def init_list
  45.     @list = {}
  46.   end
  47.  
  48.   def remove_wall(x, y)
  49.     @maze[x][y] = true if exist?(x, y)
  50.   end
  51.  
  52.   # 返回 [[墙X,墙Y], [前方X, 前方Y]]
  53.   def list_sample
  54.     @list.to_a.sample
  55.   end
  56.  
  57.   def add_adjacent_wall_to_list(x, y)
  58.     each_dx_dy do |dx, dy|
  59.       new_x = x + dx
  60.       new_y = y + dy
  61.       add_to_list(new_x, new_y, new_x + dx, new_y + dy) if wall?(new_x, new_y)
  62.     end
  63.   end
  64.  
  65.   def each_dx_dy
  66.     yield -1, 0
  67.     yield 1, 0
  68.     yield 0, -1
  69.     yield 0, 1
  70.   end
  71.  
  72.   def add_to_list(x, y, new_x, new_y)
  73.     @list[[x, y]] = [new_x, new_y] if exist?(x, y)
  74.   end
  75.  
  76.   def remove_from_list(x, y)
  77.     @list.delete [x, y]
  78.   end
  79.  
  80.   def exist?(x, y)
  81.     x.between?(0, @xsize - 1) && y.between?(0, @ysize - 1)
  82.   end
  83.  
  84. end
  85.  
  86. # puts Maze.new(15, 15)

点评

..连大大都来看我,好感动的说~0 0  发表于 2015-1-3 22:21
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-21 18:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表