Получить глобальные переменные из игры в блэкджек - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь сделать игру в блэкджек, и у меня возникают значительные проблемы с глобальными переменными руки игроков, руки дилеров и ставкой для сброса или сброса после завершенной руки, чтобы можно было разыграть новую руку. Как я могу избавиться от этих глобальных переменных при обращении к этим переменным в нескольких функциях?

import os
import random
import sys

d = []
p = []
c = input("How many chips do you want: ")
chips = int(c)
b = input("Place your bet: ")
bet = int(b)


def card(x):
    x.append(random.randint(1, 11))


def clear():
    os.system("clear")


def main():
    global p
    global d
    card(p)
    card(p)
    card(d)
    card(d)
    show1()
    check()

    answer = input("Play again? y or n: ")
    if answer == "y":
        bb = list(b)
        bb.clear()
        bet.clear()
        p.clear()
        d.clear()
        main()
    else:
        sys.exit(0)


def show1():
    global d
    global p
    print(str(d[0]) + " []")


print(p)


def show2():

    global d
    global p
    print(d)
    print(p)


def win():
    print("You win")
    chip = chips
    bett = bet
    stash = chip + bett
    print(stash)


def lose():
    print("You lose")
    chip = chips
    bett = bet
    stash = chip - bett
    print(stash)


def check2():
    global p
    global d
    dealer = sum(d)
    player = sum(p)

    if player == 21:
        win()
    elif player > 21:
        lose()
    elif dealer > 21:
        win()
    elif dealer == 21:
        lose()
    elif dealer > player:
        lose()
    else:
        win()


def check():

    global d
    global p

    while sum(p) < 21:
        player = sum(p)
        dealer = sum(d)
        choice = input("Hit or stay? Type h or s: ")

        if choice == "h":
            clear()
            card(p)
            show1()
        elif player >= 21:
            break
        else:
            break

    while sum(d) < sum(p):
        dealer = sum(d)
        player = sum(p)
        card(d)
        clear()
        show2()

        if dealer > player:
            break
        elif dealer >= 21:
            break
        else:
            check2()


main()

1 Ответ

0 голосов
/ 20 января 2020

Вы должны взглянуть на Scopes снова python Scopes . В данном коде вам вообще не нужен ЛЮБОЙ global идентификатор (вы все равно должны стараться их избегать, так что это хорошо для вас). Просто избавиться от всех строк с global в них будет прекрасно.

Я попытался запустить ваш код, и кажется, что вы делаете некоторые странные описания структурно. Если бы я был тобой, я бы снова сел и получил правильную твою Структуру (какая функция вызывает, какой метод, когда это происходит ...), потому что, как я уже видел, ты делаешь некоторые плохие решения.

Только один быстрый пример. Когда вас спрашивают, хотите ли вы «остаться» или «ударить», и вы выбираете «остаться», это вызывает все oop, и игрок теряет контроль над своими картами. Другим примером может быть структура

    if choice == "h":
        clear()
        card(p)
        show1()
    elif player >= 21:
        break
    else:
        break

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

Еще одна вещь будет, использовать os._exit(1) вместо sys.exit(0). sys.exit(0) выдаст какое-то предупреждение, и ваша программа не закроется так, как вы этого хотите.

...