我知道在这里提出这样的问题并不赞成,但我似乎无法解决我的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!"
答案 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])
你也不会考虑在战争期间一名玩家用完牌的情况,并且随后会发生另一场战争。 (战争卡片相同,但一个玩家没有更多)。虽然我认为如果你解决以前的问题会解决这个问题,虽然有点奇怪。 (拥有更多牌的玩家会保持对同一面值的争夺。
所以,这是一个开始。但其他人都是对的,你真的需要提供有关它如何破坏的更多信息,以便我们能够更好地帮助你。上帝知道这些修复是否能完成所有事情,但它们将朝着正确的方向迈出一步。
哦,也不要忘记在完成后将战争卡值设置回零,否则你的战争会升级(实际上这可能是一个有趣的功能)。