私の状況は次のとおりです。BlackJack の実装に取り組んでいます。カード、ハンド、プレイヤー、デッキ、ゲームのクラスがあります。メイン ゲーム オブジェクトにはプレイヤーとデッキが格納され、プレイヤーにはカードを格納するハンドが格納されます。
私はよく次のようなことをします。この例では、各プレイヤーに最初のカードを配っています。
num_cards = 2
for player in self.players:
new_hand = Hand()
for i in range(num_cards):
new_hand.add_card(self.deck.get_next_card())
player.assign_hand(new_hand)
これは見事に機能します。私の問題は、プレーヤーの手のセットから手を削除したいということです (プレーヤーはブラックジャックで分割され、複数のハンドが生成される可能性があります)。次の関数では、各プレイヤーの手札をループするつもりです。ハンドの値が 21 より大きい場合、ハンドを削除します。(以下の remove() 機能は、通常、fold_hand() という名前の Player メソッドを介して呼び出される Player クラスで実行されることに注意してください。私も同じ問題を抱えていたので、説明のためにコードをより見やすい場所に移動しました。)
for player in self.players:
for hand in player.hands:
if hand.smallest_value() > 21:
player.hands.remove(hand)
これは動作しません。明確にするために、 remove() 行の前に手を印刷できますが、その後は印刷されません。つまり、削除されたようです。ただし、プレイの次のターンで、手札は再び戻ってきます。したがって、プレーヤーの手は毎ターン成長します。
上記のコードは、Game クラスの validate_player_hands() という関数にあります。この関数は、ゲームを開始/終了し、主要なゲーム ループを容易にするために存在する play.py というファイルから呼び出されます。したがって、validate_player_hands() への唯一の呼び出しは、ゲーム ループ内の 1 つのインデント内の play.py ファイルにあります。電話する:
game.validate_player_hands()
また、ハンドのインデックスを見つけて「del」キーワードを使用しようとしましたが、結果は同じです。
リスト要素 (player.hands というリスト内の Hand オブジェクト) が削除されたように見えるのに、削除に失敗するのはなぜですか?
前もって感謝します、
パラゴンRG