1

x, y位置にあるオブジェクトが数値型になるように、ゲーム用に地形をランダムに生成しようとしていますf(x, y)(そのため、すべてのオブジェクトの値を保存する必要はありません。都市のような環境を生成しようとしています)。 、それらの間に通りとブロックがあります。

例えば:

# # # # #   # # #   # # # # 
# # # # #   # # #   # # # # 
# # # # #   # # #   # # # # 
# # # # #   # # #   # # # #
# # # # #
# # # # #   # # # # #   # # 
            # # # # #   # # 
# # # # #   # # # # #   # #  
# # # # #   # # # # #   # # 

#   # # # # # # #   # # # # 
#   # # # # # # #   # # # # 
#   # # # # # # #   # # # # 
#   # # # # # # #   # # # #

を使用して、通常のパターンでこのようなものを生成できますf(x, y): (x*y) mod n。ここnで、 は定数であり、結果のタイルは の場合にのみ空になりますf(x, y) == 0

たとえば、nas 5 の場合:

# # # #   # # # #   # # # # 
# # # #   # # # #   # # # # 
# # # #   # # # #   # # # # 
# # # #   # # # #   # # # # 

# # # #   # # # #   # # # # 
# # # #   # # # #   # # # # 
# # # #   # # # #   # # # # 
# # # #   # # # #   # # # # 

# # # #   # # # #   # # # # 
# # # #   # # # #   # # # # 
# # # #   # # # #   # # # # 
# # # #   # # # #   # # # #

最初の例のような結果を得るために、アルゴリズムを変更する (または新しいアルゴリズムを取得する) にはどうすればよいですか?

それとも、私はこれを完全に間違った方法で行っていますか?

4

2 に答える 2

0

多かれ少なかれ必要なものを生成する関数を見つけましたが、それは間違いなく改善される可能性があります。

擬似コード:

function f(x, y):
if x mod size_of_zones == 0 or y mod size_of_zones == 0:
    return 0
elif x % (a number between the maximum and minimum block sizes, randomly picked but the same for each block) == 0:
    return 0
elif y % (a number between the maximum and minimum block sizes, randomly picked but the same for each block) == 0:
    return 0
else:
    return 1

私のコードa number between the maximum and minimum block sizes, randomly picked but the same for each blockはこれでした:

shuffled_list_of_integers_between_min_and_max_block_sizes[(y floordiv zone_size) mod maximum_block_size]

xと_

shuffled_list_of_integers_between_min_and_max_block_sizes[(x floordiv zone_size) mod maximum_block_size]

のためにy

于 2013-10-06T18:56:16.307 に答える