-3

ここでこのような質問をすることに眉をひそめていることは知っていますが、Pythonスクリプトからすべてのバグを解決することはできないようです。戦争ゲーム (カード ゲーム) をシミュレートします。それは完璧に機能するはずです。私よりもPythonをよく知っている人が私のスクリプトを見て、基本的にそれを修正しようとしたら、本当に感謝しています。

import random

cards = ['ace', 'ace', 'ace', 'ace', '1', '1', '1', '1', '2', '2', '2', '2', '3', '3', '3', '3', '4', '4', '4', '4', '5', '5', '5', '5', '6', '6', '6', '6', '7', '7', '7', '7', '8', '8', '8', '8', '9', '9', '9', '9', '10', '10', '10', '10', 'jack', 'jack', 'jack', 'jack', 'queen', 'queen', 'queen', 'queen', 'king', 'king', 'king', 'king']

order = ['ace', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'jack', 'queen', 'king'] 
warcardvalue0 = 0
warcardvalue1 = 0
print "shuffling cards" 
cards = random.shuffle(cards,random.random)
print "lets play"
player0 = [cards[i] for i in range(len(cards)) if i % 2 == 1]

player1 = [cards[i] for i in range(len(cards)) if i % 2 == 0]

while (len(player0) > 0 or len(player1) > 0):

    nextcard0 = player0[0]
    nextcard1 = player1[0]

    cardplayed0 = order.index(nextcard0)

    cardplayed1 = order.index(nextcard1)

    if cardplayed0 > cardplayed1:

        player0.append(nextcard0)
        player0.append(nextcard1)
        player0.remove(nextcard0)
        player1.remove(nextcard1)

    elif cardplayed0 < cardplayed1:

        player1.append(nextcard1)
        player1.append(nextcard0)
        player1.remove(nextcard1)
        player0.remove(nextcard0)

    elif cardplayed0 == cardplayed1:
        while warcardvalue0 == warcardvalue1:
            if len(player0) >= 4:
                warcard0 = 4
            elif len(player0) < 4:
                warcard0 = len(player0)

            if len(player1) >= 4:
                warcard1 = 4
            elif len(player1) < 4:
                warcard1 = len(player1)


            warcardvalue0 = order.index(warcard0)
            warcardvalue1 = order.index(warcard1)

            if warcardvalue0 > warcardvalue1:
                player0.append(player0[range(warcard0 + 1)])
                player0.append(player1[range(warcard1 + 1)])
                player0.remove(player0[range(warcard0 + 1)])
                player1.remove(player1[range(warcard1 + 1)])

            elif warcardvalue0 < warcardvalue1:
                player1.append(player1[range(warcard1 + 1)])
                player1.append(player0[range(warcard0 + 1)])
                player1.remove(player1[range(warcard1 + 1)])
                player0.remove(player0[range(warcard0 + 1)]) 
            else:
                print "another war!" 


if len(player1) == 0:
    print "player1 won!"
elif len(player0) == 0:
    print "player0 won!"
4

1 に答える 1

2

ええと、まず、あなたが望むと思います

warcardvalue0 = order.index(warcard0)
warcardvalue1 = order.index(warcard1)

することが

warcardvalue0 = order.index(player0[warcard0])
warcardvalue1 = order.index(player1[warcard1])

したがって、数字の 4 ではなく、戦争カードの実際の値を取得しています。

あなたもやりたいかもしれません:

        elif len(player1) < 4:
            warcard1 = len(player1)-1

それ以外の:

        elif len(player1) < 4:
            warcard1 = len(player1)

したがって、配列の最後を使い果たしているわけではありません。

また、戦争カードの値を静的に設定するのではなく、インクリメントして、複数の階層化された戦争を戦えるようにする必要があります。読みやすくするために、再帰関数を考えることができます。またはこれ:

        if len(player0) >= warcard0 + 4:
            warcard0 = warcard0+3
        elif len(player0) < warcard0 + 4:
            warcard0 = len(player0)-1

(配列はゼロベースであるため、インデックス 3 は実際には 4 番目の要素を返すことに注意してください)

そして、最後にスライスを探していると思います:

            player1.append(player1[0:warcard1+1])

また、戦争中に 1 人のプレイヤーがカードを使い果たし、別の戦争が続いた場合も考慮しません。(戦争カードは等しいが、1 人のプレイヤーがそれ以上持っていない場合)。これは前の問題を解決すれば解決すると思いますが、少し奇妙です. (より多くのカードを持っているプレーヤーは、同じ額面に対して戦い続けます。

それで、それは始まりです。しかし、他の誰もが正しいです。私たちがあなたをより良く助けることができるように、それがどのように壊れたかについてより多くの情報を提供する必要があります. 主は、これらの修正がすべてを行うかどうかを知っていますが、正しい方向への一歩になるでしょう.

また、完了したら戦争カードの値を 0 に戻すことを忘れないでください。

于 2012-08-23T03:29:54.020 に答える