実生活から制約を取得
多くの場合、適切なアルゴリズムを見つける方法の答えは、これらのことが実際の生活でどのように発生するかを調べることから始まります。調べましたか?私の頭の上から、次のことを考えることができます。
- 道路は建物とその他の興味のあるポイントを結ぶためにあります
- 建物は、可能であれば、既存の道路に沿って配置されます
- 道路がない場合、建物は空の場所に配置され、独自の道路を介して近くの道路に接続されます
- 建物は、住民が関心を持つ他の建物の近くに配置されます。人々は、職場、食料品店、衣料品店などの近くに住むように移動します。
- 建物は、本来の用途に必要なリソースの近くに配置されます。例えば、製材所は森林の近くに、あるいは森林開拓地にさえ置かれます。人々はどこかに住むために水と食物(植物、動物)を必要とします。
- 建物は、意図した用途に有害である、または有害となる他の建物から離れた場所に配置されています。たとえば、染色屋の臭いはひどいので、通常は住宅地には置かれません。同様に、居酒屋やレストランは騒々しいので、居住者はそれらの上に住みたいのではなく、顧客が必要なので、住宅地の近くにいる必要があります。
- 一部の国には、建物の配置にも影響を与えるゾーニング法があります。通常、これらは、どのような種類の建物が互いに有害であるか、またはその地域に固有のリソースがあるか(たとえば、高品質の土壌は駐車場を建設するためではなく、フィールドのためのものです)を予測するより正式な方法です。
- 建物は住民のためのものであり、それらの個人的なスタイルと好みがそれらに反映されています。たとえば、人口が少ない場合、彼らは地面(高層ビル、アパートの建物)を共有する可能性がはるかに高く、裕福な場合はコンドミニアムを取得し、裕福な場合は独立したヴィラを取得します。特定のグループが他のグループを好きではない場合、それらは同棲する可能性が低くなります。特定のグループ間に親和性がある場合、それらは同様の領域に移動する可能性があります。
それらを地形に適用します
これらの制約を設定したら、その周りにアルゴリズムを構築してみることができます。たとえば、地形を生成し、マップの周りに必要なリソースを分配します(おそらく、最も重要なリソースの小さな堆積物を開始領域に配置し、次に大きな堆積物を互いに遠く離れて配置することに注意してください)。もちろん、ここでゲームのニーズとメカニズムが作用しますが、ランダムな要素を追加することもできます。
次に、それらを使用するリソースの近くにビジネス(およびその住宅の建物)を構築します。たとえば、大きな山の隣の採石場。次に、それらに必要なインフラストラクチャを追加します。たとえば、郵便局と居酒屋があり、ビジネスを行って製品を販売できる交易所、道具を提供する鍛冶屋などです。
どこに行くかを決定するには、重み関数を使用して、マップをタイルに分割し、各タイルの数を特定の目的にどれだけ望ましいかを計算します。その種類の建物にとって最も望ましいタイルに建物を置きます。「1つのトレーディングポストが50のビジネスまたは100の家を処理できる」などのルールを追加します。これにより、都市が特定のサイズに達した場合に別のトレーディングポストが追加される可能性が高くなります。
これを取得したら、かなりまともなマップをいくつか取得する必要があります。マップがすべて不自然な形状になってしまうことに気付いた場合は、その形状の重み付け関数にペナルティを追加します。たとえば、「私の街路が別の街路のすぐ隣にある場合、-100が望ましい」、「私の街路が交差する場合、-100など」ランダム要素をいつでも追加して、これをより奇抜な感じにしたり、「交差点がN個を超える建物が道路に接続されている場合は、それをラウンドアバウト交差点に変える」などの他のメカニズムを追加したりできます。
これらの制約を使用して、特定の国に地形の山を増やしたり、特定の文化に曲がりくねった道路を構築させたり、別の地図に直線道路を好んだりするなど、異なるマップに異なる雰囲気を与えることもできます。重み関数。
簡素化する
もちろん、このアプローチはトレードシミュレーションではないゲームにとっては複雑すぎますが、とにかくこれを解決し、どの種類の建物がゲームにとって意味があるかを確認し、不要な建物を排除します。次に、「都市を河川、山、または土壌に近い場所に配置します。100のリソースごとに1つの建物、リソースの種類に基づいたビジネス、食品/製造用リソースのフルセットごとに10の住宅...または単に」のような単純化されたルールを考え出します。 1mの川/ 1sqmの土は、10の住宅をサポートできます。それでも、あなたがどのくらいの面積を持っているか(急な山腹に建物がないなど)、その面積がサポートできる建物の数がわかったら、そのエリアに建物のセットを配置します。 、3つのインフラストラクチャなど)、それらを道路に接続します。