2016-05-09 11 views
0

私は構築しているテキストベースのゲームのマップとしてランダムに構築された2次元配列を使用しようとしています。私のようなワールド空間定義する場合:既存の変数からランダム多次元配列を作成する方法

class WorldSpace(object): 
    # Map information: 
    def __init__(self): 
     self.inner = ['g'] * 60 # Creates 60 'grass' tiles. 
     self.outer = [[].extend(self.inner) for x in self.inner] 
     # 'inner' & 'outer' variables define the world space as a 60 x 60 2-D array. 
     self.userpos = self.outer[0][0]  # Tracks player tile in world space. 
     # The variables below are modifiers for the world space. 
     self.town = 't' 
     self.enemy = 'e' 

を私はself.outerの配列データにアクセスするためのforループを使用すると仮定 - 置換されますどのようなタイルを決定するために、多分ランダムモジュールを使用した - しかし、そのデータを特定の修飾子変数でランダムに置き換え、置き換えられるデータの量を制限するにはどうすればよいですか?たとえば、元の草の約25本を交換したい場合は、「g」、タイルを敵、または「e」タイルに置き換えたらどうすればいいですか?多分5つのランダムに配置された町と同じですか?

ありがとうございました。

+1

'x =シャッフル(範囲(60)); y =シャッフル(範囲(60)) 'と置き換えます。 – Natecat

答えて

1

randrangeを使用すると、行と列のインデックスを生成し、そこに敵を追加できます。すでにあります場合は敵か、与えられたセル内の他のオブジェクトは、それをスキップして、ランダム化、新たな座標:

import random 

def add(grid, char, count): 
    while count: 
     row = random.randrange(len(grid)) 
     column = random.randrange(len(grid[0])) 
     if world[row][column] == 'g': 
      world[row][column] = char 
      count -= 1 

使用法:

world = [['g'] * 60 for _ in xrange(60)] 
add(world, 'e', 25) 
add(world, 't', 5) 

あなたの世界、すなわち最も、まばらであるならば、このアプローチは、唯一の理にかなっています世界の草は草です。世界が別のオブジェクトで満たされようとしている場合、自由空間を追跡してそこからランダムにタイルを選択する方が良い方法でしょう。

+0

おかげで。それは素晴らしい仕事だと思われる。ヘルプをよろしくお願いいたします。 – PyDive

関連する問題