読者です 読者をやめる 読者になる 読者になる

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

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

経路探索実装中(超面倒くさい)

Zombie 迷路生成・探索
map=new string[10];
map[0]="#####";
map[1]="#G..#";
map[2]="#.###";
map[3]="#...#";
map[4]="#.#.#";
map[5]="###.#";
map[6]="#...#";
map[7]="##.##";
map[8]="#S..#";
map[9]="#####";

#は壁 Gはゴール Sはスタート位置

Gからコストどれだけで移動できるかを再帰的に探索
SearchMap()で求めた表がこれ
f:id:yasu9780:20150428211047p:plain
(上下が逆なので注意)

いま、どこにいるかを指定すれば、そこからゴールまでの最短経路は、
8方向の値が小さいマスを選べばいい


スタートからゴールに移動中
f:id:yasu9780:20150428211359p:plain
はいゴール
f:id:yasu9780:20150428210511p:plain
ターン制RPGなら1マスつづ移動でもいいけど
そういうわけにもいかないので、スムーズな移動を実現

探索は超単純で
(map3は初期値はすべて-1が入っている)

void SearchMap(int x,int y,float cost)
{
	if(x<0) return;
	if(y<0) return;
	if(x>5) return;
	if(y>9) return;
	if(map2[x,y]==1) return;
	if(map3[x,y]==-1) map3[x,y]=cost;
	else
	if(map3[x,y]>cost) map3[x,y]=cost;
	else return;

	SearchMap(x-1,y,cost+1f);
	SearchMap(x+1,y,cost+1f);
	SearchMap(x,y-1,cost+1f);
	SearchMap(x,y+1,cost+1f);

	SearchMap(x-1,y-1,cost+1.4f);
	SearchMap(x-1,y+1,cost+1.4f);
	SearchMap(x+1,y-1,cost+1.4f);
	SearchMap(x+1,y+1,cost+1.4f);
}

すでにコストが入っている場合も、自分がより低いなら書き換える
壁や、コストが自分と同じ、または高いなら、戻る
斜めコストを1.4=√2として設定している

面倒くさいのが座標合わせ(´・ω・`)
もっとはじめにやっておくべきだった。
ある程度作ってしまってるのに、経路探索で距離を判断するように修正するのは
かなり面倒でバグまみれになりそうな予感。

広告を非表示にする