21点(BlackJack)扑克游戏,挑战用100行代码实现

在这里插入图片描述

21点(BlackJack)扑克游戏,挑战用100行代码实现


本人平时喜欢与朋友们玩玩21点与德州扑克,特别是看了《决胜21点》后,很想自己写一款简单的21点游戏。趁着清明节小长假闲来无事在家中试着实现了一下。感兴趣的朋友可以和我一起练习!

首先我做的,就是把实现的路径规划下来,以下就是我的大致思路:

  1. 将游戏规则写下来
  2. 将规则编程化

在这里插入图片描述

一. 21点游戏规则
1. 四种花色,13张牌,共52张牌。然而在21点游戏中,花色没有任何权重,也没有孰强孰弱之分,所以其实就是A,2,3,4,5,6,7,8,9,10,10(J),10(Q),10(K)乘以4
2. A比较特殊,可以算作是1,也可以算作是11,要看情况来区别对待
3. Dealer进行发牌,给选手发两张牌,给自己发两张牌,选手看得到Dealer的其中一张牌
4. 选手选择是否要牌,如果要,系统发一张牌,直到爆掉之前,选手可以一直要牌
5. 选手选择是否要牌,如果不要,dealer继续给自己发牌。直到爆牌或者到21点,不到17一直要牌

二. 将规则编程化

  1. 首先我们看第一个规则,“四种花色,13张牌,共52张牌。然而在21点游戏中,花色没有任何权重,也没有孰强孰弱之分,所以其实就是A,2,3,4,5,6,7,8,9,10,10(J),10(Q),10(K)乘以4”。我们建立一个牌库。我们将牌库命名为cards,并且暂且先把A当成是11点。
cards = [
    11,2,3,4,5,6,7,8,9,10,10,10,10,
    11,2,3,4,5,6,7,8,9,10,10,10,10,
    11,2,3,4,5,6,7,8,9,10,10,10,10,
    11,2,3,4,5,6,7,8,9,10,10,10,10
]
  1. “A比较特殊,可以算作是1,也可以算作是11,要看情况来区别对待”。于是,我们为A牌专门创建一个规则。
def player_if_ace(player_cards):#判断玩家/庄家手中是否有A牌
    if 11 in player_cards:#假设玩家/庄家拿到了A牌(之前我们将A预先设置成了11点)
        if sum(player_cards) > 21:#当玩家/庄家的所有手牌相加超过了21点,那自然就要把11点往下降变成1点,从而避免爆牌
            location = player_cards.index(11)#在list中找到玩家/庄家的11点所在的位置
            player_cards[location] = 1#找到list中的11点,并替换成1点
            return player_cards#将新的1点返回到玩家/庄家手牌中
        else:
            return player_cards#如果手牌相加并没有到21点,则A保持11点
    else:
        return player_cards#如果玩家/庄家并没有A,则保持现状
  1. “Dealer进行发牌,给选手发两张牌,给自己发两张牌,选手看得到Dealer的其中一张牌”
    player_cards = [random.choice(cards), random.choice(cards)]#玩家的两张手牌随机生成
    player_cards = player_if_ace(player_cards)#判断手牌中是否有A,再进行新的定义

    dealer_cards = [random.choice(cards), random.choice(cards)]#庄家的两张手牌随机生成
    dealer_cards = player_if_ace(dealer_cards)#判断手牌中是否有A,再进行新的定义

系统进行提示,告诉我们自己的两张牌是什么,相加后是什么,并且和我们说庄家的其中一张牌是什么

    print('******* 游戏开始,你的牌是:' + str(player_cards[0]) + '和' 
          + str(player_cards
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值