0

このプロジェクトには本当に苦労しました。だから私は「グリッド」別名2D charベクトルを持っています。幅 79 文字、高さ 20 文字。基本的にグリッドの 1 つのエッジから別のエッジへのパスを描画する関数をいくつか作成しました。これらの「パス」はややランダムです..ここでは、ランダムジェネレーターに0〜7のintを選択させ、関数を作成したパスの組み合わせを使用します。だから..グリッドを通過するいくつかのパス/ラインがあります。

次の部分は、グリッド上のこれらのパスに長方形/正方形を配置することでした。何時間もの欲求不満の後、これらの長方形をパス上に配置するプログラムを取得しました。

この次の部分で私は迷ってしまい、どうやって始めればよいのかわかりません。ここで、パスが何らかの方法ですべての四角形を一緒に接続しているかどうかを判断する必要がありますが、四角形に接続できるパスは 1 つまたは 2 つだけです。したがって、四角形の 1 つがパスに接触していない場合は、関数を呼び出して、パスと四角形で新しいグリッドを再生成する必要があります。

パスが 1 つまたは 2 つの場所で四角形に接触しているかどうかを確認できることに加えて、余分なパス文字を削除する必要があります。したがって、パスが別の四角形または必要なパスに接続されていない場合は、その文字を削除する必要があります。

「#」はパスと「.」です。私のプログラムが現在表示するものの例を次に示します。

        #                  #                                                   
        #                  #                                                   
   ........                #         ##############                            
   ........                #         #            # ..........                 
   ........                #         #            ##..........############     
   ........###########     #         #              ..........           #     
###........###########################              ..........           #     
   ........          #     #                        ..........           #     
   ........          #################################                   #     
                     #     #                         #                   #     
                     #     #                         #                   #     
            ........ #     #                         #                   #     
            ........ #     #                      ########################     
            ........ #     #######                #  ........                  
            ........ #           #                #  ........                  
############........##           #                #  ........                  
            ........             ##################  ........##################
            ........                                 ........                  
            ........                                 ........                  

余分な「#」マークと、それらのいくつかが役に立たないことに注意してください。技術的には、パスがフォークしてパスに再接続する場所を削除する必要はありません。技術的には、長方形に境界線を追加するため、それらを複数の場所で接触させることができます..「#」を「.」に直接接続するスポットは1つまたは2つだけです. (今は心配していません)1 '#' 以上の厚さと以前の要件を超えることはできません。これは、必要のないものを削除する方法をどうにかして理解した後、次のようになります。

 ........                          ##############                            
 ........                          #            # ..........                 
 ........                          #            ##..........     
 ........###########               #              ..........                
 ........          #################              ..........                
 ........          #     #                        ..........                
 ........          #################################                        
                   #     #                         #                        
                   #     #                         #                        
          ........ #     #                         #                        
          ........ #     #                      ####     
          ........ #     #######                #  ........                  
          ........ #           #                #  ........                  
          ........##           #                #  ........                  
          ........             ##################  ........
          ........                                 ........                  
          ........                                 ........                  

私が得た最も近いものは、パスが特定の場所からどの方向に向かうかを検出することです..しかし、「#」を削除する方法や島の長方形をチェックする方法にそれを使用する方法がわかりません。

助けてください:(これを行う方法がわかりません!さらに情報が必要な場合はお知らせください。

4

1 に答える 1

2

これはまさにあなたが求めているものではありませんが、Rogue のような 2D ダンジョン生成のための理想的なアルゴリズムは何ですか? Dungeon Generationおよびこの 1 つのDungeon-Building Algorithmには、C++ コード例もあります。rouge-likeまた、同じことを行わなければならないゲームのコードもあります。

于 2013-03-14T02:44:58.913 に答える