




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第C语言实战之纸牌游戏目录1.基本要求2.运行界面3.代码解释
1.基本要求
一副没有花牌(J、Q、K、A、大小王)的扑克牌,两个人进行纸牌游戏,其中一个人为用户,另一个人为计算机;
每轮每人各发5张牌,各自以这5张牌建立二叉排序树;
由用户先出,轮流出牌,每次只能出一张并且要比别人出的大,如:用户出3,计算机则要出比3大的牌,没有则选择不出;
最先出完的人获胜。
2.运行界面
1.首页面
2.游戏说明
3.开始游戏
4.开始出牌
5.游戏结束
3.代码解释
#includestdio.h
#includestdlib.h
#includewindows.h
#includetime.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;ii++){
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;mm++)
//在双方都有牌出的时候,一共最多进行5回合出牌
for(intk=0;kk++)
for(intj=0;jj++)
//确定当前牌可以出,大于对方的出牌,且自己没有出过这张牌
if(playercard[j]computercard[j][0]==0)
printf("玩家出牌%c%d\n",bhuase[j],playercard[j]);
playercount++;//玩家出牌数+1
//标记玩家已经出过这张牌了
card[j][0]=1;
player=playercard[j];
Sleep(800);//在头函数#includewindows.h中,起到休眠程序的作用
break;
//若果玩家已经出完5张牌,则玩家获胜,退出循环
if(playercount==5)
printf("玩家赢了!");
flag=true;
break;
for(intj=0;jj++)
//确定当前牌可以出,大于对方的出牌,且自己没有出过这张牌
if(computercard[j]playercard[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(playercomputer)computer=0;
//如果电脑的牌大于玩家的最大牌后,将玩家当前回合的牌值重置为0,继续进行下一回合
if(computerplayer)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(keyt-data)
t-LChild=treecharu(t-LChild,key);
//插入结点的值大于等于根节点,则插入右子树
else
t-RChild=treecharu(t-RChild,key);
returnt;
//将玩家手牌存储到平衡二叉树中
node*jianlib(node*t)
inti,key;
for(i=0;ii++)
key=playercard[i];
t=treecharu(t,key);
returnt;
//将电脑手牌存储到平衡二叉树中
node*jianlic(node*t)
inti,key;
for(i=0;ii++)
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",
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,
//电脑手牌有序化
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商铺置换住宅协议书
- 柳铁一中试卷真题及答案
- 医院租赁意向协议书
- 哥俩合作盖房协议书
- 劳务合作免责协议书
- 商铺租赁解除协议书
- 北京指标租凭协议书
- 土地开荒承包协议书
- 单方资金赠予协议书
- 合伙出资房屋协议书
- 超星尔雅学习通《经济与社会如何用决策思维洞察生活》章节测试答案
- 柴油安全技术说明书(MSDS)
- 北师大版小学二年级数学上册课程纲要
- 职工休假请假条模板
- 心脏康复指南完整版
- 国开电大土木工程本科《工程地质》在线形考形考(作业1至4)试题及答案
- 售后维修服务单
- 国家中长期科技发展规划纲要2021-2035
- ZDY3200S型煤矿用全液压坑道钻机行业资料矿业工程
- 北师大版八年级数学下册 (一元一次不等式)一元一次不等式和一元一次不等式组课件(第2课时)
- 护理安全警示教育PPT
评论
0/150
提交评论