我正在创建一个Python应用程序来模拟纸牌游戏战争。在游戏大战中,两个玩家都抽一张牌。获胜者是价值最高的牌。如果抽到的两张牌是平局,玩家必须先抽另一张牌,直到他们抽到不匹配的牌,然后再转入下一回合。在
我写的应用程序应该提示用户,如果他们准备玩一轮。当他们输入“是”时,程序将随机处理两张卡片并打印出赢家。shell中的结果应如下所示:
准备好打一局了吗?是的 玩家甲:4 玩家乙:Q 赢家:玩家B
我几乎把整个程序都写了,但我最纠结的是两张牌打成平手。当两张牌打成平手时,程序应该再抽两张牌,直到两张牌不平手为止。结果如下:
准备好打一局了吗?是的 玩家甲:5 球员乙:5 领带 玩家甲:A 球员乙:3 获胜者:玩家A
目前,当我运行下面的代码时,如果卡牌平局,程序会提示用户再玩一轮。这是不正确的,因为当牌打成平手时,在同一轮中应该再发两张牌。基本上,我认为我需要的是函数war中的while循环,但是我不知道如何设置循环。我目前设置的while循环只是默认回到主功能,然后再画另一张卡。谁能给我提个建议吗?非常感谢大家的帮助。在
import random
def shuffleDeck():
suits = {'\u2660','\u2661','\u2662','\u2663'}
ranks = {'2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A'}
deck = []
for suit in suits:
for rank in ranks:
deck.append(rank + ' ' + suit)
random.shuffle(deck)
return deck
def total(hand):
values = {'2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9, '1':10, 'A':14, 'K':13, 'Q':12, 'J':11}
result = values[hand[0]]
return result
def dealCard(deck):
card = deck.pop(0)
return card
def compareHands(playerOne, playerTwo):
playerOneTotal, playerTwoTotal = total(playerOne), total(playerTwo)
if playerOneTotal > playerTwoTotal:
result = 1
elif playerOneTotal < playerTwoTotal:
result = -1
else:
result = 0
return result
def war(playerOneDeck, playerTwoDeck):
playerOneWins = 0
playerTwoWins = 0
ties = 0
if len(playerOneDeck) > 0:
playGame = input('Ready to play a round? ')
if playGame == 'y':
playerOneCard = dealCard(playerOneDeck)
playerTwoCard = dealCard(playerTwoDeck)
print('Player A: ', playerOneCard[0], '\nPlayer B: ', playerTwoCard[0])
result = compareHands(playerOneCard, playerTwoCard)
if result == 1:
playerOneWins += 1
print('Winner: Player A')
elif result == -1:
playerTwoWins += 1
print('Winner: Player B')
else:
ties += 1
print('Tie')
while result == 0:
war(playerOneDeck, playerTwoDeck)
war(playerOneDeck, playerTwoDeck)
else:
print('End of game. Player A won {} rounds and Player B won {} rounds.'.format(playerOneWins, playerTwoWins))
deck = shuffleDeck()
playerOneDeck = deck[26:]
playerTwoDeck = deck[:26]
war(playerOneDeck, playerTwoDeck)
我找到了一个有效的while循环。我不确定这是否是编写它的最简洁的方式,但是函数war中的while循环现在可以正常工作了。在
相关问题 更多 >
编程相关推荐