-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 实际上返回第四个元素)

而且我认为您正在寻找最后的切片:

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

您也不会考虑在战争期间一名玩家用完牌,然后发生另一场战争的情况。(战争卡是平等的,但一个玩家没有更多)。尽管我认为如果您解决了以前的问题,这将解决,尽管有点奇怪。(拥有更多牌的玩家不断对抗相同的面值。

所以,这是一个开始。但是其他人都是对的,您确实需要提供更多有关它如何破坏的信息,以便我们可以更好地帮助您。天知道这些修复是否能解决所有问题,但它们将是朝着正确方向迈出的一步。

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

于 2012-08-23T03:29:54.020 回答