二十一点游戏中的循环错误导致和无限滚动

问题描述

我目前正在为我的班级开发一款 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...