千家信息网

怎样用C语言实现纸牌游戏

发表于:2024-11-20 作者:千家信息网编辑
千家信息网最后更新 2024年11月20日,今天就跟大家聊聊有关怎样用C语言实现纸牌游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. 基本要求一副没有花牌(J、Q、K、A、大小王)
千家信息网最后更新 2024年11月20日怎样用C语言实现纸牌游戏

今天就跟大家聊聊有关怎样用C语言实现纸牌游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

1. 基本要求

  • 一副没有花牌(J、Q、K、A、大小王)的扑克牌,两个人进行纸牌游戏,其中一个人为用户,另一个人为计算机;

  • 每轮每人各发5张牌,各自以这5张牌建立二叉排序树;

  • 由用户先出,轮流出牌,每次只能出一张并且要比别人出的大,如:用户出3,计算机则要出比3大的牌,没有则选择不出;

  • 最先出完的人获胜。

2. 运行界面

1. 首页面

2. 游戏说明

3. 开始游戏

4. 开始出牌

5. 游戏结束

3. 代码解释

#include#include#include#includeint 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安全错误 数据库的锁怎样保障安全 电脑访问数据库变卡 把公司数据库弄宕机了怎么办 ssm的连接数据库语句 为什么要学网络安全与运维 有潜力的mysql数据库备份 软件开发的设备需求 软件开发行业管理费用科目 如何调取传销服务器数据 服务器上的数据怎么传到电脑上 四季青淘宝数据库 十大网络安全上市公司 软件工程与网络技术哪个好 专科软件开发毕业论文 交易中心网络安全考核制度 什么是网络安全纵深防御 幼儿园网络安全责任状 女性商品销售数据库 熟悉网络管理或网络安全 长沙同方服务器什么价格 sql数据库服务器自动停止 来电显示网络安全警察 数据库找出最高工资的人 海洋天然产物数据库mnpd 数据库物理结构包括三种文件 思科网络技术学院苏州 tcl通力电子 软件开发 政务网络安全考试费用 图书馆网络技术部工作计划 行影通提示服务器暂时无法访问 穿越火线怎么连接不上服务器
0