我的纸牌游戏模拟脚本中的错误

时间:2012-08-23 03:05:25

标签: python simulation

我知道在这里提出这样的问题并不赞成,但我似乎无法解决我的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!"

1 个答案:

答案 0 :(得分: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实际上返回第四个元素)

而且我认为你在那里寻找一个切片:

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

你也不会考虑在战争期间一名玩家用完牌的情况,并且随后会发生另一场战争。 (战争卡片相同,但一个玩家没有更多)。虽然我认为如果你解决以前的问题会解决这个问题,虽然有点奇怪。 (拥有更多牌的玩家会保持对同一面值的争夺。

所以,这是一个开始。但其他人都是对的,你真的需要提供有关它如何破坏的更多信息,以便我们能够更好地帮助你。上帝知道这些修复是否能完成所有事情,但它们将朝着正确的方向迈出一步。

哦,也不要忘记在完成后将战争卡值设置回零,否则你的战争会升级(实际上这可能是一个有趣的功能)。