温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

用C语言实现的纸牌计算24点小游戏代码分享

发布时间:2021-08-27 18:08:54 来源:亿速云 阅读:140 作者:chen 栏目:编程语言

本篇内容主要讲解“用C语言实现的纸牌计算24点小游戏代码分享”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“用C语言实现的纸牌计算24点小游戏代码分享”吧!

游戏描述:

  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 <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h>  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; }

到此,相信大家对“用C语言实现的纸牌计算24点小游戏代码分享”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI