用Python实现21点小游戏(简易)

小游戏程序业务:

由于我不会玩21点,写出来的程序有点瑕疵~ 谢谢理解
21点游戏规则与流程:
  • 玩家共两个角色:电脑和人类,电脑是庄家
  • 判断双方底牌是否直接为21点,如果其中一方为21点则直接判胜利
  • 如果人类牌面的总点数超过了21点,那就直接判输
  • 如果玩家停止要牌了,并且没有超过21点的情况下,则电脑根据概率要牌。
  • 电脑要完牌之后,直接判断人类玩家和电脑玩家的牌面大小判断胜负。
  • 完成一轮游戏的时候,可由人类玩家决定,是否继续玩下一轮
  • 牌堆中剩余的牌数不够玩一轮游戏的时候,由玩家决定是否重新取牌。
  • 计算规则: 2、3、4、5、6、7、8、9、10分别是正常的点数,J、Q、K都是10点
  • A比较特殊,A可以做为1或11。
代码展示
import time
import random


def welcome_game():
    print('欢迎光临21点小游戏')
    time.sleep(1)   # 休眠1秒
    print('祝您玩的愉快')
    game_cmd()

# 判断是否游戏
def game_cmd():
    f_command = input('是否进入游戏?y(进入)/n(退出)')
    if f_command == 'y':
        game_start()
    elif f_command == 'n':
        print('期待您的下次光临')
        quit()
    else:
        print('输入错误,请查证后再次输入')
        game_cmd()

# 新扑克牌列表
def card_list():
    f_list = ['J','Q','K','A']*4
    card_list =[i for i in range(2,11)]*4
    card_list.extend(f_list)
    # 打乱扑克牌顺序
    random.shuffle(card_list)
    return card_list

# 概率控制
def computer_p(score):
    # 前面的数占总数的百分比
    p =  (21-score)/13
    # 如果符合这些情况,就继续要牌,否则返回0
    if p > 1/4 and score < 13 or p > 1/3 and score <16 or p > 1/2 and score <17 or p > 3/4 and score <18:
        x = 1
    else :
        x = 0
    return x

# 计算得分
def sorce(score_list):
    score = 0
    num = score_list.count('A')
    for i in score_list:
        if i == 'J' or i =='Q' or i == 'K':
            score += 10
        elif i == 'A':
            score += 1
        else:
            score += i
    # 21点最多加1个10分
    if num >= 1 and score < 12:
        return score+10
    else:
        return score

# 判断函数
def pd_fun(new_card_list):

    if len(new_card_list) > 8:
        again_cmd = input('请选择是否继续?y/n')
        if again_cmd == 'y':
            x = True
            person = []
            computer = []
            return x, person, computer
        else:
            quit()
    else:
        again_cmd = input('请选择是否继续?y/n')
        print('我要重新取牌了')
        if again_cmd == 'y':
            game_start()
        else:
            quit()

# 开始游戏
def game_start():
    person = []
    computer = []
    # 取出一副顺序随机的扑克牌
    new_card_list = card_list()
    person_score = 0
    computer_score = 0
    x = 1
    while x:
        # 选择是否要牌
        Pcmd = input('请选择是否要牌?:y/n')
        Ccmd = '1'
        if Pcmd =='y':
            # 取出的牌和剩余牌数
            card= new_card_list.pop(-1)
            person.append(card)
            person_score = sorce(person)
            print('你的牌为:', person)
            print('点数和为:', person_score)
            if person_score > 21:
                print('你输了!')

                # 调用函数判断是否继续玩
                x,person,computer = pd_fun(new_card_list)
        else:
            Pcmd = 'n'

        if computer_p(sorce(computer)) == 1:
            card = new_card_list.pop(-1)
            computer.append(card)
            computer_score = sorce(computer)
            #print('电脑牌为:', computer)
            #print('点数和为:', computer_score)
            if computer_score > 21:
                print('电脑输了')

                x,person,computer = pd_fun(new_card_list)
        else:

            Ccmd = 'n'

        if Pcmd == 'n' and Ccmd == 'n':
            if person_score > computer_score:
                print('你的牌面:{},电脑牌面{},你赢了!'.format(person,computer))
            elif person_score == computer_score:
                print('你的牌面:{},电脑牌面{},平局!'.format(person,computer))
            else:
                print('你的牌面:{},电脑牌面{},电脑赢!'.format(person,computer))
            x,person,computer = pd_fun(new_card_list)


if __name__ == '__main__':
    welcome_game()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • 最近玩一款卡牌游戏,就心血来潮做下卡牌游戏总结 一 卡牌游戏分类 一.一 按类型分 1 牌型类扑克麻将 2 rpg...
    剑有偏锋阅读 4,802评论 0 2
  • using System; using System.Collections.Generic; using Sys...
    i_旅途阅读 3,379评论 0 1
  • 问题重述: 大多数赌场使用6副牌或8副牌玩这种游戏,以防止“数牌点”,在你的模拟中使用两副牌(共104张)。只有2...
    Vector_Wan阅读 2,550评论 0 2
  • 观自在菩萨,行深般若波罗蜜多时,照见五蕴皆空,度一切苦厄。 舍利子,色不异空,空不异色,色即是空,空即是色,受想行...
    苏白杞阅读 883评论 1 5
  • 这是@草鱼的第17篇原创文章 这是我在读书会阅读的第5本书,很温暖,很有爱,特别推荐女生看,一定有共鸣。以下为我的...
    冯纫机二代阅读 870评论 0 0