【发布时间】:2020-01-20 15:14:46
【问题描述】:
我正在尝试制作二十一点游戏,但我在玩家手牌、庄家手牌的全局变量以及在完成一手牌后重置或清除下注以便可以玩新手牌时遇到很大问题。如何在多个函数中引用这些变量时摆脱这些全局变量?
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()
【问题讨论】:
-
您可以使用classes 来包含和访问您的游戏相关功能,这将使您能够更合理地组合在一起。
-
这里的垂直空间太大。我还通过
black格式化程序运行了您的代码,以便它可读。 -
另外,这在 codereview.stackexchange.com 上可能更好
-
一个起点是将所有全局状态放入一个名为
Game或GameState的类中。然后,所有其他方法要么接受GameState作为参数,要么是Game的成员函数。