📜  黑杰克什么时候发生 (1)

📅  最后修改于: 2023-12-03 15:12:57.327000             🧑  作者: Mango

黑杰克什么时候发生

黑杰克(Blackjack)是一款最广为人知的纸牌游戏之一,也称为21点(21 Points)。玩家与庄家比较点数大小,以21点为目标,若点数超过21点则称为爆了(Busted),若点数相等则为平局(Push),其它情况有胜有负。这款游戏起源于法国,发展至今已经有几个世纪的历史。

游戏规则

在黑杰克中,初始时庄家会发两张牌给玩家,玩家也可以通过要牌(Hit)来逐渐增加自己手中的牌,直到不要牌(Stand)或者爆了。庄家也可以要牌,但需要满足一定的规则。最终,比较双方的点数大小,点数更大的一方获胜。

点数大小的计算方法如下:

  • 2~10的牌,点数就是牌面数字;
  • J、Q、K的点数为10;
  • A的点数可以是1或11,取决于哪个点数更有利于玩家;

要想获胜还需要关注以下几点:

  1. 玩家如何要牌?

    玩家如果认为手牌点数小,可以选择要牌,要到符合要求的点数为止。要牌不加超过点数21

  2. 庄家如何要牌?

    如果庄家的手牌点数在17以上,那么他就必须停止要牌;否则,他就必须继续要牌。庄家爆了则玩家获胜。

  3. 其他规则

    • 5张牌总和为21点的情况称为五小龙,玩家赢庄家的1.5倍;
    • 如果第一张牌是10或A,根据牌面可选择加倍或保险;
    • 牌数在52或104的基础上,牌堆的质地和玩法不同而有所不同。
程序员可以选择的编程语言

程序员可以用以下编程语言实现黑杰克游戏:

  • Python
  • Java
  • C++
  • JavaScript

Python 代码示例:

import random

cardList = list(range(1, 11)) * 4 + [10] * 4 * 3
random.shuffle(cardList)

playerCards = [cardList.pop() for _ in range(2)]
dealerCards = [cardList.pop(), -1]

while True:
    print(f'playerCards:{playerCards} sum:{sum(playerCards)}')
    while input('Want another hit(Y/N)?') == 'Y':
        playerCards.append(cardList.pop())
        print(f'playerCards:{playerCards} sum:{sum(playerCards)}')
        if sum(playerCards) >= 21:
            break

    if sum(playerCards) > 21:
        print('Busted!')
    elif sum(playerCards) == 21:
        print('Blackjack!')
    else:
        while sum(dealerCards) < 17:
            dealerCards.append(cardList.pop())

        print(f'playerCards:{playerCards} sum:{sum(playerCards)}')
        print(f'dealerCards:{dealerCards} sum:{sum(dealerCards)}')
        if sum(dealerCards) > 21:
            print('Dealer busted, player wins!')
        elif sum(dealerCards) > sum(playerCards):
            print('Dealer wins!')
        elif sum(dealerCards) < sum(playerCards):
            print('Player wins!')
        else:
            print('Push! No winner!')
    if input('Play again(Y/N)?') == 'N':
        break

返回的代码片段按照markdown标注如下:

```python
import random

#...