【21点(BlackJack)python代码实现(二)】

本文详细介绍了使用Python实现的21点游戏,包括容器的构建(如DICT、MACRO和ODDS)、函数的编写(如Cardset、Playerset、Hit等),以及关键游戏流程(如初始发牌、计分和比较)。
摘要由CSDN通过智能技术生成


在这里插入图片描述

容器编写(初始化):

容器承载数据
DICT(本局记录牌和筹码){ ‘master’:[ [[明牌],[暗牌]] , [本局筹码得失] ], name1:[ [牌] , [本局筹码得失] ] }
MACRO(宏观记录牌和筹码){ ‘master’:总筹码 , name1:总筹码 }
ODDS(本局记录赔率){ ‘master’:赔率 , name1:赔率 }
DICT={'master':[[['?'],[]],[]]}
MACRO={'master':0}
ODDS={'master':0}

函数编写:

函数功能
Cardset()设置牌堆(生成n套牌,打乱)
Playerset()设置玩家
Hit(name=‘master’)拿牌
Split(name=‘master’)分牌
Double(name)双倍下注
Insurance(name)保险
Surrender(name)投降
Beginning()初始发牌(庄家(明牌,暗牌);玩家2张明牌)
score_master()统计庄家点数
score_player(name)统计玩家点数
Compare(name)玩家与庄家比较点数,并结算
Main()主程序

Cardset()

def Cardset():
    set_num=int(input('set number: '))
    a_set=[]
    for x in [str(i) for i in range(2,11)]+['A','J','Q','K']:
        for y in ['Heart','Spade','Club','Diamond']:
            a_set.append((x,y))
    sets=set_num*a_set
    
    #打乱
    import random
    random.shuffle(sets)
    
    #使用deque()构建队列
    import collections
    global cardsets
    cardsets=collections.deque()    
    for i in sets:
        cardsets.append(i)
     

Playerset()

def Playerset():
    money_master=int(input('$<master>$: '))
    MACRO['master']=money_master
    
    player_num=int(input('player number: '))
    for i in range(player_num):
        name=input('name: ')
        DICT[name]=[[],[0]]
        money_player=int(input('$<player>$: '))
        MACRO[name]=money_player
 

Hit(name=‘master’)

def Hit(name='master'):
    DICT[name][0].append(cardsets[0])
    cardsets.popleft()
    

Beginning()

def Beginning():
    for name in DICT:
        if name=='master':
            DICT[name][0][1]=cardsets[0]
            cardsets.popleft()
            Hit()
        else:
            Hit(name)
            Hit(name)
  

score_master()

def score_master():
    count_A=0
    score_m=int(DICT['master'][0][1])       #先加暗牌 
    for i in DICT['master'][0][0]:
        if i != '?':
            if i[0] in ['J','Q','K']:
                score_m+=10
            elif i[0]=='A':
                count_A+=1
                score_m+=1
            else:
                score_m+=int(i[0])      #i是元组(点数,花色)
            
            if count_A>0:
                if score_m+11>21:
                    print('A -> only 1') 
                else:
                    print('A -> 11 or 1')      
    return score_m

score_player(name)

def score_player(name):
    count_A=0
    score_p=0
    for i in DICT[name][0]:
        if i[0] in ['J','Q','K']:
            score_p+=10
        elif i[0]=='A':
            count_A+=1
            score_p+=1
        else:
            score_p+=int(i[0])
        
        if count_A>0:
            if score_p+11>21:
                print('A -> only 1') 
            else:
                print('A -> 11 or 1')
                           
    return score_p

Compare(name)

def Compare(name):
    if score_player(name) > score_master():
        DICT['master'][1][0]-=DICT[name][1][0]
        DICT[name][1][0]*=2        
    else:
        DICT['master'][1][0]+=DICT[name][1][0]
        DICT[name][1][0]=0 
        
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值