C语言项目 ---- 纸牌游戏(详细讲解 + 全部代码 + 运行图片)
C语言项目 ---- 纸牌游戏
- 1. 基本要求
- 2. 运行界面
- 1. 首页面
- 2. 游戏说明
- 3. 开始游戏
- 4. 开始出牌
- 5. 游戏结束
- 3. 代码解释
关注博主不迷路,博主带你码代码!
1. 基本要求
- 一副没有花牌(J、Q、K、A、大小王)的扑克牌,两个人进行纸牌游戏,其中一个人为用户,另一个人为计算机;
- 每轮每人各发5张牌,各自以这5张牌建立二叉排序树;
- 由用户先出,轮流出牌,每次只能出一张并且要比别人出的大,如:用户出3,计算机则要出比3大的牌,没有则选择不出;
- 最先出完的人获胜。
2. 运行界面
1. 首页面
2. 游戏说明
3. 开始游戏
4. 开始出牌
5. 游戏结束
3. 代码解释
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<time.h>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 <windows.h>中,起到休眠程序的作用 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);// 插入结点的值大于等于根节点,则插入右子树 elset->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语言项目 ---- 纸牌游戏(详细讲解 + 全部代码 + 运行图片)相关推荐
- c语言 字母小游戏,详细讲解C语言单机小游戏——打字母游戏
要用C语言编写一个单机小游戏,首先得安装一个图形库.在这里我用的是EasyX 图形库,EasyX 是针对 C++ 的图形库,可以帮助 C++语言初学者快速上手图形和游戏编程. 比如,可以用 VC + ...
- C语言答案解析,C语言题库带详细讲解答案解析.doc
C语言题库带详细讲解答案解析.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3. ...
- 【OS系列-2】- 进程详细讲解(代码示例)
进程 进程详细讲解(代码示例) 进程 示例代码 创建进程的具体过程? 执行 fork()的时候系统做了什么? 进程间通信 管道 消息队列 共享内存 信号量 套接字 进程间同步 信号量 文件锁 无锁 C ...
- lamport面包店算法详细讲解及代码实现
lamport面包店算法详细讲解及代码实现 1 算法详解 1.1 一个较为直观的解释 1.2 Lamport算法的时间戳原理 1.3 Lamport算法的5个原则 1.4 一个小栗子 2 算法实现 3 ...
- 深度学习:NiN(Network In Network)详细讲解与代码实现
深度学习:NiN(Network In Network)详细讲解与代码实现 网络核心思想 1*1卷积 NiN块的作用 全局池化(Global Average Pooling) 基于NiN的服装分类(P ...
- Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)
Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例) Java对象 转 JSON字符串 JAVA对象转MAP Map转java对象 List转map List和Map ...
- 【从入门到入土系列】C语言制作小游戏-贪吃蛇:Copy+运行即可另附注释
系列文章 本系列持续更新中,欢迎您的访问! 系列简介 本系列由唐文疏撰写,负责记录博主的学习生涯中的一点一滴.独乐乐不如众乐乐,故此分享给大家.欢迎大家一起讨论.学习和批评指点. 博主只是一个普普通通 ...
- C语言编程纸牌游戏运行结果,C语言编程,纸牌游戏
C语言编程,纸牌游戏 关注:170 答案:2 mip版 解决时间 2021-01-28 15:29 提问者孤独深渊 2021-01-28 08:16 编号为1-52张牌,正面向上,从第2张开始,以 ...
- 用C语言编写纸牌游戏(数据结构)
纸牌游戏案例编程. **纸牌游戏:编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌:然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌:然 ...
- c语言流水灯程序详细讲解,用c语言编写单片机流水灯程序详解
用C语言编写的单片机流水灯程序 一.硬件电路 因为电路用单片机控制,所以电路非常简洁.其电路原理图见下图,印制板图如下图所示. ? 电路的核心部分是AT89C2051单片机,前面提到它有Pl和P3两组 ...
最新文章
- win8 开发之旅(13) --webabcd大师,这事你怎么看? 向webabcd大师致敬。
- Javascript Step by Step - 03
- Python的IDE之PyCharm:PyCharm的使用技巧图文教程(修改Pycharm默认风格颜色、编辑器内代码注释区域的颜色、编辑器内的Python Interpreter等)之详细攻略
- MapReduce 计数器简介
- linux 链接 文件,聊聊 Linux 里的文件链接
- beego orm 删除不掉数据!!!
- Servlet使用适配器模式进行增删改查案例(EmpServiceImpl.java)
- html表格分页打印样式,vue部分打印(多页自动分页、打印样式自定义、多页打印表格页面顶部带表头)...
- Python程序员面试必备常用问题答案及解析
- 软技能-代码之外的生存指南-读书笔记(持续更新中)
- idea 拉取gitlab分支项目_如何删除gitlab上的文件夹?
- 线程池是如何重复利用空闲线程的?
- Extjs store用法详解
- docker查看java版本_Linux 安装jdk,查看版本,docker
- 【目标检测】SPP-Net论文理解(超详细版本)
- Android添加Flurry统计
- matplotlib无法显示中文问题的解决(全网最全)
- 断层成像CT和ET重建算法
- 记录个js调用浏览器打印功能的代码
- PTA 7-2 评委打分
热门文章
- FPGA BCD计数器(一位)
- Java关键字this的使用方法解析大全
- sudo: vim:找不到命令_linux常用命令(3)
- pyqt之qprocess使用【详细教程】
- 为 Electron / Atom Shell 设置应用icon(应用图标)
- SSH安全审计Tool - ssh-audit
- nginx limit_req限速设置
- Installing Perl modules from CPAN
- 在FreeBSD 用户空间与内核空间使用内存共享
- 汉斯·乌尔里希·鲁德尔-唯一一个钻石金双剑金橡叶骑士勋章获得者