08/01/24 06:17:38
void wall(int p,int q)
{if (meiro[p][q]!=1)
{int dir;
meiro[p][q]=3;
dir = rand()%4+1;
if (dir==1&&meiro[p+2][q]!=3)
{meiro[p+1][q]=3;
wall(p+2,q);}
if (dir==2&&meiro[p-2][q]!=3)
{meiro[p-1][q]=3;
wall(p-2,q);}
if (dir==3&&meiro[p][q+2]!=3)
{meiro[p][q+1]=3;
wall(p,q+2);}
if (dir==4&&meiro[p][q-2]!=3)
{meiro[p][q-1]=3;
wall(p,q-2);
}}}
p,qはmeiro[p][q]に対応していて、meiro[偶数][偶数]の点です。
迷路を自動生成するプログラム作ってます。
色々調べて壁伸ばし法で作ることにして、wall関数なるものを自作しました。
0:道 1:壁 3:作りかけの壁
一応、迷路っぽいものはできるのですが、なんというかすかすかのものができてしまいます。
41:デフォルトの名無しさん
08/01/24 10:09:40
続きは?
42:デフォルトの名無しさん
08/01/24 18:13:59
>>40
C言語っつーよりアルゴリズムの問題だと思うけど、
どのみちそこだけ出されてもなんとも言えない
wallをどういう風に呼んでるかとか、
どのタイミングと条件でmeiro[x][y]を1にセットするのかとか
わからないと
43:デフォルトの名無しさん
08/01/24 20:39:20
しかしみずれえソースだな
44:デフォルトの名無しさん
08/01/24 20:45:25
>>40
伸ばす方向に壁ができてたらそれで終わりにしないで、空いている方向を選ぶようにしてみたら?