HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0129
MUCHダンジョン自動生成の区画分けについて1解決


MUCH

リンク

2012/1/29(Sun) 15:28:39|NO.44590

ダンジョン自動生成をやろうと思っています。
が、その前段階である区画分けで困っています。
アドバイスをよろしくお願いします。
ソース参考:http://racanhack.sourceforge.jp/rhdoc/index.html
下はメインプログラム

#include "dungeon.as" #define mapx 40 #define mapy 30 dim map,mapx+30,mapy+30 randomize #define lx 0 #define ly 1 #define hx 2 #define hy 3 dim rect,200,4 #define min_r_size 4 ;マップ初期化 repeat mapy,0 ccnt=cnt repeat mapx,0 map(cnt,ccnt)=0 loop loop ; rect_split rect, 0, 0, 0, mapx-1, mapy-1, min_r_size map_print map,mapx,mapy,rect,20 gosub *draw stop ;描画ルーチン *draw redraw 0 color 110,110,110:boxf repeat mapy+30,0 ccnt=cnt repeat mapx+30,0 if map(cnt,ccnt)=0:color 255,255,255:else:color 0,0,0 boxf cnt*8+1,ccnt*8+1,(cnt+1)*8-1,(ccnt+1)*8-1 loop loop pos 400,80:mes thy redraw 1 return

下は自作モジュール(dungeon.as)です。

#module #deffunc rect_add array ret,int id,int lx,int ly,int hx,int hy ret(id,0)=lx ret(id,1)=ly ret(id,2)=hx ret(id,3)=hy return #deffunc rect_split array rect,int rectid,int lx,int ly,int hx,int hy,int minrs rect_add rect,rectid,lx,ly,hx,hy if (rect(rectid,2)-rect(rectid,0) <= minrs*2)&&(rect(rectid,3)-rect(rectid,1) <= minrs*2){ return } spcoy=0:spcox=0 if rnd(2)=0{ spcoy=rnd(rect(rectid,3)-minrs+1)+minrs+rect(rectid,1) rect(rectid,3)=spcoy rect(rectid+1,1)=spcoy }else{ spcox=rnd(rect(rectid,2)-minrs+1)+minrs+rect(rectid,0) rect(rectid,2)=spcox rect(rectid+1,0)=spcox } rect_split rect, rectid, rect(rectid,0), rect(rectid,1), rect(rectid,2), rect(rectid,3),minrs rect_split rect, rectid+1, rect(rectid+1,0), rect(rectid+1,1), rect(rectid+1,2), rect(rectid+1,3),minrs return #deffunc map_print array mapp,int mapx,int mapy,array rectt,int mrect repeat mrect ccnt=cnt cccnt=rectt(ccnt,1) repeat rectt(ccnt,2)-rectt(ccnt,0),rectt(ccnt,0) ; color 255,255,255:boxf ; pos 0,0:color 0,0,0 ; mes " "+ccnt+" "+cnt+" "+cccnt mapp(cnt,cccnt)=1 ;wait 50 loop cccnt=rectt(ccnt,3) repeat rectt(ccnt,2)-rectt(ccnt,0),rectt(ccnt,0) mapp(cnt,cccnt)=1 loop cccnt=rectt(ccnt,0) repeat rectt(ccnt,3)-rectt(ccnt,1),rectt(ccnt,1) mapp(cccnt,cnt)=1 loop cccnt=rectt(ccnt,2) repeat rectt(ccnt,3)-rectt(ccnt,1),rectt(ccnt,1) mapp(cccnt,cnt)=1 loop loop return #global

また、今回が初投稿です。
何かアドバイスがあればそれについてもよろしくお願いします。



この記事に返信する


MUCH

リンク

2012/1/29(Sun) 18:24:51|NO.44595

すいません。
作り方を変えることにしました。



ONION software Copyright 1997-2023(c) All rights reserved.