Помогите исправить код black jack на python

Рейтинг: -2Ответов: 1Опубликовано: 28.05.2023

Я пытаюсь создать игру black jack на python, но столкнулся с большим количеством ошибок в коде, которые сам не могу исправить.

"В black jack цель игры состоит в том, чтобы набрать 21 очко или сумму очков, близкую к этому числу. Если сумма очков игрока превышает 21, его ставка проигрывает. Если сумма очков на картах дилера превышает 21, все оставшиеся ставки выигрывают. Игроки, чья сумма очков больше, чем у дилера, выигрывают, и на их ставки выплачивается коэффициент 1:1.

Ниже приведен весь код и список ошибок, с которыми я столкнулся.

import random

score = random.randint(4, 20) #пользователь
scoreBot = random.randint(4, 20) #дилер

print("Поиграем в твое очко!")
print("Если ты набрал 21, то нажми \n'Enter'")
print("Если больше не хочешь играть, то напиши английскую 'e'")

state = ("Победил", "Проиграл")

class Game:
    isWin = 0
    
    def getCard(self):
        return random.randint(2,10)
    def AI(self):
        if scoreBot < 21:
            scoreBot += getCard()

    def getResult(self):
        if score > scoreBot: isWin = 1
        else:
            isWin = 0

        if score > 21:
            win = 0
            print("У противника ",scoreBot," очков, у тебя ", score)
            print("Ты", state[isWin])
            print("Если хочешь сыграть еще, то нажми \n'Enter'")
            print("------------")

        if score == 21:
            win = 1
            print("У противника ",scoreBot," очков, у тебя ", score)
            print("Ты выйграл!")
            print("Если хочешь сыграть еще, то нажми \n'Enter'")
            print("------------")
            
        
        

game=Game()
choose = ''
while choose != 'e':
    if score > 21:
        game.getResult()
    print("У противника ",scoreBot," очков, у тебя ", score)
    choose = input('Взозьмешь карту? (+)/(-)\n')

    if choose == '+':
        score += game.getCard()
    elif choose == '-':
        print(" Ты набрал ", score)
    else: 
        game.getResult()
        score = random.randint(4, 20)
        scoreBot = random.randint(4, 20)

  1. Когда ты выигрываешь или наоборот выигрываешь, то счетчик очков не сбрасывается.
  2. Если пользователь ставит -, то дилер не хочет брать карту и потом все ломается.
  3. Так же когда, когда пользователь все таки набирает эти 21 очка, то приходится еще раз нажимать на Enter, что не должно было быть.
  4. Ну и последняя ошибка, которая у меня есть - это то, что пользователь может бесконечно нажимать + и счетчик может дойти до больших значений, что не должно быть.

Ответы

▲ 2Принят

Для начала нужно всё перенести в класс чтобы не путаться с переменными. Но, для того чтобы выиграть, достаточно не брать карту я так понимаю что диллер необязательно берёт карту или есть ещё правила.
Вот исправленный код:

import random


def get_card():
    return random.randint(2, 10)


class Game:
    def __init__(self):
        self.score = random.randint(4, 20)  # пользователь
        self.scoreBot = random.randint(4, 20)  # дилер

    def game_step(self):
        print("У противника ", self.scoreBot, " очков, у тебя ", self.score)
        choose = input('Возьмешь карту? (+)/(-)\n')
        if choose == 'e':
            return False  # Если игрок хочет выйти выходим из цикла

        if choose == '':
            self.print_over(self.get_result())  # Заканчиваем игру если игрок ввёл Enter
            self.__init__()  # Обнуляем класс
            return True

        if choose == '+':
            self.score += get_card()  # если игрок ввёл + добавляем карту
            if self.score == 21:
                self.print_over(True)  # если счёт 21, то игрок выиграл
                self.__init__()
            elif self.score > 21:
                self.print_over(False)  # если больше то проиграл
                self.__init__()
        elif choose == '-':
            print(" Ты набрал ", self.score)
            self.ai_step()  # Если игрок ввёл - то дилер делает ход
            if self.scoreBot > 21:
                self.print_over(True)  # если счёт дилера больше 21, то игрок выиграл
                self.__init__()

        return True

    def ai_step(self):
        self.scoreBot += get_card()

    def get_result(self):
        """
        Проверяет выигрыш
        :return: True - выиграл False - Проиграл
        """
        if self.score > self.scoreBot or self.score == 21 and self.score < 21:
            return True
        else:
            return False

    def print_over(self, result):
        """
        Выводит сообщение о конце игры
        :param result: Результат игрока
        :return:
        """
        print("У противника ", self.scoreBot, " очков, у тебя ", self.score)
        if result:
            print("Ты выиграл!")
        else:
            print("Ты проиграл!")
        print("------------")


game = Game()  # Создаём новую игру

print("Поиграем в твое очко!")
print("Если больше не хочешь играть, то напиши английскую 'e'")

while game.game_step():  # Играем пока не False
    pass