チェスをAIでプレイしていて、moveを選択した現在ゲームの状態を返すminimaxアルゴリズムがあります:board、white_pieces、black_pieces。クラス内のPythonグローバル変数がクラスメソッドで更新されていません
私のチェスクラスは、状態の生成と保守を処理します。それはいくつかのグローバル変数を持っています:
__board
__white_pieces
__black_pieces
これは、クラス内で宣言されていますが、どのメソッドの外でも宣言されています。これはグローバル変数にする必要があります。
ゲームの開始時に、これらはbuild_boardメソッドを使用して初期化されます(コードをテストするために必ずしも実装されているわけではありません)。コードをテストしたので、の()メソッドに移動できたと思います。
def build_board(self):
for i in range(1, 17):
self.__board[self.__white_pieces[i][1]] = i
self.__white_pieces[i][3] = True
self.__board[self.__black_pieces[i][1]] = -1 * i
self.__black_pieces[i][3] = True
for i in range(0, 20):
self.__board[i] = 99
for i in range(100, 120):
self.__board[i] = 99
for i in range(0, 8):
self.__board[20 + 10 * i] = 99
self.__board[20 + 10 * i + 9] = 99
これは、変更可能なタイプのリストを使用しているため、これは意味があると仮定しています。もちろん問題ありません。ボードが編集されます。その後
、私はゲームがミニマックスによって返されたゲームの状態を取り、それらのグローバル変数を更新作るしようとすると、これらのどちらもがそれを更新するように見える:
def play_move(self,board,white_pieces,black_pieces):
global __board
global __white_pieces
global __black_pieces
__board = board
__white_pieces = white_pieces
__black_pieces = black_pieces
または
def play_move(self,board,white_pieces,black_pieces):
self.__board = board
self.__white_pieces = white_pieces
self.__black_pieces = black_pieces
クラス内のグローバル変数の仕組みについて誤解していますか?誰かが私のためにこれをクリアすることができればそれは素晴らしいだろう。ありがとう!
編集: 私はplaymoveメソッドでself .__ board、self .__ white_pieces、self .__ black_pieces tupleを返すこともできます。実際に更新された動きであれば印刷します。メソッド内で、その結果を別のメソッドに渡すと、self .__ xxxxxが更新されたことが示されます。しかし、そのメソッドの外側からは、グローバル変数を更新するようには見えません。
あなたはそれらがグローバルであると言いますが、あなたはそれらを「自己」を使ってアクセスします。メンバーですか、グローバルですか?グローバルと同じ名前のメンバーを作成してから変更するようです。グローバルを変更することはありません。また、グローバルを使用しないでください。 – Carcigenicate
私は、ボードの現在の状態をデフォルトにするメソッドを持っています。たとえば、次のように デフFUNC(自己、プレイヤー、B = __ボード、WP = __ white_pieces、BP = __black_pieces) ... 私はこのようにそれを行うことができないため、これは次のとおりです。 デフFUNC(自己、プレイヤー、 bp = self .__ white_pieces、bp = self .__ black_pieces) .... というのは、デフォルト値が実行時ではなく関数定義時にコンパイルされているからです(自己がインスタンス化されたとき)。 これ以外の解決策は何ですか?各方法は、ボードの現在の状態にアクセスしてそれを変更できる必要があります。 –
私はshift + enterではなくenterを押して申し訳ありません - 私はそれを忘れるstackoverflow Enter ==投稿 –