AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

SpriteでMapを動的に表示する(3)

いちおう以下のサイトで紹介されてるアルゴリズムにそって壁を設置
せっき~のゲーム屋さん ドルアーガの塔 乱数の工夫の正体


f:id:yasu9780:20150618000738p:plain
まだなんかルール上おかしい配置があるので、バグがある感じですが

SearchAndBuild()を呼んで、
壁の無い柱が無くなったら1を返すので終了
返値が1以外なら再度呼び出す

int[,] map=new int[18,10];
for(;;)
{
	int ret=SearchAndBuild();
	if(ret==1) break;
}

int SearchAndBuild()
{
	int flag=0;
	for(int y=0;y<=8;y++) for(int x=1;x<=17;x++)
	{
		for(;;)
		{
			if(x<1 || y<0 || x>17 || y>8 ) break;
			if(map[x,y]!=0) break;
			else
			{
				flag=1;
				int r=Random.Range (1, 4);
				if(r==1 && y>0)
				{
					map[x,y]=r;
					y--;
					dropSprite(Vwall,"Units",x*3,y*3+1.5f);
				}
				else
				if(r==2 && y<8)
				{
					map[x,y]=r;
					y++;
					dropSprite(Vwall,"Units",x*3,y*3+1.5f);
				}
				else
				if(r==3 && x>1)
				{
					map[x,y]=r;
					x--;
					dropSprite(Hwall,"Units",x*3+1.5f,y*3);
				}
				else
				if(r==4 && x<17)
				{
					map[x,y]=r;
					x++;
					dropSprite(Hwall,"Units",x*3+1.5f,y*3);
				}
			}
		}
	}
	if(flag==0) return 1;
	return 0;
}

void dropSprite(Sprite sp,string layer,float x,float y)
{
	SpriteRenderer obj=new GameObject("Sprite").AddComponent<SpriteRenderer>();
	obj.sortingLayerName = layer;
	obj.sprite = Instantiate(sp) as Sprite;
	obj.transform.position = new Vector3(x,y);
}