2017-10-02 18 views
1

私は、Pythonで基本的なテキストベースのゲームのためのマップのために10x10のグリッドを作ろうとしています。 私はMapTileクラスと約(x, y)グリッドを移動することができるプレーヤークラスを作成することができました。しかし、個々のMapTilesを持つクラスのインスタンスを作成する方法はわかりません。私はそれがすべての100 MapTileのためにmaptile1、maptile2 ...等を作成することは任意であると読んだが、私は別の方法を考えることができない..テキストベースのグリッドのクラスの動的インスタンスを作成するにはどうすればよいですか?

私は何を持っている!

# This class contains the x and y values for a grid 
class MapTile: 
    def __init__(self, x, y): 
     self.x = x 
     self.y = y 

# basic char class containing position 
class Character: 
    def __init__(self, name, hp, x, y): 
     self.name = name 
     self.hp = hp 
     self.x = x 
     self.y = y 

    # movement func 
    def Move(self, Direction): 
     if Direction.upper() == "UP": 
      if self.y > 1: 
       self.y -= 1 
     elif Direction.upper() == "LEFT": 
      if self.x > 1: 
       self.x -= 1 
     elif Direction.upper() == "RIGHT": 
      if self.x < 10: 
       self.x += 1 
     elif Direction.upper() == "DOWN": 
      if self.y < 10: 
       self.y += 1 

    def __str__(self): 
     return "{}\n========\nHP = {}\nX = {}\nY = {}".format(self.name, 
                   self.hp, 
                   self.x, 
                   self.y) 

私にはわかりません。

+0

'[x] [y]'で索引付けされた 'list'-of-listsに10x10グリッドの' MapTile'インスタンスを置くか、またはキーの 'タプル' 、y) 'それぞれの位置。 – martineau

+0

私は1つのインスタンスしか持たず、(x、y)座標はリストのリストにする必要がありますか? –

答えて

0

私がコメントで言ったように、MapTileのすべてのインスタンスのコンテナとして、リストのリストまたは辞書を使用する必要があります。ここではそれらの両方を行う方法は次のとおりです。それがために使用されるインデックスまたはキーによってのいずれかをを暗示されるので、このような何かをやって

# This class contains the x and y values for a grid 
class MapTile: 
    def __init__(self, x, y): 
     self.x = x 
     self.y = y 

XDIM, YDIM = 10, 10 

# Create a list-of-lists. 
grid = [[MapTile(x, y) for y in range(YDIM)] for x in range(XDIM)] 

# Create a dictionary with tuple keys. 
grid = {(x, y): MapTile(x, y) for x in range(XDIM) for y in range(YDIM)} 

は、X、MapTileインスタンスに保存されているyの位置情報がやや冗長になりコンテナ内の各インスタンスを参照します。例えば :

grid[1][2]は、最初のケースでMapTile(1, 2)

     を含有する、または

grid[(1, 2)]は、第2のシナリオでMapTile(1, 2)

を含有します。そのため、デザインのMapTileクラスの外に置いておきたい場合があります。それ以外の場合は、使用するように選択したgridコンテナのタイプ内で、MapTileインスタンスの場所が変更されたときにそれらを更新する必要があります。

+0

どうもありがとうございます! –

+0

Matt:もう一つの提案は 'class Game'や' Board'などの別のクラスを作成することです。これは 'grid()'属性を持ち、その作成をコントロールします。それに含まれる 'MapTile'インスタンスのコレクションを操作します(移動や描画など)。また、このクラスには、文字のインスタンスが含まれていても意味があります。 – martineau

+0

私はその考えが好きです!インスタンスを描画するにはどうすればいいですか? –

関連する問題