C语言项目 ---- 纸牌游戏

  • 1. 基本要求
  • 2. 运行界面
    • 1. 首页面
    • 2. 游戏说明
    • 3. 开始游戏
    • 4. 开始出牌
    • 5. 游戏结束
  • 3. 代码解释

关注博主不迷路,博主带你码代码!

1. 基本要求

  1. 一副没有花牌(J、Q、K、A、大小王)的扑克牌,两个人进行纸牌游戏,其中一个人为用户,另一个人为计算机;
  2. 每轮每人各发5张牌,各自以这5张牌建立二叉排序树;
  3. 由用户先出,轮流出牌,每次只能出一张并且要比别人出的大,如:用户出3,计算机则要出比3大的牌,没有则选择不出;
  4. 最先出完的人获胜。

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语言项目 ---- 纸牌游戏(详细讲解 + 全部代码 + 运行图片)相关推荐

  1. c语言 字母小游戏,详细讲解C语言单机小游戏——打字母游戏

    要用C语言编写一个单机小游戏,首先得安装一个图形库.在这里我用的是EasyX 图形库,EasyX 是针对 C++ 的图形库,可以帮助 C++语言初学者快速上手图形和游戏编程. 比如,可以用 VC + ...

  2. C语言答案解析,C语言题库带详细讲解答案解析.doc

    C语言题库带详细讲解答案解析.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3. ...

  3. 【OS系列-2】- 进程详细讲解(代码示例)

    进程 进程详细讲解(代码示例) 进程 示例代码 创建进程的具体过程? 执行 fork()的时候系统做了什么? 进程间通信 管道 消息队列 共享内存 信号量 套接字 进程间同步 信号量 文件锁 无锁 C ...

  4. lamport面包店算法详细讲解及代码实现

    lamport面包店算法详细讲解及代码实现 1 算法详解 1.1 一个较为直观的解释 1.2 Lamport算法的时间戳原理 1.3 Lamport算法的5个原则 1.4 一个小栗子 2 算法实现 3 ...

  5. 深度学习:NiN(Network In Network)详细讲解与代码实现

    深度学习:NiN(Network In Network)详细讲解与代码实现 网络核心思想 1*1卷积 NiN块的作用 全局池化(Global Average Pooling) 基于NiN的服装分类(P ...

  6. Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)

    Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例) Java对象 转 JSON字符串 JAVA对象转MAP Map转java对象 List转map List和Map ...

  7. 【从入门到入土系列】C语言制作小游戏-贪吃蛇:Copy+运行即可另附注释

    系列文章 本系列持续更新中,欢迎您的访问! 系列简介 本系列由唐文疏撰写,负责记录博主的学习生涯中的一点一滴.独乐乐不如众乐乐,故此分享给大家.欢迎大家一起讨论.学习和批评指点. 博主只是一个普普通通 ...

  8. C语言编程纸牌游戏运行结果,C语言编程,纸牌游戏

    C语言编程,纸牌游戏 关注:170  答案:2  mip版 解决时间 2021-01-28 15:29 提问者孤独深渊 2021-01-28 08:16 编号为1-52张牌,正面向上,从第2张开始,以 ...

  9. 用C语言编写纸牌游戏(数据结构)

    纸牌游戏案例编程. **纸牌游戏:编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌:然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌:然 ...

  10. c语言流水灯程序详细讲解,用c语言编写单片机流水灯程序详解

    用C语言编写的单片机流水灯程序 一.硬件电路 因为电路用单片机控制,所以电路非常简洁.其电路原理图见下图,印制板图如下图所示. ? 电路的核心部分是AT89C2051单片机,前面提到它有Pl和P3两组 ...

最新文章

  1. win8 开发之旅(13) --webabcd大师,这事你怎么看? 向webabcd大师致敬。
  2. Javascript Step by Step - 03
  3. Python的IDE之PyCharm:PyCharm的使用技巧图文教程(修改Pycharm默认风格颜色、编辑器内代码注释区域的颜色、编辑器内的Python Interpreter等)之详细攻略
  4. MapReduce 计数器简介
  5. linux 链接 文件,聊聊 Linux 里的文件链接
  6. beego orm 删除不掉数据!!!
  7. Servlet使用适配器模式进行增删改查案例(EmpServiceImpl.java)
  8. html表格分页打印样式,vue部分打印(多页自动分页、打印样式自定义、多页打印表格页面顶部带表头)...
  9. Python程序员面试必备常用问题答案及解析
  10. 软技能-代码之外的生存指南-读书笔记(持续更新中)
  11. idea 拉取gitlab分支项目_如何删除gitlab上的文件夹?
  12. 线程池是如何重复利用空闲线程的?
  13. Extjs store用法详解
  14. docker查看java版本_Linux 安装jdk,查看版本,docker
  15. 【目标检测】SPP-Net论文理解(超详细版本)
  16. Android添加Flurry统计
  17. matplotlib无法显示中文问题的解决(全网最全)
  18. 断层成像CT和ET重建算法
  19. 记录个js调用浏览器打印功能的代码
  20. PTA 7-2 评委打分

热门文章

  1. FPGA BCD计数器(一位)
  2. Java关键字this的使用方法解析大全
  3. sudo: vim:找不到命令_linux常用命令(3)
  4. pyqt之qprocess使用【详细教程】
  5. 为 Electron / Atom Shell 设置应用icon(应用图标)
  6. SSH安全审计Tool - ssh-audit
  7. nginx limit_req限速设置
  8. Installing Perl modules from CPAN
  9. 在FreeBSD 用户空间与内核空间使用内存共享
  10. 汉斯·乌尔里希·鲁德尔-唯一一个钻石金双剑金橡叶骑士勋章获得者