问题描述
我目前正在为我的班级开发一款 21 点游戏,我想我已经完成了,但由于某种原因,我陷入了不断重启游戏的无限循环中。你能帮我找到吗?
import random as r
class Card:
def __init__(self,rank,suit,value):
self.rank = rank
self.suit = suit
self.value = value
def __str__(self):
return self.rank + ' of ' + self.suit
class Deck:
def __init__(self):
self.cards = []
self.shuffle()
def shuffle(self):
suits = ['Clubs','Diamonds','Hearts','Spades']
ranks = ['Ace','Two','Three','Four','Five','Six','Seven','Eight','Nine','Ten','Jack','Queen','King']
for suit in suits:
for rank in ranks:
value = ranks.index(rank) + 1
if value > 10: value = 10
if value == 1: value = 11
card = Card(rank,value)
self.cards.append(card)
def deal(self):
if len(self.cards) < 1: self.shuffle()
index = r.randint(0,len(self.cards) - 1)
return self.cards.pop(index)
class Hand:
def __init__(self):
self.cards = []
def deal(self,card):
self.cards.append(card)
return self.value()
def value(self):
score = 0
aces = 0
for card in self.cards:
score += card.value
if card.value == 11: aces += 1
while score > 21 and aces > 1:
score -= 10
aces -= 1
return score
class Game:
def __init__(self):
self.deck = Deck()
self.player = Hand()
self.dealer = Hand()
self.wins = 0
self.losses = 0
self.exit = False
while not self.exit:
self.play()
def play(self):
self.deal()
if self.playerphase():
if self.dealerphase():
if self.player.value() > self.dealer.value():
self.outcome('player')
elif self.player.value() < self.dealer.value():
self.outcome('dealer')
else: self.outcome('pushback')
else: self.outcome('player',bust = True)
else: self.outcome('dealer',bust = True)
def deal(self):
self.player = Hand()
self.dealer = Hand()
for x in range(2):
self.player.deal(self.deck.deal())
self.dealer.deal(self.deck.deal())
def playerphase(self):
stand = False
options = ['hit','stand']
prompts = ["Enter 'hit or 'stand':"]
while not stand:
call = self.display(options,prompts)
if call == 'hit':
self.player.deal(self.deck.deal())
if self.player.value() > 21:
stand = True
else: stand = True
if self.player.value() > 21: return False
else: return True
def dealerphase(self):
while self.dealer.value() < 17:
self.dealer.deal(self.deal.deal())
if self.dealer.value() > 21: return False
else: return True
def display(self,options,prompts,show=False):
user = ''
while user not in options:
for x in range(30): print()
print('Wins: ' + str(self.wins))
print('Losses: ' + str(self.losses))
print('\nDealer: ')
if show: print(self.dealer.cards[0])
else: print('Face-Down Card')
for x in range (1,len(self.dealer.cards)):
print(self.dealer.cards[x])
print('\nPlayer:')
for card in self.player.cards:
print(card)
for prompt in prompts: print(prompt)
user = ''
return user
def outcome(winner,bust = False):
prompts = []
options = ['play','exit']
if winner == 'player':
prompts.append('player wins!')
if bust: prompts.append('dealer busts')
self.wins += 1
elif winner == 'dealer':
prompts.append('Dealer wins :(')
if bust: prompts.append('player busts')
self.losses += 1
else: prompts.append('Pushback!')
call = self.display(options,show = True)
if call == 'exit': self.exit = True
game = Game()
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)