HSP初心者が<ゆうなま>っぽいゲームを作る

■ このスレッドは過去ログ倉庫に格納されています
2012/04/28(土) 10:37:31.70ID:4Teh0eDo
HSP初心者の俺がゆうなまっぽいゲームを作ろうと思う

魔物をどうやって生み出すかは考え中
2013/10/20(日) 21:52:54.39ID:khuaVB1t
>>63
>>52
2013/10/28(月) 21:36:05.34ID:vuaiF4qS
(>>62のつづき)
このようなルールでdepth配列を構築すると、掘削済みの任意の地点から地上に至るまでの
比較的上りやすい経路を簡単に一意に探すことができるようになります。
参照しているマス周囲の掘削済みマスのうち、
depth値の一番小さいほうへ繰り返し移動すればよいのです。

ただし、この方法で得られるルートは必ずしも最短にはなりません。
典型的な例外としては、枝分かれさせた2本の迷路が奥のほうで貫通し、
再び合流したときに発生します。

この問題を解決するには、掘削メソッドにさらに一工夫加えます。
2013/10/28(月) 21:38:19.18ID:vuaiF4qS
繰り返しになりますが、depth値の配列は、
「周囲4方向の掘削済みセルのdepth値の最小値に1を加えたもの」
というルールで統一しようとしています。

貫通するように穴を掘ったとき、最後に掘ったところのdepth値は
上の処理によって適切な値に設定されることが期待できます。

問題が発生するのは、そのセルに隣接するセルのうち、
今掘って設定したdepth値よりも大きい値を持つセルです。
少なくともこの隣接セルについては、今掘ったところのdepth値+1になるはずです。

そこで、そのように更新してやると、今度はその隣接セルのさらに周囲の
セルのうち、より大きいdepth値のセルが……、という具合に問題が波及します。
2013/11/05(火) 21:54:19.01ID:X4wPsGV1
こういう問題を処理するときには、再帰的アルゴリズムというのを使うとうまくいきます。

注目しているセルのdepth値が、隣接していて更新されたセルのdepth値よりも大きいとき、
そのセルのdepth値は、隣接depth値に1を加えたものに更新しますが、
それに引き続き、注目したセルに隣接するセルに対して、更新後のdepth値を通知します。
void Cmapdata::Rdig(int x,int y,short min){
  if(isInside(x,y) && isDigged(x,y) && depth[x][y]>min){
    depth[x][y]= ++min;
    Rdig(x-1,y,min);
    Rdig(x+1,y,min);
    Rdig(x,y-1,min);
    Rdig(x,y+1,min);
  }
}

未掘削であったり、通知されたdepth値よりもともと小さいセルでは、値の更新もされませんし、
再帰呼び出しも行われませんので、影響範囲だけ更新したら、このアルゴリズムは完結します。
なおこの関数は、上記のdig関数の最後に(掘削セルのdepth値をセットしてから)呼び出して使います。
2014/06/24(火) 09:50:46.15ID:JIvkZz2v
『俺は屍をこえてゆく』が面白かった。

ファーストプレイのとき、おみくじで、ショップで売ってる
一番いい武器(10万円ぐらいするやつ)を引き当てて、
無双っぽい状況だったんだけど、別のデータを上書きしちゃった><
69名前は開発中のものです。
垢版 |
2017/01/31(火) 21:05:30.44ID:qOnOHCqG
age
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況