怎样用C语言实现纸牌游戏
导读:本文共4986字符,通常情况下阅读需要17分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 1. 基本要求一副没有花牌(J、Q、K、A、大小王)的扑克牌,两个人进行纸牌游戏,其中一个人为用户,另一个人为计算机;每轮每人各发5张牌,各自以这5张牌建立二叉排序树;由用户先出,轮流出牌,每次只能出一张并且要比别人出的大,如:用户出3,计算机则要出比3大的牌,没有则选择不出;最先出完的人获胜。2. 运行界面1. 首页面2. 游戏说明3. 开始游戏4. 开始出牌... ...
音频解说
目录
(为您整理了一些要点),点击可以直达。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>intcard[5][2]; //分别标记玩家和用户已经出过的牌intplayercard[5]; //玩家的手牌intcomputercard[5];//电脑的手牌charbhuase[5];charchuase[5];typedefstructnode{ intdata; structnode*LChild; structnode*RChild;}node;typedefstructtree{ intdata; structnode*LChild; structnode*RChild;}tree;//游戏说明voidPlayingCardsyxsm(){ printf("每轮每人各发5张牌,各自以五张牌建立二叉树,由用户先出,轮流出牌,\n"); printf("每次只能出一张并且要比别人出的大,\n"); printf("如:用户出3,计算机则要算出比3大的牌,没有则选择不出;\n"); printf("最先出完的人获胜。\n");}//发牌voidPlayingCardsfp() { intplayer; intcomputer; //玩家和电脑各发五张牌 for(inti=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; }}//出牌voidPlayingCardscp(){ intplayer=0; //玩家当前回合出的牌 intcomputer=0; //电脑当前回合出的牌 intplayercount=0; //玩家的出牌数 intcomputercount=0; //电脑的出牌数 boolflag=false; //当每次都出现最大值时,游戏同样最多进行5回合 for(intm=0;m<5;m++) { //在双方都有牌出的时候,一共最多进行5回合出牌 for(intk=0;k<5;k++) { for(intj=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(intj=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; }}//发完牌后玩家的手牌voidPlayingCardsxswj(){ printf("玩家\n"); printf("%d%d%d%d%d\n",playercard[0],playercard[1],playercard[2],playercard[3],playercard[4],playercard[5]);}//发完牌后电脑的手牌voidPlayingCardsxsdn(){ printf("电脑\n"); printf("%d%d%d%d%d\n",computercard[0],computercard[1],computercard[2],computercard[3],computercard[4],computercard[5]);}//初始化树的头结点为空voidtreechushihua(node*t){ t=NULL;}//建立平衡二叉树node*treecharu(node*t,intkey){ //如果头结点为空,就将当前节点设置为根节点 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); } returnt;}//将玩家手牌存储到平衡二叉树中node*jianlib(node*t){ inti,key; for(i=0;i<5;i++) { key=playercard[i]; t=treecharu(t,key); } returnt;}//将电脑手牌存储到平衡二叉树中node*jianlic(node*t){ inti,key; for(i=0;i<5;i++) { key=computercard[i]; t=treecharu(t,key); } returnt;}//顺序输出玩家或电脑手牌voidtreepaixu1(node*t){ if(t!=NULL) { treepaixu1(t->LChild); printf("%d",t->data); treepaixu1(t->RChild); }}//先序遍历玩家平衡二叉树voidtreepaixu2(node*t,int*p){ if(t==NULL)return; else { //先序遍历,将玩家手牌有序化 treepaixu2(t->LChild,p); playercard[(*p)++]=t->data; treepaixu2(t->RChild,p); }}//先序遍历电脑平衡二叉树voidtreepaixu3(node*t,int*p){ if(t==NULL)return; else { //先序遍历,将电脑手牌有序化 treepaixu3(t->LChild,p); computercard[(*p)++]=t->data; treepaixu3(t->RChild,p); }}//主函数intmain(){ intk=0; //随机函数,通过时间种子来获取随机数种子,获得随机数 srand((unsigned)time(NULL)); intn=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){ //游戏说明 case1:PlayingCardsyxsm();break; //发牌阶段 case2:{ //发牌 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; } //出牌阶段 case3:{ PlayingCardscp(); break; } //退出游戏 case4:k=-1;break; } } return0;}
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:
怎样用C语言实现纸牌游戏的详细内容,希望对您有所帮助,信息来源于网络。