怎样用C语言实现纸牌游戏
发表于:2025-11-12 作者:千家信息网编辑
千家信息网最后更新 2025年11月12日,今天就跟大家聊聊有关怎样用C语言实现纸牌游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. 基本要求一副没有花牌(J、Q、K、A、大小王)
千家信息网最后更新 2025年11月12日怎样用C语言实现纸牌游戏
今天就跟大家聊聊有关怎样用C语言实现纸牌游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
1. 基本要求
一副没有花牌(J、Q、K、A、大小王)的扑克牌,两个人进行纸牌游戏,其中一个人为用户,另一个人为计算机;
每轮每人各发5张牌,各自以这5张牌建立二叉排序树;
由用户先出,轮流出牌,每次只能出一张并且要比别人出的大,如:用户出3,计算机则要出比3大的牌,没有则选择不出;
最先出完的人获胜。
2. 运行界面
1. 首页面

2. 游戏说明

3. 开始游戏
4. 开始出牌
5. 游戏结束
3. 代码解释
#include#include #include #include int card[5][2]; // 分别标记玩家和用户已经出过的牌 int playercard[5]; // 玩家的手牌 int computercard[5]; // 电脑的手牌 char bhuase[5];char chuase[5];typedef struct node{ int data; struct node *LChild; struct node *RChild;}node;typedef struct tree{ int data; struct node *LChild; struct node *RChild;}tree;// 游戏说明void PlayingCardsyxsm(){ printf(" 每轮每人各发5张牌,各自以五张牌建立二叉树,由用户先出,轮流出牌,\n"); printf(" 每次只能出一张并且要比别人出的大,\n"); printf(" 如:用户出3,计算机则要算出比3大的牌,没有则选择不出;\n"); printf(" 最先出完的人获胜。\n");}// 发牌void PlayingCardsfp() { int player; int computer; // 玩家和电脑各发五张牌 for(int i = 0; i < 5; i ++ ){ player = rand() % 9 + 2; printf("玩家发到的牌:%d \n", player); playercard[i] = player; computer = rand() % 9 + 2; printf("电脑发到的牌:%d \n", computer); computercard[i] = computer; }}// 出牌 void PlayingCardscp(){ int player = 0; // 玩家当前回合出的牌 int computer = 0; // 电脑当前回合出的牌 int playercount = 0; // 玩家的出牌数 int computercount = 0; // 电脑的出牌数 bool flag = false; // 当每次都出现最大值时,游戏同样最多进行5回合 for(int m = 0; m < 5; m ++ ) { // 在双方都有牌出的时候,一共最多进行5回合出牌 for(int k = 0; k < 5; k ++ ) { for(int j = 0; j < 5; j ++ ) { // 确定当前牌可以出,大于对方的出牌,且自己没有出过这张牌 if(playercard[j] > computer && card[j][0] == 0) { printf("玩家出牌%c%d\n", bhuase[j],playercard[j]); playercount ++ ; // 玩家出牌数+1 // 标记玩家已经出过这张牌了 card[j][0] = 1; player = playercard[j]; Sleep(800); // 在头函数#include 中,起到休眠程序的作用 break; } } // 若果玩家已经出完5张牌,则玩家获胜,退出循环 if(playercount == 5) { printf("玩家赢了!"); flag = true; break; } for(int j = 0; j < 5; j ++ ) { // 确定当前牌可以出,大于对方的出牌,且自己没有出过这张牌 if(computercard[j] > player && card[j][1] == 0) { printf("电脑出牌%c%d\n", chuase[j],computercard[j]); computercount ++ ; // 电脑出牌数+1 // 标记电脑已经出过这张牌了 card[j][1] = 1; computer = computercard[j]; Sleep(800); break; } } // 若果电脑已经出完5张牌,则电脑获胜,退出循环 if(computercount == 5) { printf("电脑赢了!"); flag = true; break; } } // 如果玩家的牌大于电脑的最大牌后,将电脑当前回合的牌值重置为0,继续进行下一回合 if(player > computer) computer = 0; // 如果电脑的牌大于玩家的最大牌后,将玩家当前回合的牌值重置为0,继续进行下一回合 if(computer > player) player = 0; if(flag) break; }}// 发完牌后玩家的手牌 void PlayingCardsxswj(){ printf("玩家\n"); printf(" %d %d %d %d %d\n", playercard[0], playercard[1], playercard[2], playercard[3], playercard[4], playercard[5]);}// 发完牌后电脑的手牌 void PlayingCardsxsdn(){ printf("电脑\n"); printf(" %d %d %d %d %d\n", computercard[0], computercard[1], computercard[2], computercard[3], computercard[4], computercard[5]);}// 初始化树的头结点为空 void treechushihua(node *t){ t = NULL;} // 建立平衡二叉树 node *treecharu(node *t, int key){ // 如果头结点为空,就将当前节点设置为根节点 if(t == NULL) { node *p; p = (node*)malloc(sizeof(node)); p->data = key; p->LChild = NULL; p->RChild = NULL; t = p; } // 如果头结点不为空,则进行平衡二叉树的插入操作 else { // 插入结点的值小于根节点,则插入左子树 if(key < t->data) t->LChild = treecharu(t->LChild, key); // 插入结点的值大于等于根节点,则插入右子树 else t->RChild = treecharu(t->RChild, key); } return t;}// 将玩家手牌存储到平衡二叉树中 node *jianlib(node *t) { int i, key; for(i = 0; i < 5; i ++ ) { key = playercard[i]; t = treecharu(t, key); } return t;} // 将电脑手牌存储到平衡二叉树中 node *jianlic(node *t) { int i, key; for(i = 0; i < 5; i ++ ) { key = computercard[i]; t = treecharu(t, key); } return t;} // 顺序输出玩家或电脑手牌 void treepaixu1(node *t) { if(t != NULL) { treepaixu1(t->LChild); printf("%d ", t->data); treepaixu1(t->RChild); }} // 先序遍历玩家平衡二叉树 void treepaixu2(node *t, int *p) { if(t == NULL) return; else { // 先序遍历,将玩家手牌有序化 treepaixu2(t->LChild, p); playercard[(*p) ++ ] = t->data; treepaixu2(t->RChild, p); }}// 先序遍历电脑平衡二叉树 void treepaixu3(node *t, int *p) { if(t == NULL) return; else { // 先序遍历,将电脑手牌有序化 treepaixu3(t->LChild, p); computercard[(*p) ++ ] = t->data; treepaixu3(t->RChild, p); }} // 主函数 int main(){ int k = 0; // 随机函数,通过时间种子来获取随机数种子,获得随机数 srand((unsigned)time(NULL)); int n = 0; // 选择菜单 while(k != -1) { puts(""); puts(""); puts(""); printf("\t\t\t ****纸牌游戏****\n"); printf("\t\t\t****1.游戏说明****\n"); printf("\t\t\t****2.开始游戏****\n"); printf("\t\t\t****3.开始出牌****\n"); printf("\t\t\t****4.游戏结束****\n"); printf("\t\t\t******************\n"); puts(""); printf("\t\t**********************************\n"); printf("\t\t**********************************\n"); puts(""); printf("\t\t\t请输入(1、2、3、4):\n"); scanf("%d", &k); switch(k){ // 游戏说明 case 1: PlayingCardsyxsm(); break; // 发牌阶段 case 2:{ // 发牌 PlayingCardsfp(); // 建立玩家二叉树 node *t1 = NULL; t1 = jianlib(t1); printf("玩家手牌为:"); treepaixu1(t1); // 建立电脑二叉树 node *t2 = NULL; t2 = jianlic(t2); puts(""); printf("电脑手牌为:"); treepaixu1(t2); // 玩家手牌有序化 n = 0; treepaixu2(t1, &n); // 电脑手牌有序化 n = 0; treepaixu3(t2, &n); puts(""); // 输出玩家和电脑的手牌 PlayingCardsxswj(); PlayingCardsxsdn(); break; } // 出牌阶段 case 3:{ PlayingCardscp(); break; } // 退出游戏 case 4:k=-1; break; } } return 0;}
看完上述内容,你们对怎样用C语言实现纸牌游戏有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
玩家
电脑
回合
用户
结点
纸牌
纸牌游戏
有序
游戏说明
节点
最大
内容
函数
标记
计算机
选择
语言
最先
种子
阶段
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全蓝队github
塔式服务器能装独显吗
全球的网络安全研究
人武部网络安全宣传简报
台服剑灵服务器人数
国产数据库服务器厂家
服务器基本安全
数据库设置密码
db2数据库断电后连接不上
数据库中如何查询名字中存在
服务器桌面图标变黑了
查询机软件开发商
如何把单机游戏服务器部署
银行后台数据库每个银行都有吗
开一个外包软件开发公司
博雅数据库2021年高考山西
网络安全和信息化排查报告
中原银行软件开发岗三面
桓台办公oa软件开发公司
软件开发中心的英文怎么读
刷脸网络安全
单黑数据库
游戏软件开发学校哪个大学
国产数据库服务器厂家
IE标准化数据库建立
网络安全情报局
软件开发有多坑
鹏鸿网络技术服务中心
我的世界斗罗服务器怎么给点券
网络安全纵深防御体系