Помогите исправить код на python
Пытался сделать игру 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)
- Когда ты выигрываешь или наоборот выигрываешь, то счетчик очков не сбрасывается.
- Если пользователь ставит
-, то дилер не хочет брать карту и потом все ломается. - Так же когда, когда пользователь все таки набирает эти 21 очка, то приходится еще раз нажимать на
Enter, что не должно было быть. - Ну и последняя ошибка, которая у меня есть - это то, что пользователь может бесконечно нажимать
+и счетчик может дойти до больших значений, что не должно быть.
Ответы (1 шт):
Для начала нужно всё перенести в класс чтобы не путаться с переменными. Но, для того чтобы выиграть, достаточно не брать карту я так понимаю что диллер необязательно берёт карту или есть ещё правила.
Вот исправленный код:
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