現在、2次元配列内にランダム化された世界を作成できます。しかし、私はそれがあまりにもランダムであると感じます。ここで私が現在働いているクラスは、次のとおりです。テキストベースのRPG用に、より一貫してランダムに生成されたワールド空間を作成する
from random import randint, choice, randrange
class WorldSpace(object):
def __init__(self, row, col, world_array):
self.row = row # Number of lists to be created.
self.col = col # Number of indexes inside of each row.
self.world_array = world_array
世界を作成しますWorldSpace
方法:世界を変更
@classmethod
def generate(cls, autogen):
print 'Starting world generation...'
print
if autogen is True:
row_amt = 75
col_amt = 75
else:
row_amt = input('Please specify row length of world array.: ')
col_amt = input('Please specify column length of world array.: ')
if (row_amt or col_amt) == 0:
print 'Invalid world values!'
cls.generateWorld(False)
world_array = [[' ']*col_amt for _ in xrange(row_amt)]
print 'Created world...'
return cls(row_amt, col_amt, world_array)
方法は - 現在だけforests
を作成しますコードの私の完全なセグメントでは、一連の海と山も形成されています。
def modify_world(self, autogen):
if autogen is True:
# Forests:
count = randint(6, 10)
while count > 0:
a = randint(1, (self.row/randint(2, 6)))
b = randint(1, (self.col/randint(2, 6)))
row_val = randint(5, self.row)
count_val = randint(5, 15)
self.genLine_WObj(a, b, row_val, 't', count_val)
count -=1
print('\n'.join([''.join(['{:1}'.format(item) for item in row])
for row in self.world_array]))
inp = input('')
if inp != '':
return
そして実際にforest
タイル作成方法:それは時々、時間の〜20から30パーセント作品ながら、しかし
world = WorldSpace.generate(True)
world.modify_world(True)
:実際にプログラムを実行するために、今すぐ
def genLine_WObj(self, a, b, row_val, char, count):
# 'genLine_WObj' - Generate Line(like) world object.
# Used to place lines of certain characters with psuedo-randomized
# width and length onto the world array.
while count != 0:
row_col_dict = {row_val: (a, b)}
for row in row_col_dict.keys():
startPos, endPos = row_col_dict[row]
for i in range(startPos, endPos):
self.world_array[row][i] = char
b += choice([0, 1])
a += choice([0, 0, 0, 0, 1])
row_val -= 1
count -= 1
を地図の周りのすべての森林を作成する必要がある場合、小さい森林、またはt
文字の小さなペアを生成します。ランダム化された世代をより一貫性のあるものにするためにコードを改善するにはどうすればよいですか?固定
あなたは目標を説明していません。何かが無作為化と一貫性の両方を持つことはできません - それは矛盾しています。 「小さなペア」とはどういう意味ですか?また、あなたのコードには問題があります:たとえば、genLineのwhileループの最初の3行を見てください.1要素の辞書を作成し、その上で "繰り返し"(ループは1回だけ実行されます)し、その変数に明示的に代入した値と、* that *を2つの新しい変数に代入します。そのコードは実際に何もしません。私はあなたのコードをCodeReviewに投稿し、それをきれいにする助けを得ることを提案する。 –