自分で簡単にする方法の 1 つは、ピースがどこにあるかを気にせず、代わりに Board オブジェクトに委譲することです。
import string
class Piece(object):
def __init__(self, type, colour):
self.type = type
self.colour = colour
def __str__(self):
return 'Piece(%(type)s, %(colour)s)' % self.__dict__
class Board(dict):
def __init__(self, width, height):
self.update(
dict(((x,y), None)
for x in string.ascii_lowercase[:width] # alphabetic axis
for y in xrange(1, height+1) # numeric axis
)
)
def setup(self, position_seq):
for type, colour, position in position_seq:
self[position] = Piece(type, colour)
initial_positions = [
('rook', 'W', ('a', 1)),
('knight', 'W', ('b', 1)),
('bishop', 'W', ('c', 1)),
('queen', 'W', ('d', 1)),
('king', 'W', ('e', 1)),
('pawn', 'W', ('a', 2)),
]
b = Board( 8,8 )
b.setup( initial_positions )
print b['a',1] # returns Piece(rook, W)
Boardのsetup
メソッドはタプルのリストを受け取ります。各タプルには、新しいピースをインスタンス化するために必要なデータが含まれており、ボード上のどこに配置するかを指定します。再帰は必要ありません。データをクラスに渡す単純なループだけです。