チェスアプリを作る際に手を使っています。コード以下:Python:オブジェクトを2次元配列に格納し、そのメソッドを呼び出す
#file containing pieces classes
class Piece(object):`
name = "piece"
value = 0
grid_name = "____"
class Pawn(Piece):
# Rules for pawns.
#If first move, then can move forward two spaces
name = "Pawn"
value = 1
grid_name = "_PN_"
first_move = True
#Main file
from Piece import *
class GameBoard:
pieces = []
grid = [][]
def __init__(self):
self.grid[1][0] = self.pieces.append(Pawn())
currentBoard = GameBoard()
私がグリッドにあるオブジェクトの値の変数を呼び出したい[1] [0]それはのようなものになります
:
print currentBoard.grid[1][0].value
このコードは、」doesnのを私は、オブジェクトと変数の範囲に関する何かを見逃していると私に伝えます。これはPythonで可能なことですか?
EDIT - ソリューション
私は作品リスト内のオブジェクトのインデックスへの参照を保持するために、グリッドのリストを使用してこの解決策を見つけました。以下のコード:あなたのコードを書き換え
class GameBoard:
# initialize empty board
grid = [["____" for i in range(8)] for j in range(8)]
pieces = []
def __init__(self):
self.grid[0][0] = 0
self.grid[0][1] = 1
self.grid[0][2] = 2
self.grid[0][3] = 3
self.grid[0][4] = 4
self.grid[0][5] = 5
self.grid[0][6] = 6
self.grid[0][7] = 7
self.grid[1][0] = 8
self.grid[1][1] = 9
self.grid[1][2] = 10
self.grid[1][3] = 11
self.grid[1][4] = 12
self.grid[1][5] = 13
self.grid[1][6] = 14
self.grid[1][7] = 15
pieces = []
pieces.append(Pawn())
#grid will return the integer which can be passed to the other list to pull an
#object for using the .value attribute
print pieces[currentBoard.grid[1][0]].value
を行うことであろうワーキング"?おそらく、あなたは 'SyntaxError'に遭遇するはずです:' grid = [] [] '。 –
そのため、 'self.grid [1] [0] = self.pieces.append(Pawn())'これはエラーを投げるかもしれません。それにもかかわらず、リスト 'grid'を持っていれば、' grid [0] [0] .value'のようなリストにあるオブジェクトに属している属性に確実にアクセスできます。それはあなたのコードの問題ではありません。あなたは、Pythonのリストの基礎を読むべきです。 –
@ juanpa.arrivillaga私はあなたが言っているものを見ます。申し訳ありませんが、私はコードの一部を中止しました。そのメソッドを呼び出そうとするとブレークします。私はすでに自分のコンピュータ上のコードの2dリストを初期化しています。私は少し更新するつもりです。申し訳ありません。 –