C语言实现21点游戏【单人模式,双人模式,单-多电脑模式】,21点又名黑杰克(英文:Blackjack)

项目背景:

21点又名黑杰克(英文:Blackjack) ,起源于法国,已流传到世界各地。21点,是一种使用扑克牌玩的赌博游戏。亦是唯一一种在赌场中可以在概率中战胜庄家的一种赌博游戏。

现在在世界各地的赌场中都可以看到二十一点,随着互联网的发展,二十一点开始走向网络时代。该游戏由 2 到 6 个人玩,使用除大小王之外的52 张牌,游戏者的目标是使手中的牌的点数之和不超过 21 点且尽量大。有着悠久的历史。

项目功能:

简易21点游戏:
21点又名黑杰克( Blackjack )起源于法国,已流传到世界各地,有着悠久的历史。该游戏由2到6个人玩,使用除大小王之外的52张牌,游戏者的目标是使手中的牌的点数之和不超过21点且尽量大。21点一般用到1 -8副牌。大家手中扑克点数的计算是: 2至9牌,按其原点数计算; K、Q、J和
10牌都算作10点(一般记作T,即ten之意) ; A牌(ace)既可算作1点也可算作11点,由玩家自己
决定( 当玩家停牌时,点数-律视为最大而尽量不爆,如A+9为20,A+4+8为13, A+3+A视为15)。
简易规则:玩家电脑各发2张牌,玩家两张牌均为明牌,电脑一明一暗;玩家电脑轮流要牌(都为明牌),也可以选择停牌,当某一方点数为21点时则直接获胜,超过21点则直接淘汰;当各方都选择停牌时,则计算各方点数,点数大者获胜。

我这里实现的有:

1.单人模式

2.单人-电脑模式

3.单人-多电脑模式

项目部分代码展示【完整源码在最后】:

结构体及一些数据:

typedef struct
{
	char name[4];  // 牌的名称
	int point;     // 牌的点值
	int take;      // 初始为0,拿过这张牌了,就设置成1 
} Card;

typedef struct
{
	char name[4];//牌的名称
	int point;//牌的点值
} Hand;//手牌
Card deck[NUM_DECKS][52];//总共不同花色,A-K 52张牌,最多8副牌
int n;//多少副牌 
int m;//电脑玩家有多少个 

随机生成牌:

void randPutCard(int nums[]) //随机生成2个数,第一个代表是哪副牌,第二个代表那副牌里的哪张牌 
{
	int i;
	// 生成2个随机数字
	nums[0] = rand() % n;//n副牌 
	nums[1] = rand() % 52;//一副里有52张牌 
	if (deck[nums[0]][nums[1]].take == 1) {//这张牌已经拿过了,重新生成随机数 
		randPutCard(nums);
	}
	else {
		deck[nums[0]][nums[1]].take == 1;//没拿过,拿这张牌,现在设为1代表现在拿了 
		return;
	}
}

点数计算:

int CalcPoints(Hand hand[], int handNum) //点数计算
{
	int i;
	int points = 0;//记录计算的点数 
	int num_aces = 0;//记录A的数量 
	for (i = 0; i < handNum; i++) {
		if (hand[i].point >= 2 && hand[i].point <= 10) {//2-k加对应点数 
			points += hand[i].point;
		}
		else if (hand[i].point == 1) {//如果是1的话,也就是A 
			num_aces++;//A的数量+1 
			points += 1;//点数先+1 
		}
	}
	for (i = 0; i < num_aces; i++) {//循环A的数量 
		if (points + 10 <= 21) {//如果让当前的A等于11,还没爆,就让这个A等于11 
			points += 10;//因为前面A已经让点数先+1了,所以这里只需要再+10 
		}
	}
	return points;//返回点数 
}

发牌函数:

int takeCard(Hand hand[], int handNum, int flag) {//发牌函数,暂时这里只用在了玩家多电脑模式,函数返回的是手牌数量 
	int nums[2];
	int iRand, jRand;
	if (flag == 0) {
		printf("正在为玩家发牌...\n");
		randPutCard(nums);//生成2个随机数
		iRand = nums[0], jRand = nums[1];//iRand决定是哪副牌,jRand决定拿哪张牌
		strcpy(hand[handNum].name, deck[nums[0]][nums[1]].name);//名称 
		hand[handNum].point = deck[nums[0]][nums[1]].point;//点数 
		handNum++;//玩家手牌数量+1 
		printf("发牌完毕!新的纸牌为【%s】\n\n", hand[handNum - 1].name);
	}
	else {
		printf("正在为【电脑%d】发牌...\n", flag);
		randPutCard(nums);//生成2个随机数
		iRand = nums[0], jRand = nums[1];//iRand决定是哪副牌,jRand决定拿哪张牌
		//因为电脑有一张暗牌,我这里把暗牌一直放在最后
		//先把暗牌放最后 
		strcpy(hand[handNum].name, hand[handNum - 1].name);
		hand[handNum].point = hand[handNum - 1].point;
		//再把刚要的牌放在暗牌前面 
		strcpy(hand[handNum - 1].name, deck[nums[0]][nums[1]].name);//名称 
		hand[handNum - 1].point = deck[nums[0]][nums[1]].point;//点数 
		handNum++;//手牌的数量+1 
		printf("发牌完毕!新的纸牌为【%s】\n\n", hand[handNum - 2].name);//handNum-1的索引是暗牌,所以打印handNum-2索引下的纸牌,为新发的牌 
	}
	return handNum;//将手牌数量返回 
}

项目运行:

菜单:

玩家电脑模式【其他就不展示了】:

项目地址:

code: 平时写的一些c/c++项目【开源】 - Gitee.comicon-default.png?t=N7T8https://gitee.com/yq-leisure/code/blob/master/Joker.cpp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/417938.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络原理--传输层

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f4d5;格言&#xff1a;那些在暗处执拗生长的花&#xff0c;终有一日会馥郁传香欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 TCP/IP五层&#xff08;或四层&#xff09;模型 传输层 TCP和UDP的区别 UDP协议 校验和 如何…

【Unity】如何设置Unity脚本的执行顺序?

在 Unity 编辑器中设置脚本执行顺序 在 Unity 中&#xff0c;如果有多个脚本&#xff0c;并且它们之间的执行顺序很重要&#xff0c;可以通过编辑器设置来确保它们按照自己期望的顺序执行。这对于确保某些脚本在其他脚本之前执行非常有用。在这篇文章中&#xff0c;将向会展示如…

Kubernetes IoTDB系列 | IoTDB数据库同步|IoTDB数据库高可用 | v1.3.0

目录 一、介绍二、应用场景三、IoTDB 数据库搭建四、数据同步一、介绍 IoTDB 数据同步功能可以将 IoTDB 的数据传输到另一个数据平台,我们将一个数据同步任务称为 Pipe。 一个 Pipe 包含三个子任务(插件): 抽取(Extract)处理(Process)发送(Connect)Pipe 允许用户自…

【MySQL】学习多表查询和笛卡尔积 - 副本

](https://img-blog.csdnimg.cn/21dd41dce63a4f2da07b9d879ad0120b.png#pic_center) ??个人主页: ??热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ??个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-N8PeTKG6uLu4bJuM {font-family:“trebuchet ms”,…

强化学习Agent系列(二)——PyGame虚拟环境创建与Python 贪吃蛇Agent制作实战教学

文章目录 一、前言二、gymnasium 简单虚拟环境创建1、gymnasium介绍2、gymnasium 贪吃蛇简单示例 三、基于gymnasium创建的虚拟环境训练贪吃蛇Agent1、虚拟环境2、虚拟环境注册3、训练程序4、模型测试 三、卷积虚拟环境1、卷积神经网络虚拟环境2、训练代码 一、前言 大家好&am…

300分钟吃透分布式缓存(拉钩教育总结)

开篇寄语 开篇寄语&#xff1a;缓存&#xff0c;你真的用对了吗&#xff1f; 你好&#xff0c;我是你的缓存老师陈波&#xff0c;可能大家对我的网名 fishermen 会更熟悉。 我是资深老码农一枚&#xff0c;经历了新浪微博从起步到当前月活数亿用户的大型互联网系统的技术演进…

NebulaGraph入门

感谢阅读 官方文档链接NebulaGraph简介nGQLnGQL简介占位标识符和占位符值注释实列大小写区分关键字 基本概念以及相关代码实现补充说明图空间语法以及列子创建克隆官方示例代码(创建并克隆)USE语句指定图空间时查看所有SPACESPACE详情CLEAR SPACE删库跑路&#xff08;看玩笑的说…

C语言:字符函数 字符串函数 内存函数

C语言&#xff1a;字符函数 & 字符串函数 & 内存函数 字符函数字符分类函数字符转换函数tolowertoupper 字符串函数strlenstrcpystrcatstrcmpstrstrstrtok 内存函数memcpymemmovememsetmemcmp 字符函数 顾名思义&#xff0c;字符函数就是作用于字符的函数&#xff0c;…

3dgs学习(二)—— 3d高斯与协方差矩阵及其几何意义

协方差矩阵与3d高斯 3d高斯与椭球与协方差矩阵 3d高斯&#xff0c;及3维空间内的正态分布。 通过一元正态分布的坐标系图像不难想象&#xff0c;3维空间中的正态分布点集中在一片椭球空间中&#xff0c;各方向长轴取决于各方向正态分布的方差。 而协方差矩阵通过计算多元之…

好物周刊#42:国产项目管理软件

https://github.com/cunyu1943 村雨遥的好物周刊&#xff0c;记录每周看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;每周五发布。 一、项目 1. 菠萝博客 基于 Java 的菠萝博客系统&#xff0c;简单易部署&#xff0c;精致主题&#xff0c;贴心服务&#xf…

本届挑战赛亚军方案:面向微服务架构系统中无标注、多模态运维数据的异常检测、根因定位与可解释性分析

CheerX团队来自于南瑞研究院系统平台研发中心&#xff0c;中心主要从事NUSP电力自动化通用软件平台的关键技术研究与软件研发。 选题分析 图1 研究现状 本次CheerX团队的选题紧密贴合了目前的运维现状。实际运维中存在多种问题导致运维系统的不可用。比如故障发生时&#xff…

【常用】【测速】ptflops库---速度FPS、参数Params、计算复杂度Flops

一、常用名字 中文名字 英文名字 简称 单位 模型参数量 number of parameters. param. (单位B M) 计算复杂度 computational…

【Spring Cloud 进阶】OpenFeign 底层原理解析

参考文章 万字33张图探秘OpenFeign核心架构原理 | 三友SpringCloud OpenFeign源码详细解析Java 代理机制 OpenFeign 是一个精彩的使用动态代理技术的典型案例&#xff0c;通过分析其底层实现原理&#xff0c;我们可以对动态代理技术有进一步的理解。 目录 1. Feign 与 OpenFeig…

VUE3:统计分析页面布局+自适应页面参考

一、布局 <template><div class"container1"><div class"form white"><el-form :inline"true" :rules"rules" :model"queryParams" label-width"80px" ref"querParmRef"><e…

力扣递归:路径总和

思路&#xff1a;此题思路为递归实现&#xff0c;递归思路为&#xff1a;在每层递归的过程中将各个节点的数据记录下来&#xff0c;不断将减少目标数据的值准备进行判断&#xff0c;当进行到叶子节点时要进行判断 /*** Definition for a binary tree node.* struct TreeNode {…

OJ_二叉树最短路径长度

题干 C实现 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<vector> using namespace std;struct TreeNode {int num;TreeNode* left;TreeNode* right;TreeNode* parent; };void createTree(vector<TreeNode*>& nodeArr, int n) {for (i…

2000-2022年上市公司绿色专利申请占比/数据

2000-2022年上市公司绿色专利申请占比数据 1、时间&#xff1a;2000-2022年 2、来源&#xff1a;国家知识产权局、WIPO绿色专利清单 3、指标&#xff1a;年份、股票代码、股票简称、行业代码、省份、城市、区县、行政区划代码、城市代码、区县代码、首次上市年份、上市状态、…

又降价啦!2024年阿里云核心产品价格全线下调,最高幅度达55%

2024年3月1日开始&#xff0c;阿里云将开启新一轮的降价政策&#xff0c;核心产品价格全线下调&#xff0c;平均降幅20%&#xff0c;最高幅度达55%&#xff0c;阿里云希望通过此次大规模降价&#xff0c;让更多企业和开发者用上先进的公共云服务&#xff0c;加速云计算在中国各…

深度学习 精选笔记(8)梯度消失和梯度爆炸

学习参考&#xff1a; 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增)&#xff0c;以达到集多方教程的精华于一文的目的。 ③非常推荐上面&#xff08;学习参考&#x…

备战蓝桥杯Day19 - 堆排序基础知识

一、每日一题 - 填充 详细题解 s input() # 输入字符串 n len(s) # 定义字符的长度 judge ["00", "11", "0?", "1?", "?0", "?1", "??"] # 把所有的情况一一列举出来 count 0 # 设置计数…