C语言实战之纸牌游戏

目录

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

2. 运行界面 1. 首页面
C语言实战之纸牌游戏
文章图片

2. 游戏说明
C语言实战之纸牌游戏
文章图片

3. 开始游戏
C语言实战之纸牌游戏
文章图片

4. 开始出牌
C语言实战之纸牌游戏
文章图片

5. 游戏结束
C语言实战之纸牌游戏
文章图片


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 = https://www.it610.com/article/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语言纸牌游戏的资料请关注脚本之家其它相关文章!

    推荐阅读