Python扑克牌21点游戏实例代码

废话还是说太多了 直接上代码

import random
import sys

# 牌面列表
card_code = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
# 花色列表
card_symbol = ['', '', '', '']

# 游戏初始化
def init(player_count):
    # 根据玩家数来生成玩家记牌器
    player_group = [[] for _ in range(player_count)]
    # 根据玩家数来生成玩家是否要牌
    player_isWant = [True for _ in range(player_count)]
    # 生成元素1~52的列表 (去掉大小鬼的扑克牌[52张])
    poker = list(range(1, 53))
    # 用random的shuffle函数对列表打乱顺序 (洗牌)
    random.shuffle(poker)
    # 返回玩家组 玩家是否要牌 乱序52张扑克
    return player_group, player_isWant, poker

# 打印玩家点数
def print_player_point(player_group):
    # 存放玩家点数
    player_point = []
    # 遍历每一位玩家
    for index in range(len(player_group)):
        # 打印每位玩家的牌和点数
        print("-------玩家"+str(index+1)+"------")
        # 初始化玩家点数 如果含有牌A 因为A可视为1点或11点 则有两种点数
        current_player = [0, 0]
        # 遍历每位玩家的手牌
        for card in player_group[index]:
            """
            核心代码
            由于牌面的数字是从1到52 所以牌面要先减1再求余才是牌面列表真正的下标
            若玩家抽到牌为15 即牌面为15 - 13 = 2 且按花色顺序为 即2
            牌面 15 - 1 = 14 再 14 % 13 = 1 这个就是对应牌面列表的第二位元素 即2
            花色 15 - 1 = 14 再 14 / 13 = 1 对应花色列表第二位元素 即
            """
            # 获取牌面和花色下标
            code_index = int((card - 1) % 13)
            symbol_index = int((card - 1) / 13)
            # 打印玩家牌信息
            print(card_code[code_index] + card_symbol[symbol_index], end="\t")
            # 如果牌面含有A 则添加不同点数1和11
            if (code_index + 1) == 1:
                current_player[0] += 1
                current_player[1] += 11
            # 如果牌面不含A 则添加相同点数
            else:
                current_player[0] += code_index + 1
                current_player[1] += code_index + 1
        # 如果两个点数一致 则打印一个点数
        if current_player[0] == current_player[1]:
            print("点数为"+str(current_player[0])+"点")
        # 否则打印两个点数
        else:
            print("点数为"+str(current_player[0])+"点或"+str(current_player[1]))
        # 添加当前玩家点数
        player_point.append(current_player)
    # 返回所有玩家点数
    return player_point

# 玩游戏
def play_game():
    # 打印游戏规则
    print("-------21点游戏------")
    print("---A可看做1点或11点---")
    # 死循环一直进行游戏
    while True:
        # 初始化玩家数为0
        player_count = 0
        # 当玩家数小于等于1或大于5时继续询问
        while player_count <= 1 or player_count > 5:
            # 询问玩家数
            print("有多少位玩家?(2~5位)", end="")
            # 获取控制台输入的数字 无验证输入 若输入非数字 程序直接报错
            player_count = int(input())
        # 初始化游戏 返回玩家组 玩家是否要牌 乱序52张扑克
        player_group, player_isWant, poker = init(player_count)
        # 开始发牌 先为每位玩家发两张牌 循环玩家数
        for index in range(player_count):
            for i in range(2):
                # pop() 函数用于移除列表中的一个元素(默认最后一个元素)并且返回该元素的值。
                player_group[index].append(poker.pop())
        # 打印玩家点数 并获取当前玩家点数
        player_point = print_player_point(player_group)
        # 只要玩家继续要牌 且 还有剩余牌 则一直询问玩家是否要牌
        while True in player_isWant and len(poker) > 0:
            # 遍历玩家
            for index in range(player_count):
                # 判断玩家是否有可能还需要牌
                if player_isWant[index] is True:
                    # 询问玩家是否要牌
                    print("玩家"+str(index+1)+",您再要一张?(y/n)")
                    # 获取控制台输入
                    isWant = str(input())[0]
                    # 如果输入的字符为"n" 则将玩家标记为不再需要牌
                    if isWant == "n":
                        player_isWant[index] = False
                    # 如果不为字符"n" 默认为继续要牌 给该玩家发一张牌
                    else:
                        player_group[index].append(poker.pop())
            # 每轮询问结束 打印玩家点数 并获取当前玩家点数
            player_point = print_player_point(player_group)
        print("\n"*5+"====本轮游戏结束====")
        # 定义一个计分器
        score = []
        # 要牌结束 遍历所有玩家的点数 判断哪位玩家胜利
        for point_list in player_point:
            # 如果两个两个点数相同 说明没有A
            if point_list[0] == point_list[1]:
                # 如果分数大于21 直接取负数 小于等于21 任意取一个作为分数
                score.append(-point_list[0] if point_list[0] > 21 else point_list[0])
            # 如果两个点数不想同 说明含有A 则继续判断
            else:
                # 如果两个点数中大的那个点数还小于等于21
                if max(point_list) <= 21:
                    # 去最大值为分数
                    score.append(max(point_list))
                # 如果两个点数中大的那个点数大于21
                else:
                    # 如果小的点数大于21 直接取负数 小于等于21 取最小值为分数
                    score.append(-min(point_list) if min(point_list) > 21 else min(point_list))
        # 最高分
        max_point = max(score)
        # 如果最高分的人数为1 直接认为最高分的玩家获胜 打印游戏结果
        if score.count(max_point) == 1:
            print("玩家"+str(score.index(max_point) + 1)+"获胜!")
        # 否则最高分的分数有并列 认为有多个人获胜
        else:
            # 获胜玩家列表
            temp_list = []
            # 遍历分数
            for index in range(len(score)):
                # 分数等于最高分 记录玩家
                if score[index] == max_point:
                    temp_list.append("玩家"+str(index+1))
            # 拼接获胜玩家列表 打印游戏结果
            print("恭喜"+",".join(temp_list)+"获胜!")
        # 询问是否继续游戏
        print("是否继续游戏?(y/n)")
        # 如果控制台输入不为字符"y" 表示退出
        if str(input())[0] != 'y':
            sys.exit()

# 程序主入口
if __name__ == '__main__':
    # 玩游戏
    play_game()

运行结果如下

到此这篇关于Python扑克牌21点游戏实例代码的文章就介绍到这了,更多相关Python扑克牌游戏内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python用类实现扑克牌发牌的示例代码

    1. 题目 编写程序, 4名牌手打牌,计算机随机将52张牌(不含大小鬼)发给4名牌手,在屏幕上显示每位牌手的牌. 提示: 设计出3个类:Card类.Hand类和Poke类. Card类代表一张牌,其中FaceNum字段指出是牌面数字1~13,Suit字段指出的是花色,值"梅"为梅花,"方"为方块,"红"为红心,"黑"为黑桃. Hand类代表一手牌,可以认为是一位牌手手里的牌,其中cards列表变量存储牌手手里的牌.可以增加牌.

  • python实现四人制扑克牌游戏

    本文实例为大家分享了python实现四人制扑克牌游戏的具体代码,供大家参考,具体内容如下 题目: 设计一个简单的四人制扑克牌游戏,能够完成以下功能: 1. 洗牌 2. 发牌 3.自定义规则,在每轮单张出牌时,判定赢家 4.自定义规则,判定最终的赢家 规则简化版: 仅能出单张牌,且出牌时,每个人出的是自己手中牌中刚好能压过上家的最小牌,最先出完的为赢家 import random from random import choice flower = ['\u2660','\u2663','\u26

  • 基于Python制作一副扑克牌过程详解

    整理一下通过本文分享给大家, 该案例是通过 Python 类属性创建一幅除去大王.小王之后的 52 张扑克牌,并实现随机抽牌.排序.洗牌等功能: 创建一个纸牌类 一副扑克除去大王小王之外,剩下的 52 张纸牌以花色为基准(梅花.方块.黑桃.红心)可分为 4 组,每组有 13 张牌组成:因此可创建两个列表一个来存储花色,一个存储 13 个字符:通过两个列表之间的随机组合来生成 52 张纸牌, 代码如下: ​ 代码中通过collections.namedtuple模块创建一个类来表示一幅纸牌,['r

  • Python扑克牌21点游戏实例代码

    废话还是说太多了 直接上代码 import random import sys # 牌面列表 card_code = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'] # 花色列表 card_symbol = ['', '', '', ''] # 游戏初始化 def init(player_count): # 根据玩家数来生成玩家记牌器 player_group = [[] for _ in range(play

  • python实现大战外星人小游戏实例代码

    主程序 import pygame from pygame.sprite import Group from settings import Settings from game_stats import gameStats from ship import Ship from button import Button import game_functions as gf def run_game(): #初始化背景设置 pygame.init() #创建一个Settings实例,并将其储存在

  • 基于Python实现的扫雷游戏实例代码

    本文实例借鉴mvc模式,核心数据为model,维护1个矩阵,0表无雷,1表雷,-1表已经检测过. 本例使用python的tkinter做gui,由于没考虑可用性问题,因此UI比较难看,pygame更有趣更强大更好看,做这些小游戏更合适,感兴趣的读者可以尝试一下! 具体的功能代码如下: # -*- coding: utf-8 -*- import random import sys from Tkinter import * class Model: """ 核心数据类,维护一

  • python实现植物大战僵尸游戏实例代码

    开发思路 完整项目地址:https://github.com/371854496/... 觉得还OK的话,点下Star,作者不易,thank you! 实现方法 1.引入需要的模块,配置图片路径,设置界面宽高背景颜色,创建游戏主入口. #1引入需要的模块 import pygame import random #1配置图片地址 IMAGE_PATH = 'imgs/' #1设置页面宽高 scrrr_width=800 scrrr_height =560 #1创建控制游戏结束的状态 GAMEOVE

  • 使用Python写一个贪吃蛇游戏实例代码

    我在程序中加入了分数显示,三种特殊食物,将贪吃蛇的游戏逻辑写到了SnakeGame的类中,而不是在Snake类中. 特殊食物: 1.绿色:普通,吃了增加体型 2.红色:吃了减少体型 3.金色:吃了回到最初体型 4.变色食物:吃了会根据食物颜色改变蛇的颜色 #coding=UTF-8 from Tkinter import * from random import randint import tkMessageBox class Grid(object): def __init__(self,

  • Python实现Pig Latin小游戏实例代码

    前言: 本文研究的主要是Python实现pig Latin小游戏的简单代码,具体介绍如下. Pig Latin是一个语言游戏. 步骤: 1.让用户输入一个英文单词 2.确保用户输入一个有效单词 3.将单词转换成Pig Latin 4.显示转换结果 一.Input 函数:raw_input()用于输出一个字符串并等待键盘输入某字符串,最后以Enter(或Return)结束输入 original = raw_input("Enter a word:") print original 上述中

  • python读写Excel表格的实例代码(简单实用)

    安装两个库:pip install xlrd.pip install xlwt 1.python读excel--xlrd 2.python写excel--xlwt 1.读excel数据,包括日期等数据 #coding=utf-8 import xlrd import datetime from datetime import date def read_excel(): #打开文件 wb = xlrd.open_workbook(r'test.xlsx') #获取所有sheet的名字 print

  • Python实战之外星人入侵游戏示例代码

    目录 0.前言 1.效果展示 2.实现代码 2.1 image 2.2 alien_invasion.py 2.3 alien.py 2.4 bullet.py 2.5 button.py 2.6 game_stats.py 2.7 scoreboarf.py 2.8 settings.py 2.9 ship.py 0.前言 最近学习的python第一个项目实战,<外星人入侵>,成功实现所有功能,给大家提供源代码 环境安装:python 3.7+ pygame 安装 pygame pip in

  • 使用Python操作excel文件的实例代码

    使用的类库 pip install openpyxl 操作实现 •工作簿操作 # coding: utf-8 from openpyxl import Workbook # 创建一个excel工作簿 wb = Workbook() # 打开一个工作簿 wb = load_workbook('test.xlsx') # 保存工作簿到文件 wb.save('save.xlsx') •工作表操作 # 获得当前的工作表对象 ws = wb.active # 通过工作表名称得到工作表对象 ws = wb.

  • Python 自动化表单提交实例代码

    今天以一个表单的自动提交,来进一步学习selenium的用法 练习目标 0)运用selenium启动firefox并载入指定页面(这部分可查看本人文章 http://www.cnblogs.com/liu2008hz/p/6958126.html) 1)页面元素查找(多种查找方式:find_element_*) 2)内容填充(send_keys) 3)iframe与父页面切换(switch_to_frame是切换到iframe,switch_to_default_content是切换到主页面)

随机推荐