21点,BlackJack是很流行的一款扑克游戏。开局阶段,给玩家发两张牌(都是明牌),给庄家发两张牌(一张明牌,一张暗牌)。之后玩家可以选择要牌或停止。在玩家停止要牌后,庄家必须一直要牌大于16点。
如果玩家的牌大于22点,则玩家“爆牌”输。如果庄家的牌大于22点,则庄家“爆牌”输。如果大家都没有爆牌,那就开始比较大小,来判断庄家胜利还是玩家胜利。
比较特殊的地方在于,A可以是11或者1。以及JQK都是10点。如果开局直接发到【A,10】,【A,J】,【A,Q】,【A,K】则称为直接获得了BlackJack。如果是玩家获得了BlackJack则玩家直接胜利,如果是庄家获得了Black Jack则玩家直接输。
这个游戏玩家的核心是,根据玩家手上的牌,以及庄家露出来的牌,判断是否要牌。那么我这个程序就是计算何时计算。一般的21点游戏中,都是多副扑克牌。因此可以近似认为每一张牌抽到的概率都是一样大的(即假设从无穷多的牌里面抽牌)。
程序分两个部分,第一个部分是计算庄家露出来的牌,及其最后的概率。先贴结果。
第二个部分是根据目前玩家手中牌的和,计算玩家再【要一张牌】的情况下,【获胜或打平】的概率。注意这里是只要一张牌,所以这个概率可能定量是有问题的。结论是玩家手牌大于等于17后就别再要了。
计算21点的代码参考了
Python实现21点扑克牌游戏_索儿呀的博客-CSDN博客_21点扑克牌游戏python
这个程序就是套一个大循环遍历的
第一段代码
Cards = ['','A','2','3','4','5','6','7','8','9','10','J','Q','K']
values = {1:11,2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8,9:9, 10:10, 11:10, 12:10, 13:10}
def compute_total(hand):
"""计算并返回一手牌的点数和"""
result = 0 #初始化点数和为0
numAces = 0 #A的个数
# 计算点数和A的个数
for card in hand: