用C语言实现的纸牌计算24点小游戏代码分享
创始人
2024-12-23 06:20:30
0次

游戏描述:

  A-10:分别代表数字 1-10。  J,Q,K:均代表数字1。  考虑到部分地方的规则,J,Q,K 也可以当成10 ,或者直接代表本身所代表的数字,即11、12、13来运算。  使用加减乘除,能得出24者为赢,存在无解情况。  游戏开始得分为1000分,每一秒钟减少1分,当答对一次时,分数增加100分。(暂未实现)

代码展示:

/* * * Project : 计算24  *  * Date : 2015年3月25日10:55:47  * * Remark :纸牌中的10以0代替,减法得数均为正数  */ #include  #include  #include  #include   char getPokerCard(int value) {  if(value==1)  {   return 'A';  } else if(value<10) {  return value+'0'; } else if(value==10) {  return '0'; } else if(value==11) {  return 'J'; } else if(value==12) {  return 'Q'; } else if(value==13) {  return 'K'; } }  void printAnswer(int flag,int *poker,char *oper,char *answer) {  char a=getPokerCard(poker[0]);  char b=getPokerCard(poker[1]);  char c=getPokerCard(poker[2]);  char d=getPokerCard(poker[3]);    switch(flag)  {   //1.((A*B)*C)*D   case 1:    printf("((%c%c%c)%c%c)%c%c\n",a,oper[0],b,oper[1],c,oper[2],d);    break;   //2.(A*(B*C))*D   case 2:    printf("(%c%c(%c%c%c))%c%c\n",a,oper[0],b,oper[1],c,oper[2],d);    break;   //3.(A*B)*(C*D)   case 3:    printf("(%c%c%c)%c(%c%c%c)\n",a,oper[0],b,oper[1],c,oper[2],d);    break;   //4.A*(B*(C*D))   case 4:    printf("%c%c(%c%c(%c%c%c))\n",a,oper[0],b,oper[1],c,oper[2],d);    break;   //5.A*((B*C)*D)    case 5:    printf("%c%c((%c%c%c)%c%c)\n",a,oper[0],b,oper[1],c,oper[2],d);    break;   default:    break;  }    //存储answer      return ;  }  double getValue(double num1,double num2,char oper) {  double result;    switch(oper)  {   case '+':   result=num1+num2;   break;  case '-':   result=fabs(num1-num2);   break;  case '*':   result=num1*num2;   break;  case '/':   result=num1/num2;   break;  default :   break;  }    return result; }  int getResult(int *poker,char *oper,char *answer) {  double t;  //将计算值取到   int a=poker[0]>10?1:poker[0];  int b=poker[1]>10?1:poker[1];  int c=poker[2]>10?1:poker[2];  int d=poker[3]>10?1:poker[3];    //穷举运算次序 //1.((A*B)*C)*D t=0; t=getValue(a,b,oper[0]); t=getValue(t,c,oper[1]); t=getValue(t,d,oper[2]);  if(fabs(t-24)<0.0001) {  printAnswer(1,poker,oper,answer);  return 1; }  //2.(A*(B*C))*D t=0; t=getValue(b,c,oper[1]); t=getValue(a,t,oper[0]); t=getValue(t,d,oper[2]);  if(fabs(t-24)<0.0001) {  printAnswer(2,poker,oper,answer);  return 1; }  //3.(A*B)*(C*D) t=0; t=getValue(getValue(a,b,oper[0]),getValue(c,d,oper[2]),oper[1]);  if(fabs(t-24)<0.0001) {  printAnswer(3,poker,oper,answer);  return 1; }  //4.A*(B*(C*D)) t=0; t=getValue(c,d,oper[2]); t=getValue(b,t,oper[1]); t=getValue(a,t,oper[0]);  if(fabs(t-24)<0.0001) {  printAnswer(4,poker,oper,answer);  return 1; }  //5.A*((B*C)*D)  t=0;  t=getValue(b,c,oper[1]); t=getValue(t,d,oper[2]); t=getValue(a,t,oper[0]);  if(fabs(t-24)<0.0001) {  printAnswer(5,poker,oper,answer);  return 1; }   return 0; }  void printResult(int *poker,char *answer) {  char OperKey[4]={'+','-','*','/'};  char oper[3];  int i,j,k;  int count=0;    for(i=0;i<4;i++)  for(j=0;j<4;j++)  for(k=0;k<4;k++)  {   oper[0]=OperKey[i];   oper[1]=OperKey[j];   oper[2]=OperKey[k];      if(getResult(poker,oper,answer))   count++;  }  if(count)  {   printf("共%d种解法\n",count);  }  else  {   printf("该情况无解\n");  }    return ; }  void printPoker(int *poker) {   int i;  for(i=0;i<4;i++)  {   printf("%c ",getPokerCard(poker[i]));  }  printf("\n");    return ; }  void getRandomPokers(int *poker) {  int i;    //利用系统时间作为种子产生随机数 ,函数srand(),rand()=>stdlib.h ,函数time()=>time.h  srand((unsigned)time(NULL)); for(i=0;i<4;i++) {  poker[i]=rand()%12+1; }  return ;  }  main() {   int poker[4]; char answer[20];  char c;    printf("纸牌计算24点\n--------------------------------------------\n");  do  {   //生成随机纸牌    getRandomPokers(poker);      printf("随机生成的纸牌为:\n");   //输出生成的纸牌    printPoker(poker);      printf("\n任意键获得结果...\n");   getchar();       //输出计算结果   printResult(poker,answer);      printf("\n回车键继续,其他键并回车退出...\n");   c=getchar();      printf("--------------------------------------------\n");  }  while(c=='\n');    return 0; }

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...