千家信息网

怎样用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#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语言实现纸牌游戏有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

0