python实现21点小游戏

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利用Pydub实现自动分割音频

    下面我就详细讲解一下“Python利用Pydub实现自动分割音频”的完整攻略。 背景介绍 在音频处理的过程中,有时需要对一段长音频进行分割,提取其中的小片段。手动进行这样的操作比较繁琐,而使用Python和Pydub库可以轻松实现自动分割音频。 实现步骤 1. 安装所需库 首先需要安装所需的库,包括Pydub和ffmpeg。Pydub是一种Python音频处…

    python 2023年6月3日
    00
  • python基础之文件操作和异常处理

    Python基础之文件操作和异常处理 在Python编程中,文件操作和异常处理都是非常常见的基础知识。本文将详细介绍Python中的文件操作和异常处理。 文件操作 打开文件 在Python中,可以使用open()函数打开一个文件。open()函数的参数包括文件名和打开模式。 打开模式有以下几种: ‘r’:读取模式,默认值。如果文件不存在,会抛出FileNot…

    python 2023年5月13日
    00
  • python库pydantic的简易入门教程

    标题:Python库Pydantic的简易入门教程 什么是Pydantic? Pydantic是一个用于数据验证和序列化的Python库,它使用Python的类型注解进行数据验证,同时能够自动的序列化和反序列化Json,YAML和其他数据格式。Pydantic具有以下特点: 确保输入数据类型正确并自动完成类型转换 自动验证输入数据的规范性,并提供详细的错误提…

    python 2023年5月13日
    00
  • python中数组和列表的简单实例

    Python中数组和列表的简单实例 在Python中,数组和列表都是常用的数据结构,它们可以用来存储多个元素。本文将详细讲解Python中数组和列表定义、创建、访问、修改、删除等方的内容,并给出两个示例说明。 数组和列表的定义 在Python中,数组和列表都是用来存储多个元素的数据结构。它们的定义和创建方式略有不同: 数组:在Python中,数组是通过arr…

    python 2023年5月13日
    00
  • Python实现对比两个Excel数据内容并标记出不同

    下面是Python实现对比两个Excel数据内容并标记出不同的完整实例教程。 实现思路 本文使用Python语言,利用pandas库读取Excel文件,并将数据转换为DataFrame数据结构。利用DataFrame提供的函数对两个Excel表格进行比对,找寻不同的内容,并在新的Excel表格中标记出不同的内容。 读取Excel文件,将数据转换为DataFr…

    python 2023年5月13日
    00
  • 基于Python编写一个图片识别系统

    基于Python编写一个图片识别系统一般包含以下步骤: 1. 确定图片识别任务类型 在开始编写图片识别系统之前,需要先明确图片识别任务的类型。图片识别任务类型包括但不限于文字识别、人脸识别、物体识别等等。 2. 收集数据集 根据图片识别任务类型,需要收集相应的数据集。数据集可以从公开数据集库中获取,也可以自己收集。 3. 数据预处理 获取到数据集后,需要对数…

    python 2023年5月18日
    00
  • python新手学习使用库

    Python是一种功能强大的编程语言,拥有丰富的库和框架,可以用于各种不同的应用场景。对于Python新手来说,学习使用库是非常重要的一步。本文将详细讲解Python新手学习使用库的完整攻略,包括以下几个方面: 选择合适的库 安装库 学习库的基本用法 实践示例 选择合适的库 Python拥有众多的库和框架,每个库都有自己的特点和用途。在学习使用库之前,需要先…

    python 2023年5月15日
    00
  • python的time模块和datetime模块实例解析

    Python的time模块和datetime模块实例解析 Python中的time和datetime模块,都是用来处理日期和时间的模块。time模块主要是用于程序中对时间的计算等操作;datetime模块则是用于更加复杂的时间操作,例如时区转换等。本文将详细讲解time和datetime模块在Python中的应用和方法。 time模块 time模块是Pyth…

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