HSP初心者の俺がゆうなまっぽいゲームを作ろうと思う
魔物をどうやって生み出すかは考え中
探検
HSP初心者が<ゆうなま>っぽいゲームを作る
■ このスレッドは過去ログ倉庫に格納されています
2012/04/28(土) 10:37:31.70ID:4Teh0eDo
2013/10/20(日) 06:40:55.90ID:0tYNwsQx
その一方で、diggedフラグについては、例えばyoubunかmabunの想定外の値(例えば255)を
マジックナンバーとすることで、独立の配列を持つことを省略する方法もあります。
例えば、掘削後のマスのyoubunを255とするなら、
bool isDigged(int x,int y){
return youbun[x][y]==255;
}
のような書き方が可能です。
この応用で、ちょっと工夫を凝らすため、bool型ではなくshort型の2次元配列を
持つ方法を提案します。変数名はdepthとし、未掘削マジックナンバーを -1とすると、
short depth[Width][Height];
bool isDigged(int x,int y){
return depth[x][y]!=-1;
}
のような実装になります。depth配列の全要素をゲーム開始時に-1で初期化しますが、
勇者の侵入口のみ0にしておきます。
なぜこのようにするかは、この後で説明します。
マジックナンバーとすることで、独立の配列を持つことを省略する方法もあります。
例えば、掘削後のマスのyoubunを255とするなら、
bool isDigged(int x,int y){
return youbun[x][y]==255;
}
のような書き方が可能です。
この応用で、ちょっと工夫を凝らすため、bool型ではなくshort型の2次元配列を
持つ方法を提案します。変数名はdepthとし、未掘削マジックナンバーを -1とすると、
short depth[Width][Height];
bool isDigged(int x,int y){
return depth[x][y]!=-1;
}
のような実装になります。depth配列の全要素をゲーム開始時に-1で初期化しますが、
勇者の侵入口のみ0にしておきます。
なぜこのようにするかは、この後で説明します。
2013/10/20(日) 21:52:54.39ID:khuaVB1t
6531 ◆bQ58yym6a2
2013/10/28(月) 21:36:05.34ID:vuaiF4qS (>>62のつづき)
このようなルールでdepth配列を構築すると、掘削済みの任意の地点から地上に至るまでの
比較的上りやすい経路を簡単に一意に探すことができるようになります。
参照しているマス周囲の掘削済みマスのうち、
depth値の一番小さいほうへ繰り返し移動すればよいのです。
ただし、この方法で得られるルートは必ずしも最短にはなりません。
典型的な例外としては、枝分かれさせた2本の迷路が奥のほうで貫通し、
再び合流したときに発生します。
この問題を解決するには、掘削メソッドにさらに一工夫加えます。
このようなルールでdepth配列を構築すると、掘削済みの任意の地点から地上に至るまでの
比較的上りやすい経路を簡単に一意に探すことができるようになります。
参照しているマス周囲の掘削済みマスのうち、
depth値の一番小さいほうへ繰り返し移動すればよいのです。
ただし、この方法で得られるルートは必ずしも最短にはなりません。
典型的な例外としては、枝分かれさせた2本の迷路が奥のほうで貫通し、
再び合流したときに発生します。
この問題を解決するには、掘削メソッドにさらに一工夫加えます。
6631 ◆bQ58yym6a2
2013/10/28(月) 21:38:19.18ID:vuaiF4qS 繰り返しになりますが、depth値の配列は、
「周囲4方向の掘削済みセルのdepth値の最小値に1を加えたもの」
というルールで統一しようとしています。
貫通するように穴を掘ったとき、最後に掘ったところのdepth値は
上の処理によって適切な値に設定されることが期待できます。
問題が発生するのは、そのセルに隣接するセルのうち、
今掘って設定したdepth値よりも大きい値を持つセルです。
少なくともこの隣接セルについては、今掘ったところのdepth値+1になるはずです。
そこで、そのように更新してやると、今度はその隣接セルのさらに周囲の
セルのうち、より大きいdepth値のセルが……、という具合に問題が波及します。
「周囲4方向の掘削済みセルのdepth値の最小値に1を加えたもの」
というルールで統一しようとしています。
貫通するように穴を掘ったとき、最後に掘ったところのdepth値は
上の処理によって適切な値に設定されることが期待できます。
問題が発生するのは、そのセルに隣接するセルのうち、
今掘って設定したdepth値よりも大きい値を持つセルです。
少なくともこの隣接セルについては、今掘ったところのdepth値+1になるはずです。
そこで、そのように更新してやると、今度はその隣接セルのさらに周囲の
セルのうち、より大きいdepth値のセルが……、という具合に問題が波及します。
6731 ◆bQ58yym6a2
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値をセットしてから)呼び出して使います。
注目しているセルの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万円ぐらいするやつ)を引き当てて、
無双っぽい状況だったんだけど、別のデータを上書きしちゃった><
ファーストプレイのとき、おみくじで、ショップで売ってる
一番いい武器(10万円ぐらいするやつ)を引き当てて、
無双っぽい状況だったんだけど、別のデータを上書きしちゃった><
69名前は開発中のものです。
2017/01/31(火) 21:05:30.44ID:qOnOHCqG age
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 🇺🇸🇨🇳米中関係は「極めて強固」とトランプ氏… ★4 [BFU★]
- 【野球】大谷翔平、WBC出場を正式表明! 「日本を代表して再びプレー嬉しく思う」 侍ジャパンで世界一連覇狙う★2 [冬月記者★]
- 日米首脳、電話で緊密な連携確認 台湾答弁協議の有無明言せず… [BFU★]
- 🇺🇸🇨🇳米中関係は「極めて強固」とトランプ氏… ★5 [BFU★]
- 「ホストに貢ぎたい」と海外で売春する日本人女性 2カ月で2千万円稼ぐケースも [1ゲットロボ★]
- 【速報】外務次官が中国大使と面会 [蚤の市★]
- 【高市悲報】政府「無駄だと思う公金チューチューをSNSを使って国民から意見を募ります」🥸 [359965264]
- 高市早苗、トランプに電話会談でガチギレされた模様wwwwwwwwwwwww会見で半泣きだったという情報も [271912485]
- ヤフコメ民「高市発言で困っている宿泊施設はすべて中国経営者だ!」 [305926466]
- 【悲報】明石家サンタ、スポンサーが集まらず放送見送り [883032851]
- 【速報】吾峠呼世晴、復活wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww [339035499]
- 【画像】童貞は絶ッッッ対"6"を選ぶ神戸のJ K集合写真見つけちゃったwwwwwwwwwwwwwwwwwww [904880432]
