[小demo]实现21点小游戏

题目:二十一点游戏是玩家要取得比庄家(电脑)更大的点数总和,但点数超过二十一点即为输牌。(不要大王、小王)A算1点,J、Q、K算10点,其余按牌面值计点数。为简化起见,游戏有两方,一方为Dealer(庄家)和一个方Player(玩家),都发明牌, Dealer(庄家)要牌过程由程序自动实现。

游戏能够判断玩家输赢。详细规则:
(1)开始时每人发两张牌,凡点数不足二十一点,可选择继续要牌。
(2)两方轮流要牌,假设Player(玩家)先要牌。电脑要牌原则是不超过17点则继续要牌。
(3)两方都不要牌后,比点数大小,判断输赢。并显示两方牌手的牌。
(4)学生可适当增加功能。

第一个函数,判断列表值是否爆点

def Check(lists):
    sum = 0
    for lis in lists:
        sum += lis
    if sum > 21:
        return False
    else:
        return True

第二模块,返回列表各项之和

def Sum(lists):
    sum = 0
    for i in lists:
        sum += i
    return sum

第三模块,主体。

import random
Dealer = []
Player = []
for i in range(2):    #开局发两张牌
    Dealer.append(random.randint(1,10))
    Player.append(random.randint(1,10))

for i in range(3):    #最多要三张牌
    print("您的手牌为:")
    print(Player)
    yn = input('是否继续要牌')
    if yn == '是' :    #询问是否要牌,如果要就发牌
        Player.append(random.randint(1,10))    #发牌
        if Check(Player):    #没有21点就庄家要牌
            Dealer.append(random.randint(1,10))    #发牌
            if Check(Dealer):    #超21点直接宣布失败
                print('庄家要牌!')
            else:
                print("你赢了!您得手牌为:")
                print(Player)
                print("庄家爆点,手牌为:")
                print(Dealer)
                break
        else:    #超21点直接宣布失败
            print("你输了!您得手牌为:")
            print(Player)
            print("庄家手牌为:")
            print(Dealer)
            break
    else:
        while 1 :
            sum = Sum(Dealer)
            if sum < 17:    #庄家小于17点继续要牌
                print("庄家继续要牌:")
                Dealer.append(random.randint(1,10))
                if Check(Dealer):    #判断是否爆点
                    print("庄家手牌为:")
                    print(Dealer)
                else:
                    print("你赢了!您得手牌为:")
                    print(Player)
                    print("庄家爆点,手牌为:")
                    print(Dealer)
                    break
            else:    #庄家点数超过17,不要牌了
                if Check(Dealer):    #判断庄家是否爆点
                    PlayerSum = Sum(Player)
                    DealerSum = Sum(Dealer)
                    if PlayerSum > DealerSum:    #庄家没有爆点,判断谁的点数大
                        print("你赢了!您得手牌为:")
                        print(Player)
                        print("庄家手牌为:")
                        print(Dealer)
                        break
                    else:
                        print("你输了!您得手牌为:")
                        print(Player)
                        print("庄家手牌为:")
                        print(Dealer)
                        break
                else:
                    print("你赢了!您得手牌为:")
                    print(Player)
                    print("庄家爆点,手牌为:")
                    print(Dealer)
                    break
        break
                
            
            
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

元晖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值