“21点扑克牌游戏”又名黑杰克(Blackjack),是一种流行的扑克游戏。该游戏由两到六个人玩,使用除大小王之外的52张牌,游戏者的目标是使手中的牌的点数之和不超过21点且尽量大。
一手扑克牌的点数的计算规则如下:2至9牌,按其原点数计算;10、J、Q、K牌都算作10点(一般记作T,即Ten);A牌(Ace)既可以算作1点也可以算作11点,由玩家自己决定(当玩家停牌时,点数一律视为最大而尽量不爆,如A+K为21,A+5+8为14而不是24)
21点扑克牌游戏设计思路
计算机人工智能AI作为庄家(House),用户作为玩家(Player)
游戏开始时,庄家从洗好的一副牌中发牌:第1张牌发给玩家,第2张牌发给庄家,第3张牌发给玩家,第4张牌发给庄家
然后,询问玩家是否需要继续“拿牌”,通过一次或多次“拿牌”,玩家尝试使手中扑克牌的点数和接近21。(有些地方的规则有最多只能拿五张牌),在这设定了拿了五张牌后不能再拿牌了。
当玩家决定“停牌”(即,不再“拿牌”),则轮到庄家使用下列规则(“庄家规则”)“拿牌”:如果庄家手中的最佳点数之和小于17,则必须“拿牌”;如果点数之和大于或等于17,则“停牌”。
最后,判断输赢。如果庄家和玩家的点数都超过了21点,则平局。如果只有一方超过21点,则另一方赢大,则获胜。如果都没超过21点,则判断是否有一方拿了五张牌,如果两方都拿了五张牌,则再比较点数,大的赢。如果只用一方拿了五张牌,则这一方赢。再判断是否都是21点,是的话判断是否有人的牌是一张A牌加一张十点的牌,有的话该玩家赢。最后如果以上情况都没有出现的话,则比较点数,点数大的赢,点数相同则平局。
程序的流程

(1)初始化一副洗好的扑克牌(调用函数get_shuffled_deck()),初始化庄家和玩家手中的牌为空
(2)依次给玩家和庄家各发两张牌(调用函数deal_card())
(3)玩家拿牌:询问玩家是否继续拿牌,如果是,继续给玩家发牌(调用函数deal_card())。
(4)庄家拿牌:庄家(计算机人工智能AI)按“庄家规则”确定是否拿牌,如果是,继续给庄家发牌(调用函数deal_card())。
(5)分别计算庄家和玩家的点数,比较点数大小,输出输赢结果信息

import random
def get_shuffled_deck():"""初始化包括52张扑克牌的列表,并混排后返回,表示一副洗好的扑克牌"""suits = {'♣','♠','♦','♥'}#花色ranks = {'2','3','4','5','6','7','8','9','J','Q','K','A'}#序号deck = []for suit in suits:for rank in ranks:deck.append(suit + " " + rank)return deck#random.shuffle(deck)#shuffule函数打乱字典顺序,由于字典已经是无序的,不需要打乱顺序def deal_card(deck,participant):#deck为全部扑克牌,participant为参与者的身份的牌card = deck.pop()#取出打乱后的扑克牌的最上面一张participant.append(card)#加到参与者牌中return participantdef card_total(hand):#计算手中牌数总和values = {'2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8,'9': 9, '10': 10, 'J': 10, 'Q': 10, 'K': 10, 'A': 0}#牌为A时不加result = 0  # 初始化点数和为0count = 0   #A的个数# 计算点数和A的个数for card in hand:if(card[2] == 'A'):#每张牌是一个花色加一个数字,所以从第二个位置开始,有算空格count += 1result += values[card[2:]]for i in range(count):#加上A牌点数if(result < 11):result += 11else:result += 1return resultdef victory_card(player,houst):#判断输赢if(card_total(player) > 21 and card_total(houst) > 21):#都超过了21点print("平局")elif(card_total(player) > 21):#玩家超过21点print("庄家赢")elif(card_total(houst) > 21):#庄家超过21点print("玩家赢")elif(len(player) == 5 and len(houst) == 5):#如果都拿了五张牌,则比较点数if(card_total(player) > card_total(houst)):print("玩家赢")elif(card_total(player) == card_total(houst)):print("平局")elif(card_total(player) < card_total(houst)):print("庄家赢")elif(len(player) == 5):print("玩家赢")elif(len(houst) == 5):print("庄家赢")elif(card_total(player) == 21 and card_total(houst) == 21):#如果都是21点if(A_ten(player) and A_ten(houst)):#判断是否有人牌是A+一张十点的print("平局")elif(A_ten(player)):print("玩家赢")elif(A_ten(houst)):print("庄家赢")else:print("平局")else:#不是五张牌,也没有人牌是一张A加一张十点的if(card_total(player) > card_total(houst)):print("玩家赢")elif(card_total(player) < card_total(houst)):print("庄家赢")elif(card_total(player) == card_total(houst)):print("平局")def A_ten(play):#判断手中牌是否是一张A加一张点数十count1 = 0count = 0if(len(play) != 2):return Falsefor i in play:if(i[2:] == 'A'):count1 += 1elif(i[2:] == '10'):count += 1elif(i[2:] == 'J'):count += 1elif(i[2:] == 'Q'):count += 1elif(i[2:] == 'K'):count += 1if(count == 1 and count1 == 1):return Trueif __name__ == '__main__':deck = []houst = []#庄家的牌player = []#玩家的牌deck = get_shuffled_deck()#初始化牌堆for i in range(2):deal_card(deck, player)#抽取玩家的前两张牌deal_card(deck, houst)#抽取庄家的前两张牌print("玩家的牌为:", player, end=" ")print("总点数为:", card_total(player))answer = input("是否继续拿牌?Y/N:")while(answer == 'Y' or answer == 'y'):#判断玩家是否选择继续拿牌print("玩家的牌为:",deal_card(deck,player),end=" ")print("总点数为:",card_total(player))if(len(player) == 5):#判断玩家牌拿牌是否超过5张,超过则不能拿牌了print("已经拿了五张牌,无法继续拿牌!")breakanswer = input("是否继续拿牌?Y/N:")while(True):#庄家拿牌if(card_total(houst) > 17):#如果庄家的牌小于17点,则拿牌,大于17点则不拿牌breakif(len(houst) == 5):#庄家拿了五张牌breakdeal_card(deck,houst)print("庄家的牌为:",houst,end=" ")print("总点数为:", card_total(houst))victory_card(player,houst)

Python实现21点扑克牌游戏相关推荐

  1. Python计算21点扑克牌概率,判断是否要牌

    21点,BlackJack是很流行的一款扑克游戏.开局阶段,给玩家发两张牌(都是明牌),给庄家发两张牌(一张明牌,一张暗牌).之后玩家可以选择要牌或停止.在玩家停止要牌后,庄家必须一直要牌大于16点. ...

  2. 如何使用Python实现21点小游戏?

    ①导入程序运行所需的包.import random import sys import time ②定义扑克牌类,每个对象代表一张扑克牌.class Card:"""定义 ...

  3. python实现拉大车扑克牌游戏

    拉大车扑克游戏 进行游戏时,每个人分一叠牌,不许看牌,按顺序每人一次出一张牌,后出的压住前面出的,谁出的牌和前面出的一样,可以将这两张相同的牌和被它们夹在中间的牌收走,这收走的牌可以放在手中的牌下面继 ...

  4. python模拟简单的扑克牌游戏

    这个代码实现的是J来家游戏,规则是这样的: 两个玩家随机平分一副扑克牌中的纸牌,然后从最上面出牌,名牌摆出,如果玩家出的牌是J,则将已经落地的名牌全部收归自己,放到自己牌的最下方,再出一张牌:如果出的 ...

  5. Java实验 21点扑克牌游戏

    分别再不同的类中所添加: //类名称:Blackjack_game import java.util.*;public class Blackjack_game {public static void ...

  6. python 实现21根火柴游戏

    游戏规则::有21根火柴,人和计算机轮流拿,人先拿(输入拿几根)计算机后拿,每次至少1根最多4根,拿到最后一根火柴的算输,要确保计算机一定可以获胜 tips:保证计算机最后能拿到20,所以就不能取16 ...

  7. 用python编21点游戏_【Python3】21点游戏

    刚开始学python,试着写了一个21点游戏. 游戏过程就是,一开始给你和庄家(就是电脑啦)各发两张牌,但庄家有一张是暗牌.接下来你可以选择是要牌(hit me)还是停止发牌直接开(stand),要牌 ...

  8. python纸牌游戏_《升级》扑克牌游戏——Python实现

    [实例简介] <升级>扑克牌游戏--Python实现,包括UI界面,AI玩家,裁判监督三大模块. [实例截图] [核心代码] UI └── UI ├── Readme.pdf ├── UI ...

  9. Python 抽扑克牌游戏

    ''' Python 抽扑克牌游戏 by 郑瑞国 ''' import random puke=[x for x in range(1,55)] pukes={} #print(puke)types ...

最新文章

  1. Android Volley入门到精通:初识Volley的基本用法
  2. sqlite3.OperationalError: database is locked
  3. 蓝桥杯 - 翻硬币(贪心)
  4. 浏览器访问web服务器的图解和tomcat体系结构图
  5. PHP聚微商货源网源码
  6. 罗永浩婉拒币圈争相邀请:发币我也会 只是没打算做
  7. c语言常用单词表格,C语言常用单词
  8. 傅里叶变换音频可视化_H5录音音频可视化-实时波形频谱绘制、频率直方图
  9. python for a,b in c
  10. UI 自动化框架对比2
  11. DirectX9初步
  12. 计算机主机usb端口使用不了,解答电脑usb接口不能用怎么解决
  13. 怎么实现CorelDRAW中轮廓图工具的快速运用
  14. cocoscreator热更新
  15. AcWing 342. 道路与航线 (双端队列广搜问题,SPFA)
  16. 信息安全数学基础(仅供个人复习使用)
  17. 有关FLOPS的定义与计算
  18. Springboot整合邮箱报错502解决方法
  19. 基于TCP/IP协议 区别 GET和POST
  20. 《软件工程导论第6版》--张海藩 牟永敏 课后答案及其详解 第5章 总体设计

热门文章

  1. pyecharts基础之柱状图的绘制
  2. python 正则式替换_python 正则表达式参数替换实例详解
  3. Python爬虫基础:安装Scrapy爬虫框架和创建Scrapy爬虫项目
  4. jdk,tomcat安装和配置
  5. [AS3.0] Error #2044: 未处理的 NetStatusEvent:。 level=error, code=NetStream.Record.NoAcces 解决办法...
  6. 学习总结(袁莹君)--python笔记
  7. GPT-4外逃计划曝光!斯坦福教授发现它正引诱人类帮助,网友:灭绝之门
  8. 字符串匹配算法之哈希匹配算法
  9. Python 告诉你:熊市将去,牛市要来!
  10. PHP 微服务开发框架