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加密word文档详解

    Python加密Word文档详解 什么是Python加密Word文档? Python加密Word文档指的是使用Python语言对Word文档进行加密,使得只有拥有密码的人才能打开该文档。 实现Python加密Word文档详细步骤 实现Python加密Word文档的步骤如下: 步骤一:安装python-docx库 使用Python加密Word文档需要使用到py…

    python 2023年6月3日
    00
  • python通过http下载文件的方法详解

    在Python中,我们可以使用urllib库或requests库来通过HTTP下载文件。下载文件时,我们需要注意文件的大小和下载进度,以便正确地下载文件。本文将通过实例讲解如何使用Python通过HTTP下载文件,包括使用urllib库和requests库,以及两个示例。 使用urllib库下载文件 我们可以使用urllib库的urlretrieve方法来下…

    python 2023年5月15日
    00
  • 在Python中使用NumPy在点x的列表中评估Hermite_e序列

    在Python中使用NumPy评估Hermite_e序列,需要执行以下步骤: 导入NumPy库 在Python中,可以使用以下语句导入NumPy库: import numpy as np 定义Hermite_e函数 Hermite_e函数可以使用以下代码定义: def Hermite_e(x, n): if n == 0: return np.exp(-x*…

    python-answer 2023年3月25日
    00
  • python读取各种文件数据方法解析

    当我们使用Python进行数据分析或者处理时,首先需要读取数据。Python可以读取各种格式的文件,包括CSV、Excel、JSON、XML、TXT等格式的文件。本文将详细介绍如何使用Python来读取各种格式的文件。 一、CSV格式文件读取 CSV文件是一种常见的数据格式,常被用来存放数据表格。在Python中,通过csv模块可以方便地读取和写入CSV文件…

    python 2023年6月3日
    00
  • Redis 如何进行数据备份和恢复?

    以下是 Redis 如何进行数据备份和恢复的完整使用攻略。 Redis 数据备份 Redis 数据备份可以通过 RDB 和 AOF 两种方式进行。 RDB 备份 RDB 备份是 Redis 的一种快照备份方式,可以将 Redis 的内存数据保存到磁盘上。RDB 备份的优点是备份速度快,文件体积小,适合用于定期备份。 RDB 备份的实现步骤如下: 执行 SAV…

    python 2023年5月12日
    00
  • 爬虫是什么?浅谈爬虫及绕过网站反爬取机制

    爬虫是什么? 爬虫是一种自动获取网站上数据的程序。通俗来讲,爬虫就是在模拟人的操作,去访问网站,获取需要的信息。爬虫可以自动化地爬取数据、分析数据、存储数据等,大大提高了数据获取和处理的效率。 浅谈爬虫及绕过网站反爬机制 爬虫的分类 爬虫根据其实现技术和应用场景,可以分为多种类型,包括通用爬虫和聚焦爬虫、静态网页爬虫和动态网页爬虫、逆向爬虫和贴心爬虫等。 其…

    python 2023年5月14日
    00
  • Python txt文件常用读写操作代码实例

    Pythontxt文件常用读写操作代码实例 在Python中,读写文本文件是非常常见的操作。在本文中,我们将讨论一些常用的文件读写操作,并附带代码实例。 读取文本文件 要读取文本文件,我们可以使用Python内置的open()函数。下面是一个简单的示例,展示了如何使用该函数读取一个文本文件,并将其中的内容打印出来。 with open(‘example.tx…

    python 2023年5月13日
    00
  • Python 使用partial()函数

    Python中的partial函数可以帮助我们将一个函数变成另一个函数,可以固定一个或者多个参数。partial常常用于在调用函数时,我们并不想传递一个完整的参数列表,而是想预先设置一些参数进行函数调用。这在函数式编程中非常常见,以下是partial的使用方法与示例。 partial函数的使用方法 partial函数属于Python标准库functools中…

    python-answer 2023年3月25日
    00
合作推广
合作推广
分享本页
返回顶部