python实现21点小游戏

yizhihongxing

Python实现21点小游戏攻略

游戏规则

21点又称为“Blackjack”,是一种非常流行的纸牌游戏,在游戏中需要计算分数,使得自己的分数不超过21。下面介绍一下游戏规则:

  • 此游戏使用1副牌,先出牌者为庄家;
  • 点数计算:A为1或11点,其他牌按面值计算,J、Q、K算10点;
  • 游戏开始时,庄家随机发放2张牌给玩家和自己;
  • 玩家先行动,可以选择“要牌”或“停牌”;
  • 如果第一次点数不超过21,玩家可以再次要牌,一直到停止(停牌)或点数超过21为止;
  • 如果超过21点,玩家立刻输掉游戏;否则由庄家出牌,庄家可以选择相同的策略;
  • 如果庄家超过21点,则玩家获胜;
  • 如果玩家和庄家都不超过21点,则点数大者获胜;
  • 第一轮结束后,若玩家获胜,则赔率为1:1,即如果玩家下注100元,获胜后可以拿回200元;
  • 如果庄家获胜,或和局,则玩家输掉所有下注的筹码。

实现过程

步骤 1. 初始化

首先,我们需要导入random模块,并定义cards列表,其中包含52张牌:

import random

cards = [
    {'type': 'spade', 'point': 'A'},
    {'type': 'spade', 'point': '2'},
    {'type': 'spade', 'point': '3'},
    {'type': 'spade', 'point': '4'},
    {'type': 'spade', 'point': '5'},
    {'type': 'spade', 'point': '6'},
    {'type': 'spade', 'point': '7'},
    {'type': 'spade', 'point': '8'},
    {'type': 'spade', 'point': '9'},
    {'type': 'spade', 'point': '10'},
    {'type': 'spade', 'point': 'J'},
    {'type': 'spade', 'point': 'Q'},
    {'type': 'spade', 'point': 'K'},

    {'type': 'heart', 'point': 'A'},
    {'type': 'heart', 'point': '2'},
    {'type': 'heart', 'point': '3'},
    {'type': 'heart', 'point': '4'},
    {'type': 'heart', 'point': '5'},
    {'type': 'heart', 'point': '6'},
    {'type': 'heart', 'point': '7'},
    {'type': 'heart', 'point': '8'},
    {'type': 'heart', 'point': '9'},
    {'type': 'heart', 'point': '10'},
    {'type': 'heart', 'point': 'J'},
    {'type': 'heart', 'point': 'Q'},
    {'type': 'heart', 'point': 'K'},

    {'type': 'club', 'point': 'A'},
    {'type': 'club', 'point': '2'},
    {'type': 'club', 'point': '3'},
    {'type': 'club', 'point': '4'},
    {'type': 'club', 'point': '5'},
    {'type': 'club', 'point': '6'},
    {'type': 'club', 'point': '7'},
    {'type': 'club', 'point': '8'},
    {'type': 'club', 'point': '9'},
    {'type': 'club', 'point': '10'},
    {'type': 'club', 'point': 'J'},
    {'type': 'club', 'point': 'Q'},
    {'type': 'club', 'point': 'K'},

    {'type': 'diamond', 'point': 'A'},
    {'type': 'diamond', 'point': '2'},
    {'type': 'diamond', 'point': '3'},
    {'type': 'diamond', 'point': '4'},
    {'type': 'diamond', 'point': '5'},
    {'type': 'diamond', 'point': '6'},
    {'type': 'diamond', 'point': '7'},
    {'type': 'diamond', 'point': '8'},
    {'type': 'diamond', 'point': '9'},
    {'type': 'diamond', 'point': '10'},
    {'type': 'diamond', 'point': 'J'},
    {'type': 'diamond', 'point': 'Q'},
    {'type': 'diamond', 'point': 'K'},
]

另外,我们还需要定义每张牌的点数,以及玩家和庄家的得分:

def get_point(point):
    if point.isdigit():
        return int(point)
    elif point in ('J', 'Q', 'K'):
        return 10
    else:
        return 11

player_point = 0
dealer_point = 0

步骤 2. 发牌

接着,我们需要实现发牌的函数。由于发牌需要从52张牌中随机选择一张,因此我们可以用random.choice(cards)函数实现:

def deal_card():
    return random.choice(cards)

玩家和庄家都需要两张牌,因此我们可以循环执行两次:

for i in range(2):
    player_card = deal_card()
    dealer_card = deal_card()

    player_point += get_point(player_card['point'])
    dealer_point += get_point(dealer_card['point'])

    print(f'玩家获得了 {player_card["point"]}({player_card["type"]}),当前得分为 {player_point}')
    print(f'庄家获得了 {dealer_card["point"]}({dealer_card["type"]}),当前得分为 {dealer_point}')

步骤 3. 玩家回合

在玩家回合,玩家需要选择“要牌”或“停牌”。如果选择要牌,则执行发牌函数,并将得分相应更新。如果选择停牌,则终止循环。

while True:
    action = input('请选择行动(要牌/停牌): ')
    if action == '要牌':
        player_card = deal_card()
        player_point += get_point(player_card['point'])

        print(f'玩家获得了 {player_card["point"]}({player_card["type"]}),当前得分为 {player_point}')

        if player_point > 21:
            print('您的分数超过21点,游戏结束!')
            break
    elif action == '停牌':
        break

步骤 4. 庄家回合

在庄家回合,庄家需要根据自己的得分选择是否要牌。如果得分小于17,则必须要牌;否则可以选择停牌。

while dealer_point < 17:
    dealer_card = deal_card()
    dealer_point += get_point(dealer_card['point'])

    print(f'庄家获得了 {dealer_card["point"]}({dealer_card["type"]}),当前得分为 {dealer_point}')

    if dealer_point > 21:
        print('庄家的分数超过21点,玩家获胜!')
        break

步骤 5. 结果判断

最后,我们需要判断游戏结果。如果玩家的得分超过21点,则玩家输掉所有下注的筹码;如果庄家的得分超过21点,则玩家获胜;否则,比较双方得分,点数大者获胜。

if player_point > 21:
    print('您输掉了所有筹码!')
elif dealer_point > 21:
    print('庄家的分数超过21点,玩家获胜!')
elif player_point > dealer_point:
    print('玩家获胜!')
elif player_point < dealer_point:
    print('庄家获胜!')
else:
    print('平局!')

示例

示例 1: 玩家获胜

玩家获得了 7(diamond),当前得分为 7
庄家获得了 2(club),当前得分为 2
玩家获得了 10(heart),当前得分为 17
庄家获得了 7(heart),当前得分为 9
玩家获得了 Q(club),当前得分为 27
您的分数超过21点,游戏结束!
您输掉了所有筹码!

示例 2: 庄家获胜

玩家获得了 A(heart),当前得分为 11
庄家获得了 5(diamond),当前得分为 5
玩家获得了 3(heart),当前得分为 14
庄家获得了 7(spade),当前得分为 12
请选择行动(要牌/停牌): 停牌
庄家获得了 A(club),当前得分为 13
庄家获得了 K(spade),当前得分为 23
庄家的分数超过21点,玩家获胜!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现21点小游戏 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • python list是否包含另一个list所有元素的实例

    以下是详细讲解“Python List是否包含另一个List所有元素的实例”的完整攻略。 在Python中,可以使用多种方法判断一个List是否包含另一个List所有元素。本文将介绍两种常用的方法,并提供两个示例说明。 方法一:使用all()函数和in关键字 可以使用all()函数和in关键字的方法判断一个List是否包含另一个List所有元素。例如: ls…

    python 2023年5月13日
    00
  • 浅谈python中的面向对象和类的基本语法

    当谈到面向对象编程时,我们不可避免地使用 Python 中的类和对象。在 Python 中,我们可以使用类来实现面向对象编程。 创建类 要创建一个类,您可以使用关键字 class,而后跟类的名称。下面是一个简单的类的示例。 class MyClass: x = 5 在这段代码中,我们定义了一个名为 MyClass 的类,它具有一个属性 x,其值为 5。 创建…

    python 2023年5月19日
    00
  • Python 正则表达式(转义问题)

    Python正则表达式(转义问题) 在Python正则表达式中,有一些特殊字符需要进行转义,否则会被解释为正则表达式的语法,而不是普通字符。下面是些需要进行转义的特殊字符: .:匹配任意字符。 *:匹配前一个字符0次或多次。 +:匹配前一个字符1次或多次。 ?:匹配前一个字符0次或1次。 |:匹配两个或多个表达式的任意一个。 ():分组,可以用于提取匹配的子…

    python 2023年5月14日
    00
  • python实现dijkstra最短路由算法

    下面是详细讲解“Python实现Dijkstra最短路径算法”的完整攻略,包括算法原理、Python实现和两个示例说明。 算法原理 Dijkstra最短算法是一种基于贪心策略的单源最短路径算法,用于求解带权向图中从一个源点到其他所有点的最短路径。其基本思想是维护一个集合S,表示已经找到最短路径的点集合,以及一个距离数组dist,表示源点到每个点的最短距离。初…

    python 2023年5月14日
    00
  • python读取pdf格式文档的实现代码

    要实现Python读取PDF格式文档的功能,我们需要使用第三方库来帮助我们完成。常见的第三方库有PyPDF2、Pillow、pdfminer等等,本攻略将以PyPDF2为例。 步骤一:安装PyPDF2库 使用pip命令来安装: pip install PyPDF2 步骤二:导入PyPDF2库 使用import语句来导入PyPDF2库: import PyPD…

    python 2023年6月2日
    00
  • pytest基本用法简介

    下面是关于”pytest基本用法简介”的完整攻略。 一、什么是pytest Pytest是一个功能强大的Python测试框架,其中所提供的主要特性包括自动化测试、可插拔性、测试时间短、支持参数化等。它可以扩展unittest测试框架的功能,同时还能够使用更加Python风格的语法实现测试用例的编写。Pytest是Python中非常受欢迎的测试框架之一,由于其…

    python 2023年6月3日
    00
  • 浅析Python与Mongodb数据库之间的操作方法

    浅析Python与Mongodb数据库之间的操作方法 简介 Mongodb是广泛应用于现代应用程序的高性能、开源、面向文档的存储数据库,而Python是一种高级编程语言,易于学习、编写和阅读。Python与Mongodb配合使用可以帮助我们实现更高效的数据处理和管理,下面将对Python与Mongodb之间的操作方法进行分析。 安装Mongodb驱动 Pyt…

    python 2023年5月14日
    00
  • Python实现简单猜数字游戏

    实现猜数字游戏的主要思路是通过Python代码生成一个随机数字,然后让玩家猜测这个数字是多少,最后比对玩家猜测的数字和随机数字是否一致。 以下是实现猜数字游戏的完整攻略: 步骤1:生成随机数字 在Python中,可以使用random模块的randint函数来生成随机整数。下面是一个例子: import random num = random.randint(…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部