2017-01-16 8 views
0

チェスゲームを作成しようとしていて、私のPawnを移動しようとしているときに上記のエラーが発生しています。 my_board[0][0].passive_move()の私の最初の呼び出しはうまく動作し、オブジェクトを2番目のリストに正しく移動します。しかし、私はすぐにそれを呼び出すと、オブジェクトを3番目のリストに移動するのではなく、タイトルにエラーが表示されます。AttributeError: 'str'オブジェクトに属性(メソッド)がありません

__author__ = 'admin' 

class Pawn: 
    def __init__(self, y, x): 
     self.board = my_board 
     self.y = y 
     self.x = x 

    def __str__(self): 
     return "Pawn" 

    def passive_move(self): 
     self.board[self.y+1][self.x] = self 
     self.board[self.y][self.x] = chr(self.y+65)+str(self.x+1) 
     self.y += 1 

class ChessBoard: 
    def __init__(self): 
     self.board = self.create_board 

    def create_board(self): 
     game_board = [] 
     letters = ["A", "B", "C", "D", "E", "F", "G", "H"] 
     for x in range(len(letters)): 
      game_board.append([]) 
      for y in range(1, 9): 
       game_board[x].append(str(letters[x])+str(y)) 

     return game_board 

if __name__ == "__main__": 
    my_board = ChessBoard().create_board() 

    for x in range(len(my_board)): 
     my_board[0][x] = Pawn(0, x) 


    my_board[0][0].passive_move() 
    my_board[0][0].passive_move() 


    print(my_board) 
+1

「Pawn.passive_move()」の2行目の意味は分かりますか? –

+0

オブジェクトの前の位置を元の座標に置き換えませんか?少なくとも私の意図でした。 – Perplexityy

+1

...いいえ、文字列をリストに挿入します。 –

答えて

0

問題は、同じボード上の二回passive_moveを呼んでいるということである座標:

最初の呼び出しの後
my_board[0][0].passive_move() 
my_board[0][0].passive_move() 

、その広場に当初のポーンは1を上に移動しているだろう、と正方形はPawnインスタンスではなく文字列を保持します。文字列にはpassive_moveメソッドがないため、2番目の呼び出しでエラーが発生します。

boardのインデックスを1つだけ作成し、取得したPawnインスタンスへの参照を保存した場合は、2回移動するように指示できます。

pawn = my_board[0][0] 
pawn.passive_move() 
pawn.passive_move() 
関連する問題