算是一个课程作业吧,找个地方存一下。小生学疏才浅,若程序中有不当的地方或是可以改进的地方,也欢迎各位大神指点指点,要是有后辈看了觉得有帮助更是小生的荣幸。
扎金花这个游戏就不在此多作介绍了,那么下面就是源代码。

#include<stdio.h>
#include<time.h>
#include<stdlib.h>struct card//结构体定义一副牌
{int color;int number;
}poker[60];void makecard()//生成这副牌
{int i;for(i=0;i<52;i++){poker[i].color=1+i/13;poker[i].number=i%13+2;
}
}void getcard(int p1[],int p2[])//发牌
{srand((unsigned)time(NULL));int k=0,i,j,array[52],a;array[k]=rand()%52+0;//直接产生第一个随机数while(1){a=rand()%52+0;//每做一次while循环产生一个随机数for(j=0;j<=k;j++){if(array[j]==a)//如果一样则不放入数组中 同时终止for循环{break;}else if (j==k)//不一样就放入{k++;array[k]=a;}}if(k==51)//产生了52个不一样的数就终止while循环{break;}}for(i=0;i<3;i++){p1[i] = poker[array[i]].number;p1[i+3]=poker[array[i]].color;}for(i=0;i<3;i++){  p2[i] = poker[array[i+3]].number;p2[i+3]=poker[array[i+3]].color;}
}void showcard(int a[],FILE *fp)
{int i;for(i=0;i<3;i++){  switch(a[i+3]){case 1:printf("黑桃."),fprintf(fp,"黑桃.");break;case 2:printf("红桃."),fprintf(fp,"红桃.");break;case 3:printf("梅花."),fprintf(fp,"梅花.");break;case 4:printf("方片."),fprintf(fp,"方片.");break;}switch(a[i]){case 11:printf("J "),fprintf(fp,"J ");break;case 12:printf("Q "),fprintf(fp,"Q ");break;case 13:printf("K "),fprintf(fp,"K ");break;case 14:printf("A "),fprintf(fp,"A ");break;default:printf("%d ",a[i]),fprintf(fp,"%d ",a[i]);break;}}
}int baozi(int a[])//判断豹子
{if(a[0] == a[1] && a[1] == a[2])return 1;elsereturn 0;
}int tonghua(int a[])//判断同花
{if(a[3] == a[4] && a[4] == a[5])return 1;else return 0;
}int shunzi(int a[])//判断顺子
{
int s1,s2,s3;if(a[0] < a[1] && a[0] < a[2]){s1=a[0];if (a[1] < a[2]){ s2=a[1] ; s3=a[2];}else { s2=a[2] ; s3=a[3];}}
else if( a[1] < a[0] && a[1] < a[2]){s1=a[1];if(a[0] < a[2]){s2=a[0];s3=a[2];}else{s2=a[2];s3=a[0];}}
else
{s1=a[2];if(a[0] < a[1]){s2 = a[0] ; s3 = a[1];}else{s2= a[1];s3= a[0];}
}if(s3-s2==1&&s2-s1==1)return 1;elsereturn 0;
}//判断顺子int duizi(int a[])//判断对子
{
if(a[0] ==a[1] || a[1] == a[2] || a[0] == a[2])return 1;elsereturn 0;
}int lianghua(int a[],int hs)//判断是否有两种花色相同
{if ( (a[3] == a[4] && a[3] == hs) || (a[4] == a[5] && a[4]==hs) || (a[3] == a[5] && a[5] == hs) ){return 1;}else {return 0;}
}int max(int i,int j,int k)
{   int mx = i;if(j > mx){mx = j;}if(k > mx){mx = k;}return mx;
}int max2(int i , int j)
{int mx=i;if(j > mx){mx = j;}return mx;
}int min3(int i,int j,int k)
{   int mn = i;if(j< mn){mn = j;}if(k < mn){mn = k;}return mn;
}int min(int i,int j,int k,int a[])//取得最小值所在的数组中的位置
{int mn = a[i],m = i;if(a[j] < mn){mn = a[j];m = j;}if(a[k] < mn){mn = a[k];m = k;}return m;
}int min2(int i,int j)
{int mn= i;if(j < mn){mn = j;}return mn;
}void xiangtong(int i,int j,int k,int a[],int *m,int *n)
{if(a[i] == a[j]){*m = i,*n = j;}if(a[i] == a[k]){*m = i,*n = k;}if(a[j] == a[k]){*m = j,*n = k;}
}int mid(int a[])
{int md = a[0];if( ((a[1]<a[2]) && (a[1]>a[0]) )|| ((a[1]<a[0]) && (a[1]>a[2]))){md=a[1];}if( ((a[2]<a[1]) && (a[2]>a[0]) )|| ((a[2]<a[0]) && (a[2]>a[1]))){md=a[2];}return md;
}int main()
{int play1[10],play2[10];//将牌的数值花色以及牌型的大小储存在两个玩家的数组里char    num[5];int i,n,px1,px2,hs1,hs2,j,k,start,cl1,cl2,cl3,cl4,co1,co2,dz1,dz2,th1,th2;int sz1,sz2,sz3,sz4,p1,p2,lh1,lh2;int *p = &i;int *q = &n;makecard();flag : play1[6]=0,play2[6]=0;FILE *fp;fp=fopen("test.txt","a+");printf("扎金花,游戏开始了!!!\n");printf("输入1手动输入牌型,输入2自动发牌");//手动输入牌型是检验牌型大小是否能够正确被比较的scanf("%d",&n);fflush(stdin);while(n!=1 && n!=2){printf("请输入1或2");scanf("%d",&n);fflush(stdin);}if (n == 1){flag2:printf("请输入您的三张牌的花色:");scanf("%d,%d,%d",&play1[3],&play1[4],&play1[5]);fflush(stdin);while( play1[3]<1 || play1[3]>4 || play1[4]<1 || play1[4]>4 || play1[5]<1 || play1[5]>4 ){printf("请输入正确的花色(1——4)!\n");scanf("%d,%d,%d",&play1[3],&play1[4],&play1[5]);fflush(stdin);}printf("请输入您的三张牌的数值:");scanf("%c,%c,%c",&num[0],&num[1],&num[2]);fflush(stdin);while( (num[0]!='2' && num[0]!='3' && num[0] !='4' && num[0] !='5' && num[0] !='6' && num[0] !='7' && num[0] !='8' && num[0] !='9' && num[0] != 'T' && num[0] != 'J' && num[0] != 'Q' && num[0] != 'K' && num[0] != 'A') || (num[1]!='2' && num[1]!='3' && num[1] !='4' && num[1] !='5' && num[1] !='6' && num[1] !='7' && num[1] !='8' && num[1] !='9' && num[1] != 'T' && num[1] != 'J' && num[1] != 'Q' && num[1] != 'K' && num[1] != 'A') ||(num[2]!='2' && num[2]!='3' && num[2] !='4' && num[2] !='5' && num[2] !='6' && num[2] !='7' && num[2] !='8' && num[2] !='9' && num[2] != 'T' && num[2] != 'J' && num[2] != 'Q' && num[2] != 'K' && num[2] != 'A') ){printf("请输入正确的数值(2——9以及T、J、Q、K)!\n");scanf("%c,%c,%c",&num[0],&num[1],&num[2]);fflush(stdin);}for(i=0;i<3;i++)switch(num[i]){  case 'T':play1[i]=10;break;case 'J':play1[i]=11;break;case 'Q':play1[i]=12;break;case 'K':play1[i]=13;break;case 'A':play1[i]=14;break;default:play1[i]= num[i] - '0';break;}if( ((play1[0] == play1[1]) && (play1[3] == play1 [4])) || ((play1[0] == play1[2]) && (play1[3] == play1 [5])) || ((play1[2] == play1[1]) && (play1[5] == play1 [4])) ){printf("请输入不重复的牌\n");goto flag2;}flag3:printf("请输入对手的三张牌的花色:");scanf("%d,%d,%d",&play2[3],&play2[4],&play2[5]);fflush(stdin);while(play2[3]<1 || play2[3]>4 || play2[4]<1 || play2[4]>4 || play2[5]<1 || play2[5]>4){printf("请输入正确的花色(1——4)!\n");scanf("%d,%d,%d",&play2[3],&play2[4],&play2[5]);fflush(stdin);}printf("请输入对手的三张牌的数值:");scanf("%c,%c,%c",&num[0],&num[1],&num[2]);fflush(stdin);while( (num[0]!='2' && num[0]!='3' && num[0] !='4' && num[0] !='5' && num[0] !='6' && num[0] !='7' && num[0] !='8' && num[0] !='9' && num[0] != 'T' && num[0] != 'J' && num[0] != 'Q' && num[0] != 'K' && num[0] != 'A') || (num[1]!='2' && num[1]!='3' && num[1] !='4' && num[1] !='5' && num[1] !='6' && num[1] !='7' && num[1] !='8' && num[1] !='9' && num[1] != 'T' && num[1] != 'J' && num[1] != 'Q' && num[1] != 'K' && num[1] != 'A') ||(num[2]!='2' && num[2]!='3' && num[2] !='4' && num[2] !='5' && num[2] !='6' && num[2] !='7' && num[2] !='8' && num[2] !='9' && num[2] != 'T' && num[2] != 'J' && num[2] != 'Q' && num[2] != 'K' && num[2] != 'A') ){printf("请输入正确的数值(2——9以及T、J、Q、K)!\n");scanf("%c,%c,%c",&num[0],&num[1],&num[2]);fflush(stdin);}for(i=0;i<3;i++)switch(num[i]){   case 'T':play2[i]=10;break;case 'J':play2[i]=11;break;case 'Q':play2[i]=12;break;case 'K':play2[i]=13;break;case 'A':play2[i]=14;break;default:play2[i]= num[i] - '0';break;}if( ((play2[0] == play2[1]) && (play2[3] == play2[4])) || ((play2[0] == play2[2]) && (play2[3] == play2[5])) || ((play2[2] == play2[1]) && (play2[5] == play2[4])) ){printf("请输入不重复的牌\n");goto flag3;}
}if (n == 2){getcard(play1,play2);}printf("你的牌是:");fprintf(fp,"你的牌是:");showcard(play1,fp);printf("\n");fprintf(fp,"\n");printf("发牌完毕,输入1开始对决:");scanf("%d",&start);fflush(stdin);while(start != 1){printf("请输入1!");scanf("%d",&start);fflush(stdin);}printf("电脑的牌是:");fprintf(fp,"电脑的牌是:");showcard(play2,fp);printf("\n");px1=baozi(play1)+tonghua(play1)+shunzi(play1)+duizi(play1);//判断有没有牌型px2=baozi(play2)+tonghua(play2)+shunzi(play2)+duizi(play2);if (px1 !=0 && px2!=0)//都有牌型{play1[7]=baozi(play1);//baoziplay2[7]=baozi(play2);//baoziif (play1[7] + play2[7] != 0){if(play1[7] == 1){play1[6] = play1[6]+7000;}if(play2[7] == 1){play2[6] = play2[6]+7000;}}//baoziplay1[7]=tonghua(play1);//同花play2[7]=tonghua(play2);if (play1[7] + play2[7] !=0){if(play1[7] == 1){    if(play1[3] == 4){play1[6] = play1[6]+2000;}if(play1[3] == 3){play1[6] = play1[6]+3000;}if(play1[3] == 2){play1[6] = play1[6]+4000;}if(play1[3] == 1){play1[6] = play1[6]+5000;}}if(play2[7] == 1){if(play2[3] == 4){play2[6] = play2[6]+2000;}if(play1[3] == 3){play2[6] = play2[6]+3000;}if(play2[3] == 2){play2[6] = play2[6]+4000;}if(play1[3] == 1){play2[6] = play2[6]+5000;}}if((play1[7] == play2[7] )&& (play1[7] == 1) && (shunzi(play1) ==0)){th1=max(play1[0],play1[1],play1[2]);th2=max(play2[0],play2[1],play2[2]);if(th1 > th2){printf("您赢了\n");fprintf(fp,"您赢了\n");goto flag4;}if(th1 < th2){printf("电脑赢了\n");fprintf(fp,"电脑赢了\n");goto flag4;}if(th1 == th2){th1=mid(play1);th2=mid(play2);if(th1 > th2){printf("您赢了\n");fprintf(fp,"您赢了\n");goto flag4;}if(th1 < th2){printf("电脑赢了\n");fprintf(fp,"电脑赢了\n");goto flag4;}}}}//同花play1[7]=shunzi(play1);//shunziplay2[7]=shunzi(play2);if(play1[7] + play2[7] != 0){if(play1 [7] == 1){play1[6]= play1[6] +500;sz1=max(play1[0],play1[1],play1[2]);}if(play2[7] == 1){play2[6]=play2[6]+500;sz2=max(play2[0],play2[1],play2[2]);}if(sz1 == sz2){sz3 = min3(play1[3],play1[4],play1[5]);sz4 = min3(play2[3],play2[4],play2[5]);if(sz3 < sz4){play1[6] = play1[6] + 100;}if(sz3 > sz4){play2[6] = play2[6] + 100;}}}//shunziplay1[7]=duizi(play1);//对子play2[7]=duizi(play2);if(play1[7] + play2[7] != 0){   if(play1 [7] == 1){   if(play1[0] == play1[1]){dz1=play1[0];cl1=play1[3],cl2=play1[4];}if(play1[1] == play1[2]){dz1=play1[1];cl1=play1[4],cl2=play1[5];}if(play1[0] == play1[2]){dz1=play1[2];cl1=play1[3],cl2=play1[5];}play1[6]= play1[6] +40;}if(play2 [7] == 1){if(play2[0] == play2[1]){dz2=play1[0];cl3=play2[3],cl4=play2[4];}if(play2[1] == play2[2]){dz2=play2[1];cl3=play2[4],cl4=play2[5];}if(play2[0] == play2[2]){dz2=play2[2];cl3=play2[3],cl4=play2[5];}play2[6]= play2[6] +40;}if(dz1 == dz2){co1=min2(cl1,cl2);co2=min2(cl3,cl4);if(co1 < co2){play1[6] = play1[6] + 25;}if(co1 > co2){play2[6] = play2[6] +25;}}}play1[6] = play1[6]+play1[0]+play1[1]+play1[2];play2[6] = play2[6]+play2[0]+play2[1]+play2[2];if (play1[6] > play2[6]){printf("恭喜您获胜了!\n");fprintf(fp,"恭喜您获胜了!\n");}if(play2[6]>play1[6]){printf("很遗憾电脑获胜了!\n");fprintf(fp,"很遗憾电脑获胜了!\n");}}//都有牌型if(px1 !=0 && px2 == 0)//一有一没{printf("恭喜您获胜了!\n");fprintf(fp,"恭喜您获胜了!\n");      }if(px1 == 0 && px2!=0){printf("很遗憾电脑获胜了!\n");fprintf(fp,"很遗憾电脑获胜了!\n");}//一有一没if(px1 == 0 && px2 == 0)//没有{j=min(3,4,5,play1);k=min(3,4,5,play2);hs1=play1[j];hs2=play2[k];if(hs1 > hs2){printf("很遗憾电脑获胜了!\n");fprintf(fp,"很遗憾电脑获胜了!\n");}if(hs1 < hs2){printf("恭喜您获胜了!\n");fprintf(fp,"恭喜您获胜了!\n");}if(hs1 == hs2){  lh1=lianghua(play1,hs1);lh2=lianghua(play2,hs2);if(lh1 + lh2 == 0){printf("%d,%d\n",hs1,hs2);printf("%d,%d\n",play1[j-3] , play2[k-3]);if(play1[j-3] > play2[k-3]){printf("恭喜您获胜了!\n");fprintf(fp,"恭喜您获胜了!\n");}if(play1[j-3] < play2[k-3]){printf("很遗憾电脑获胜了!\n");fprintf(fp,"很遗憾电脑获胜了!\n");}}else{xiangtong(3,4,5,play1,p,q);p1=max2(play1[(*p)-3],play1[(*q)-3]);xiangtong(3,4,5,play2,p,q);p2=max2(play2[(*p)-3],play2[(*q)-3]);if (p1 > p2){printf("恭喜您获胜了!\n");fprintf(fp,"恭喜您获胜了!\n");}if (p2 > p1){printf("很遗憾电脑获胜了!\n");fprintf(fp,"很遗憾电脑获胜了!\n");}}}}flag4:printf("是否继续(1/0)\n");printf("--------------------------------------\n");fprintf(fp,"--------------------------------------\n");scanf("%d",&i);fflush(stdin);if(i==0)return 0;else{goto flag;}}

也是第一次写博客,以后大概也会存一些作业进来,还请各位大佬多多指教!

【C语言】大一小白的一个C语言扎金花小程序相关推荐

  1. C语言时间管理小程序,写了一个时间管理的微信小程序

    原标题:写了一个时间管理的微信小程序 前言 以前看过<把时间当作朋友>这本书,里面有个管理时间的观点个人觉得很有用,就是养成记录自己每天的时间消耗的一个习惯,这样有助于更有效地管理自己的时 ...

  2. 制作了一个在线查询席位的小程序

    11-6号制作了一个在线查询席位的小程序 声明:本人小白一个纯分享,写出来巩固思路,不足之处,大佬多指教,谢谢! 用的是webapi使用 大致的思路是先webapi写一个查询数据库的程序, 再sqli ...

  3. python日历小程序_一个查看网络设备信息Python小程序

    原标题:一个查看网络设备信息Python小程序 网络编程中,最常见的一个问题就是,获取设备信息. 首先我们,要学习如何获取本机的网络信息.我们将用到标准库中的socket库.假如说,我们要查看本机的 ...

  4. python自动填写小程序表单_新年好!教大家用Python写一个自动回复拜年信息的小程序!...

    原标题:新年好!教大家用Python写一个自动回复拜年信息的小程序! 过年期间,想必大家都收到很多拜年信息吧!有没有也被拜年短信(大部分是群发)搞得很焦虑?不回复似乎显得很没有礼貌,一一回复又累心劳神 ...

  5. 写一个《扎金花》程序自己玩。

    写一个<扎金花>程序自己玩.hongjin2用一年半的时间基本自学完了程序设计专业的主干课程(除了<扎金花>,hongjin2实在看不懂),1995年hongjin2参加了初级 ...

  6. 一个Web人眼中的小程序和小游戏

    当年张小龙说:"小程序是一个不需要下载安装就可以使用的应用".我的第一反应是,不需要下载的应用,那不就是Web么? 后来,小程序在"雷声大,雨点小"的环境中度过 ...

  7. 如何制作一个在线订酒店的小程序

    互联网时代,客户普遍习惯线上预订酒店.酒店方面自然也需要拓展多个线上渠道卖房间,除了OTA渠道.酒店官网.APP等,小程序也是重要途径. 如何制作一个在线订酒店的小程序? 1. 让客户能够快速订房,满 ...

  8. 基于C++实现一个支持简单交互绘图小程序

    资源下载地址:https://download.csdn.net/download/sheziqiong/86763967 资源下载地址:https://download.csdn.net/downl ...

  9. 推荐一个非常棒的问卷小程序

    推荐一个非常棒的问卷小程序 ~ 具体我先讲下如何发现的这个小程序,其实昨天我在做答题相关产品的小程序调研,首先想到了阿拉丁的排行榜,在这个过程中,我看到了京东一个下沉小程序,具体叫京东赚赚,排名很靠前 ...

最新文章

  1. IEEE 解除对华为的限制!
  2. SAP QM 执行事务代码QA11 报错- Selected set code does not exist, or data entered is incomplete-
  3. Android中Activity的四种启动模式
  4. Python爬虫框架--Scrapy
  5. 马逊s3云存储接口_使用 Amazon S3 云服务轻松实现存储
  6. 0001-Two Sum(两数之和)
  7. flash背景透明、置底、禁止放大 右键菜单
  8. 盘点十个超级实用的 JS 特性
  9. drill apache_Apache Drill:如何创建新功能?
  10. 伪代码书写规范_C++代码书写规范(推荐新手程序员)
  11. 计算机工作对身体有害吗,在电脑前长时间工作会对身体有害处吗?
  12. 为什么把钱花在别人身上更幸福?
  13. NetBean生成Javadoc文档
  14. 仿9GAG制作过程(一)
  15. 一些高薪职位的能力需求。
  16. MFC release 发送到桌面快捷方式图标问题
  17. latex表格过长的解决办法之一:缩小字体
  18. PCB电路板Via、Pad孔的区分与安装孔、定位孔、金属孔、非金属孔的制作
  19. iOS APP:简单粗暴的自制下拉刷新
  20. android 特殊网络类型说明

热门文章

  1. 杭州seo优化常用的工作手法
  2. 高防CDN相比普通CDN的优势有哪些?
  3. linux下创建nginx虚拟目录详解,通过Samba映射Linux磁盘作为Windows IIS的虚拟目录--梦飞翔的地方(梦翔天空)...
  4. python-web服务器
  5. 计算机自带的配置检测,Windows10系统自带电脑硬件设备检测工具的使用步骤
  6. EAS BosType详解
  7. java与模式 之,《java与模式》学习之状态模式
  8. wifi模块和云端服务器的协议,wifi模块连接云端服务器的尝试(esp8266连thingSpeak)
  9. 工具类分享--便捷地改变字体样式
  10. 考研复试——数据结构