2016-12-24 3 views
0

私はポーカーゲームを作ってるんだし、これは賭けが終わったかどうかをチェック賭けラウンドのステージです:比較的シンプルなwhileループで最大反復深度エラーが発生し、反復に変換するのに役立ちますか?

def bettingRound(): 
    end = False 
    while end == False: 
     action1 = raw_input(str(playGame().player1)[9:] + ", what is your move? (r/c/f):") 
    if action1 == 'f': 
     playGame().player2.score = playGame().player2.score + 1 
     game().winner = str(playGame().player2)[9:] 
     end = True 
    elif action1 == 'r': 
     raiseAmount1 = raw_input("Raise by: ") 
     playGame().player1.money = playGame().player1.money - raiseAmount1 
     Table.pot = Table.pot + raiseAmount1 
     end = False 
    elif action1 == 'c': 
     end = False 
    action2 = raw_input(str(playGame().player2)[9:] + ", what is your move? (r/c/f):") 
    if action2 == 'f': 
     playGame().player1.score = playGame().player1.score + 1 
     game().winner = str(playGame().player1)[9:] 
     end = True 
    elif action2 == 'r': 
     raiseAmount2 = raw_input("Raise by: ") 
     playGame().player2.money = playGame().player2.money - raiseAmount1 - raiseAmount2 
     Table.pot = Table.pot + raiseAmount1 + raiseAmount2 
     end = False 
    elif action2 == 'c': 
     if action1 == 'r': 
      playGame().player2.money = playGame().player2.money - raiseAmount1 
      Table.pot = Table.pot + raiseAmount1 
      end = False 
     if action1 == 'c': 
      end = True 

奇妙なことは、それも最初のraw_input文を印刷することができないということです。最大再帰深度を増やしてみましたが、スタックオーバーフローが発生します。他の質問を見ると、簡単な解決策は、アルゴリズムを再帰的ではなく反復的にすることですが、これについてどうやって進むべきかについてはわかりません。

PS:かなりありますので、私に行くのコードの多くは、ここで完全なプログラム(128行)を入れている:http://pastebin.com/DSBACdB6

答えて

0

私はそれを再帰的に保つことができるように解決策を考え出しました(長期的にはるかに有用です)。私は別のプレーヤークラスを作る必要がありました:

class Players: 
    player1 = None 
    player2 = None 

def findPlayers(): 
    if randint(0,100) >= 50: 
     Players.player1 = ai 
     Players.player2 = human 
    else: 
     Players.player1 = human 
     Players.player2 = ai 
0

あなたはいくつかの状態を保存ゲームのクラスを持っているあなたのコードをリファクタリングする必要がありnewGame()を呼び出すのではなく、bettingRoundでプレーヤーのマネーを更新しようとすると新しい無限ループを作成しないようにします。クラスを作成したら、関数をメソッドにリファクタリングする機会が増えます。

関連する問題