本帖最后由 匿名 于 2011-7-24 01:21 编辑
- def gtr_beta_16_random_room
- #覆盖基本所有区域
- $game_map.map.width = 30
- $game_map.map.height = 25
- for x in 0...$game_map.width
- for y in 0...$game_map.height
- sys_set_mapdata(x,y,0,384)
- sys_map_autotilereset(x,y,1,49)
- end
- end
- Graphics.update
- sx = 10 + rand($game_map.width - 20)
- @enter_x = sx
- @enter_y = $game_map.height - 1
- sy = $game_map.height / 2 #+ rand(10) - 19
- w = 6 + rand(14)
- h = 8 + rand(12)
- dig_up_room(sx,sy,1,w,h)
- Graphics.update
- for yy in sy..@enter_y
- sys_map_autotilereset(@enter_x,yy,1,0)
- end
- make_wall(1,48+28,401,409)
- Graphics.update
- make_things_nearwall_16mix
- make_big_things_inspace_16mix(12)
- Graphics.update
- $game_player.moveto(@enter_x,@enter_y)
- $scene.spriteset.dispose
- $scene.spriteset = Spriteset_Map.new
- $scene.map_window.dispose
- $scene.map_window = Window_Map.new
- end
- ###########################################################################
- def dig_up_room(x,y,z,width,height) #挖出一个长方型空间,高度必须3以上
- for xx in (x - width / 2)..(x + width / 2)
- for yy in (y - height / 2)..(y + height / 2)
- if xx <= 2 or xx >= ($game_map.width -3) or yy <= 2 or yy >= ($game_map.height - 3)
- next
- end
- sys_map_autotilereset(xx,yy,z,0)
- end
- end
- end
- ###########################################################################
- def make_wall(z,fst,snd,trd)
- for x in 0...$game_map.width
- for y in 0...$game_map.height
- if sys_map_gt(x,y-1,z) == fst
- sys_map_autotilereset(x,y,z,snd)
- end
- if sys_map_gt(x,y-1,z) == snd
- sys_map_autotilereset(x,y,z,trd)
- end
- end
- end
- end
- ###########################################################################
- def make_things_nearwall_16mix
- for x in 0...$game_map.width
- for y in 0...$game_map.height
- if sys_map_gt(x,y-1,1) == 409 and sys_map_gt(x,y,1) == 0 and sys_map_gt(x,y,2) == 0
- g = rand(4)
- case g
- when 0
- next
- when 1
- if sys_map_gt(x+1,y,1) == 0 and sys_map_gt(x+1,y-1,1) == 409 and sys_map_gt(x+1,y,2) == 0
- kkk = rand(4)
- if kkk == 0
- sys_map_autotilereset(x,y-2,2,472)
- sys_map_autotilereset(x+1,y-2,2,473)
- sys_map_autotilereset(x,y-1,2,480)
- sys_map_autotilereset(x+1,y-1,2,481)
- sys_map_autotilereset(x,y,2,488)
- sys_map_autotilereset(x+1,y,2,489)
- elsif kkk == 1
- sys_map_autotilereset(x,y-1,2,482)
- sys_map_autotilereset(x+1,y-1,2,483)
- sys_map_autotilereset(x,y,2,490)
- sys_map_autotilereset(x+1,y,2,491)
- elsif kkk == 2
- sys_map_autotilereset(x,y-1,2,507)
- sys_map_autotilereset(x+1,y-1,2,508)
- sys_map_autotilereset(x,y,2,515)
- sys_map_autotilereset(x+1,y,2,516)
- end
- else
- next
- end
- when 2
- if @livenumber > 0
- next
- end
- if sys_map_gt(x,y+1,1) == 0 and sys_map_gt(x,y+1,2) == 0
- sys_map_autotilereset(x,y-1,2,479)
- sys_map_autotilereset(x,y,2,487)
- sys_map_autotilereset(x,y + 1,2,495)
- @livenumber += 1
- end
- when 3
- if sys_map_gt(x,y+1,1) == 0 and sys_map_gt(x,y+1,2) == 0
- kkk = rand(5)
- if kkk == 0
- sys_map_autotilereset(x,y-1,2,496 + 72 + 3)
- sys_map_autotilereset(x,y,2,496 + 72 + 3 + 8)
- elsif kkk == 1
- sys_map_autotilereset(x,y-1,2,496 + 72 + 3 + 1)
- sys_map_autotilereset(x,y,2,496 + 72 + 3 + 8 + 1)
- end
- end
- ####################
- end
- ########end of case
- end
- end
- end
- end
- ############################################################################
- def make_big_things_inspace_16mix(times)
- space = []
- tried = 0
- #############################
- for x in 0...$game_map.width
- for y in 0...$game_map.height
- if sys_map_gt(x,y,1) == 0 and sys_map_gt(x,y,2) == 0
- space.push([x,y])
- end
- end
- end
- for i in 0...times
- Graphics.update
- ##################################
- k = space[rand(space.size)]
- type = rand(10)
- if type <= 3
- #####################################
- d = true
- for x in (k[0] - 2)..(k[0] + 2)
- for y in (k[1] - 1)..(k[1] + 1)
- unless space.include?([x,y])
- d = false
- break
- end
- end
- end
- if d == true
- sys_map_autotilereset(k[0]-1,k[1]-1,2,424)
- sys_map_autotilereset(k[0],k[1]-1,2,425)
- sys_map_autotilereset(k[0]+1,k[1]-1,2,426)
- sys_map_autotilereset(k[0]-1,k[1],2,432)
- sys_map_autotilereset(k[0],k[1],2,433)
- sys_map_autotilereset(k[0]+1,k[1],2,434)
- sys_map_autotilereset(k[0]-1,k[1]+1,2,440)
- sys_map_autotilereset(k[0],k[1]+1,2,441)
- sys_map_autotilereset(k[0]+1,k[1]+1,2,442)
- for x in (k[0] - 1)..(k[0] + 1)
- for y in (k[1] - 1)..(k[1] + 1)
- space.delete([x,y])
- end
- end
- end
- #######################################
- elsif type <= 10
- ########################################
- d = true
- for x in (k[0] - 1)..(k[0] + 1)
- for y in (k[1] - 1)..(k[1] + 1)
- unless space.include?([x,y])
- d = false
- break
- end
- end
- end
- if d == true
- sys_map_autotilereset(k[0],k[1],1,496 + rand(3))
- space.delete(k)
- end
- ########################################
- end
- ###END OF BIG IF#####################
- end
- ####END OF BIG FOR#####################
- end
复制代码 石器的快感之一在于不断看到有人重新发现偶们已经发现的东西。
我们制定规则,让程序拥有创造力。(甚至这段脚本本身也有一部分通过另外一个脚本自动生成。当然,不要奢望自动生成的这坨东西会自己写注释 囧 故而,挑了个最简单的一个- -)
我们可以更偷懒一点,直接告诉程序:给我一间房间。
然后OK。
然后告诉程序:给我往房间里塞点乱七八糟的东西
然后OK。
然后告诉程序:随便来点神马生物。
然后也OK。
不用那么远看10楼了,这段脚本汝等能看到什么?(当然,在别的地方TILEMAP被整个轰杀成了渣渣然后重组)
此外捏:
左面和右面完全是一样的东西
程序先自动搞定左边,再自动搞定右边。
同理,自动搞定阶梯神马的差不多一样。
(实际上这坨东西根本没打算让大多数人看懂- - 不过看懂的人基本上知道这东东到底能干神马) |