Python, модифицирующий игру в блэкджек - PullRequest
0 голосов
/ 04 июля 2018

Мне нужна помощь с заданием, которое мне дали.

Меня попросили изменить приведенную ниже секцию из игры в блэкджек, чтобы дилер сдает карту каждому игроку, и выигрывает самая высокая карта, если нет розыгрыша.

Я не могу получить правильный код для этого.

Вот что у меня на месте:

for player in self.still_playing:
            if player.total > self.players.total:
                player.win()
            elif player.total < self.players.total:
                player.lose()
            else:
                player.push()

вот остаток кода:

import Cards, Games

class BJ_Card(Cards.Card):
# Defines a Blackjack card
    ACE_VALUE = 1
    @property
    def value(self):
        if self.is_face_up:
            val = BJ_Card.CARDS.index(self.card) + 1
            if val > 10:
                val = 10
        else:
            val = None
        return val
    # This object returns a number between 1 and 10,
    # representing the value of a Blackjack card

class BJ_Deck(Cards.Deck):
# Defines a Blackjack deck
    def populate(self):
        for suit in BJ_Card.SUITS:
            for card in BJ_Card.CARDS:
                self.cards.append(BJ_Card(card, suit))

class BJ_Hand(Cards.Hand):
# Defines a Blackjack hand
    def __init__(self, name):
        super(BJ_Hand, self).__init__()
        self.name = name
    def __str__(self):
        rep = self.name + ":\t" + super(BJ_Hand, self).__str__()
        if self.total:
            rep += "(" + str(self.total) + ")"
        return rep
    @property
    def total(self):
    # If a card has the value None, then total is None
        for card in self.cards:
            if not card.value:
                return None
        # Add card values
        t = 0
        for card in self.cards:
            t += card.value
        # Check if hand contains an Ace
        contains_ace = False
        for card in self.cards:
            if card.value == BJ_Card.ACE_VALUE:
                contains_ace = True
        # treat Ace as 1
        contains_ace = 1

        return t
    def is_busted(self):
         return self.total > 21

class BJ_Player(BJ_Hand):
# Defines a Blackjack player
     def is_hitting(self):
        response = Games.askYesNo("\n" + self.name + ", do you want another 
card? (Y/N): ")
        return response == "y"
    def bust(self):
        print(self.name, "busts.")
        self.lose()
    def lose(self):
        print(self.name, "loses.")
    def win(self):
        print(self.name, "wins.")
    def push(self):
        print(self.name, "draws.")

class BJ_Dealer(BJ_Hand):
# Defines a Blackjack dealer
    def is_hitting(self):
        return self.total < 17
    def bust(self):
        print(self.name, "busts.")
    def flip_first_card(self):
        first_card = self.cards[0]
        first_card.flip()

class BJ_Game(object):
# Defines a Blackjack game
    def __init__(self, names):
        self.players = []
        for name in names:
            player = BJ_Player(name)
            self.players.append(player)
        self.dealer = BJ_Dealer("Dealer")
        self.deck = BJ_Deck()
        self.deck.populate()
        self.deck.shuffle()
    @property
    def still_playing(self):
         sp = []
        for player in self.players:
            if not player.is_busted():
                sp.append(player)
        return sp
    def __additional_cards(self, player):
        while not player.is_busted() and player.is_hitting():
            self.deck.deal([player])
            print(player)
            if player.is_busted():
                player.bust()
    def play(self):
        # Deal initial 1 card to all players
        self.deck.deal(self.players, per_hand = 1)
        for player in self.players:
            print(player)


        for player in self.still_playing:
            if player.total > self.players.total:
                player.win()
            elif player.total < self.players.total:
                player.lose()
            else:
                player.push()



    # Remove everyone's cards
        for player in self.players:
            player.clear()              


def main():
    print("\nWelcome to the Python Blackjack game.\n")
    names = []
    number = Games.askForNumber("How many players? (2-7): ", low = 2, high = 
8)
    print()
    i = 1
    for i in range(number):
        name = input("Enter player name: ")
        if name == "":
            names.append("Anon")
            print()
            i += 1
        else:
            names.append(name)
            print()
            i += 1
    game = BJ_Game(names)
    again = "Y"
    while again == "y" or again == "Y":
        game.play()
        again = Games.askYesNo("\nDo you want to play again?: ")
main()

1 Ответ

0 голосов
/ 04 июля 2018
self.players

- список классов / объектов BJ_Player. Вы вызываете self.players.total, т.е. пытаетесь получить общее количество свойств списка Python, который не существует, так как это не свойство списка. Я полагаю, вы пытаетесь сделать что-то более похожее;

for player in self.players:
    print(player.total)

таким образом, вы получите доступ к общему количеству игроков. Однако класс BJ_Player, похоже, также не имеет свойства total, поэтому вам необходимо добавить его в класс и затем использовать цикл, подобный приведенному выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...