24点休闲益智小游戏

1. 题目要求:

24点游戏是经典的纸牌益智游戏。
常见游戏规则: 从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏。随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题。

2. 需求分析

2.1程序的功能

(1)输入输出的判定和四个数字的类型:
在输入表达式时程序会自动检测用户输入的数据是否为程序产生的那4个整数,如果不是就提醒用户输入有误,重新输入或退出程序。在输出的时候对最后结果等于24的判别。
(2)括号问题的处理:
对于括号问题,括号的几种情况
1.无括号a*b*c*d
2.(a b) c d同a b (c d)
3.(a b c) d
4.a (b c) d
5.(a b) (c d)
6.((a b) c) d
7.(a (b c)) d

2.2输入输出的要求

输入的运算符只能是+、-、*、/、(、)这六个,输入的整数必须是程序随机产生的那四个数,而且每个数只能用一次。当用户正确输入算式后,用“堆栈来求表达式的值” 的原理,求出结果并判断是否为24,得出用户是输是赢的结果。输出结果后,询问用户是否继续,是则重新启动程序,否则结束程序。

2.3功能模块图

功能模块图

3.流程图

主流程图

4.详细设计

4.1界面要求
有合理的界面,用户进入游戏后,登录账户,一步一步执行的时候有提示,方便操作。
4.2功能逻辑设计
设计程序前将其分为多块:
1)显示登录界面
玩家输入用户名和密码,进去游戏
2)显示游戏主界面
有三个选项,分别为计算机随机给出四个数字,玩家计算;用户自己输入四个数字进行计算或让计算机给出答案;退出游戏。
4.3使用说明
除了输入表达式计算外,若玩家不会游戏时,或者认为这四个数字不能构成24点时,可以输入?,计算机会给出答案,进行下一步。

5. 代码展示

5.1源代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <ctype.h>
#include <windows.h>
#include <time.h>
#define N 5
typedef struct{ //定义结构
    int elem[50];
    int top;
}seqstack;
char operator_arr[8]={'+' , '-' , '*' , '/' ,'(' , ')' , '#'};  //运算符种类
unsigned char pri[7][7] = {    //判断两个运算符的优先关系
      '>','>','<','<','<','>','>',
      '>','>','<','<','<','>','>',
      '>','>','>','>','<','>','>',
      '>','>','>','>','<','>','>',
      '<','<','<','<','<','=',' ',
      '>','>','>','>',' ','>','>',
      '<','<','<','<','<',' ','='
};
unsigned int operator_int[7] = {43,45,42,47,40,41,35};
char retchar;
int rad_num[4];
int *p;
int arr_len;
/*初始化(栈置空)操作,将栈设为空栈*/
void init_seqstack(seqstack *s) {       //s的top指针指向-1
    s->top = -1;
}
/*进栈函数*/ 
int Push_stack(seqstack *s,int x){      //如果栈满不能入栈,返回-1
    if(s->top == 49){   //栈已满
        return -1;
    }
    s->top++;
    s->elem[s->top] = x;
    return 0;
}
/*出栈函数*/
int Pop_seqstack(seqstack *s, int *x) {     //s的top指针指向-1,为空,返回-1
    if(s->top == -1){  //栈已空
        return -1;
    }   
    *x = s->elem[s->top];  //栈顶元素存入*x,返回
    s->top--;  //top指针-1
    return 0;
}
/*取栈顶元素*/
int get_top_stack(seqstack *s)  {
    if(s->top == -1){  //栈已空
        return -1;
    }    
    return s->elem[s->top];
}
int counter(int num1,int operat,int num2){
    if(operat == 43){
        return num1+num2;
    }
    else if(operat == 45){
        return num1-num2;
    }
    else if(operat == 42){
        return num1*num2;
    }
    else if(operat == 47){
        if(num2 == 0){
            return num1;
        }
        return num1/num2;
    }
    else{
        return 0;
    }
}
/*判断操作符优先级*/
char priority(char a,char b){
    int i,j;
    int pos1,pos2; 
    for(i=0;i<7;i++){
        if(a == operator_arr[i]){
            pos1 = i;
        }
    }
    for(j=0;j<7;j++){
        if(b == operator_arr[j]){
            pos2 = j;
        }
    }
    retchar = pri[pos1][pos2];
    if((pos1==4&&pos2==6)||(pos1==6&&pos2==5)){
        printf("pos1=%d,pos2=%d\n",pos1,pos2);
    }
    return retchar;
}
/*计算表达式的值*/
int calc_expr_int(int arr[]){
    int i=0,ret,tmp;
    int opera,num1,num2;
    char pri;
    seqstack  stack_char;   
    seqstack  stack_num; 
    init_seqstack(&stack_char);
    Push_stack(&stack_char, 35);
    init_seqstack(&stack_num);
    tmp=arr[i];
    while (tmp!= 35 || get_top_stack(&stack_char)!=35){  
        if((arr[i]>=40&&arr[i]<=43) || arr[i]==45 ||arr[i]==47||arr[i]==35){      
             pri = priority(get_top_stack(&stack_char), tmp);
             if(pri == '='){
              Pop_seqstack(&stack_char, &tmp);                   
                i++;
                tmp=arr[i];                                                  
             }
             else if(pri == '<'){
                Push_stack(&stack_char,tmp);                
                i++;
                tmp=arr[i];                                                  
             }
             else if(pri == '>'){       //不需要从表达式中取出下一个值
                Pop_seqstack(&stack_char, &opera);
                Pop_seqstack(&stack_num, &num2); 
                Pop_seqstack(&stack_num, &num1);
                Push_stack(&stack_num, counter(num1, opera,num2));     
             }
             else{
                printf("%c\n",pri);
                printf("运算符有问题\n");
                return 0;  
             }
        }
        else{       // 不是运算符则进栈
                Push_stack(&stack_num,tmp);
                i++;
                tmp=arr[i];     
        }       
    }
     ret=get_top_stack(&stack_num);
     return ret;
}
/*随机产生四个数字*/
void random_num(){
    int tmp;
    int i;
    for(i=0;i<4;i++){
        tmp = rand();
        tmp = tmp % 13 + 1;
        rad_num[i] = tmp;
    }
}
/*将用户输入的字符型表达式转化为整形存放到数组中*/
int* str_to_int(char *str,int *ilen){
    int len,num1,num2,num;
    int j=0,flag = 0;
    unsigned k;
    int i;
    len = strlen(str);
    p = (int *)malloc(sizeof(int)*len+1);
    for(k=0;k<strlen(str);k++){
        if(str[k]>47&&str[k]<58&&flag==0){  //字符0-9转换成整数0-9
            num1=(int)str[k]-48;
            flag++;
        }
        else if(str[k]>47&&str[k]<58&&flag==1){ //输入的字符可能是10-13所以用t=1表示这是在处理个位数
            num2=(int)str[k]-48;
            num=num1*10+num2;
            flag++;
        }
        else if((str[k]>=40&&str[k]<=43) || str[k]==35 || str[k]==45 ||str[k]==47){
            if(flag==1){            //将0-9插入数组
                p[j] = num1;
                j++;
            }
            else if(flag==2){       //将10-13插入数组           
                p[j] = num;
                j++;
            }
            p[j] = str[k];   //将字符插入数组
            j++;
            flag=0;
        }
        else{
            printf("%c是错误的字符!\n",str[k]);
        }
    }  
    i=strlen(str)-1;    //因为前面是遇到运算符才将数字插入数组,所以还剩最后一个整数没插入
    if(str[i]>47&&str[i]<58){
        if(str[i-1]>47&&str[i-1]<58){
               p[j] = num;
               j++;
        }
        else{
            p[j] = num1;
            j++;
        }
    }
    p[j]=35;
    *ilen = j;
    return p;
 }   
/*括号的几种情况*/
//第一种情况,无括号a*b*c*d
int express_1(int *exp){
    int expr[10];
    int p,q,m,n;
    int i,j,k;
    int a;
    for(m=0;m<4;m++){
        for(n=0;n<4;n++){  
                if(n==m){
                    continue;
                }
                for(p=0;p<4;p++){  
                    if(p==n||p==m){
                        continue;
                    }
                    for(q=0;q<4;q++){
                        if(q==p||q==m||q==n){
                            continue;
                        }                        
                        expr[0] = exp[q];
                        expr[2] = exp[p];
                        expr[4] = exp[n];
                        expr[6] = exp[m];                       
                        for(i=0;i<4;i++){
                            for(j=0;j<4;j++){
                                for(k=0;k<4;k++){
                                    expr[1] = operator_int[k];
                                    expr[3] = operator_int[j];
                                    expr[5] = operator_int[i];
                                    expr[7] = operator_int[6];
                                    if(calc_expr_int(expr) == 24){
                                        printf("\n可以计算出结果为24的表达式为:\n");
                                        for(a=0;a<7;a++){  
                                            if(expr[a]<=39||expr[a]>57||expr[a]==44||expr[a]==46){
                                                printf("%d",expr[a]);
                                            }
                                            else{
                                            printf("%c",expr[a]);
                                            }
                                        }
                                        printf("\n");
                                        return 1;
                                    }
                                }
                            }
                        }                       
                    }
                }
        }
    }
    return 0;
}
//第二种情况 (a b) c d,同a b (c d), 下省略
int express_2(int *exp){
    int expr[10];
    int p,q,m,n;
    int i,j,k;
    int a;
    for(m=0;m<4;m++){
        for(n=0;n<4;n++){  
                if(n==m){
                    continue;
                }
                for(p=0;p<4;p++){  
                    if(p==n||p==m){
                        continue;
                    }
                    for(q=0;q<4;q++){
                        if(q==p||q==m||q==n){
                            continue;
                        }                       
                        expr[1] = exp[q];
                        expr[3] = exp[p];
                        expr[6] = exp[n];
                        expr[8] = exp[m];                        
                        for(i=0;i<4;i++){
                            for(j=0;j<4;j++){
                                for(k=0;k<4;k++){
                                    expr[2] = operator_int[k];
                                    expr[5] = operator_int[j];
                                    expr[7] = operator_int[i];                                   
                                    expr[0] = operator_int[4];
                                    expr[4] = operator_int[5];
                                    expr[9] = operator_int[6];
                                    if(calc_expr_int(expr) == 24){
                                        printf("\n可以计算出结果为24的表达式为:\n");
                                        for(a=0;a<9;a++){  
                                            if(expr[a]<=39||expr[a]>57||expr[a]==44||expr[a]==46){
                                                printf("%d",expr[a]);
                                            }
                                            else{
                                                printf("%c",expr[a]);
                                            }
                                        }
                                        printf("\n\n");
                                        return 1;
                                    }
                                }
                            }
                        }                       
                    }
                }
        }
    }
    return 0;
}
//第三种情况(a b c) d
int express_3(int *exp){
    int expr[10];
    int p,q,m,n;
    int i,j,k;
    int a;
    for(m=0;m<4;m++){
        for(n=0;n<4;n++){  
                if(n==m){
                    continue;
                }
                for(p=0;p<4;p++){  
                    if(p==n||p==m){
                        continue;
                    }
                    for(q=0;q<4;q++){
                        if(q==p||q==m||q==n){
                            continue;
                        }                       
                        expr[1] = exp[q];
                        expr[3] = exp[p];
                        expr[5] = exp[n];
                        expr[8] = exp[m];                      
                        for(i=0;i<4;i++){
                            for(j=0;j<4;j++){
                                for(k=0;k<4;k++){
                                    expr[2] = operator_int[k];
                                    expr[4] = operator_int[j];
                                    expr[7] = operator_int[i];                                 
                                    expr[0] = operator_int[4];
                                    expr[6] = operator_int[5];
                                    expr[9] = operator_int[6];
                                    if(calc_expr_int(expr) == 24){
                                        printf("\n可以计算出结果为24的表达式为:\n");
                                        for(a=0;a<9;a++){  
                                            if(expr[a]<=39||expr[a]>57||expr[a]==44||expr[a]==46){
                                                printf("%d",expr[a]);
                                            }
                                            else{
                                                printf("%c",expr[a]);
                                            }
                                        }
                                        printf("\n");
                                        return 1;
                                    }
                                }
                            }
                        }                        
                    }
                }
        }
    }
    return 0;
}
//第四种情况a (b c) d
int express_4(int *exp){
    int expr[10];
    int p,q,m,n;
    int i,j,k;
    int a;
    for(m=0;m<4;m++){
        for(n=0;n<4;n++){  
                if(n==m){
                    continue;
                }
                for(p=0;p<4;p++){  
                    if(p==n||p==m){
                        continue;
                    }
                    for(q=0;q<4;q++){
                        if(q==p||q==m||q==n){
                            continue;
                        }                       
                        expr[0] = exp[q];      
                        expr[3] = exp[p];
                        expr[5] = exp[n];              
                        expr[8] = exp[m];                        
                        for(i=0;i<4;i++){
                            for(j=0;j<4;j++){
                                for(k=0;k<4;k++){
                                    expr[1] = operator_int[k];
                                    expr[4] = operator_int[j];
                                    expr[7] = operator_int[i];
                                    expr[2] = operator_int[4];
                                    expr[6] = operator_int[5];
                                    expr[9] = operator_int[6];
                                    if(calc_expr_int(expr) == 24){
                                        printf("\n可以计算出结果为24的表达式为:\n");
                                        for(a=0;a<9;a++){  
                                            if(expr[a]<=39||expr[a]>57||expr[a]==44||expr[a]==46){
                                                printf("%d",expr[a]);
                                            }
                                            else{
                                                printf("%c",expr[a]);
                                            }
                                        }
                                        printf("\n");
                                        return 1;
                                    }
                                }
                            }
                        }                        
                    }
                }
        }
    }
    return 0;
}
//第五种情况(a b) (c d)
int express_5(int *exp){
    int expr[12];
    int p,q,m,n;
    int i,j,k;
    int a;
    for(m=0;m<4;m++){
        for(n=0;n<4;n++){  
                if(n==m){
                    continue;
                }
                for(p=0;p<4;p++){  
                    if(p==n||p==m){
                        continue;
                    }
                    for(q=0;q<4;q++){
                        if(q==p||q==m||q==n){
                            continue;
                        } 
                        expr[1] = exp[q];
                        expr[3] = exp[p];
                        expr[7] = exp[n];
                        expr[9] = exp[m];                        
                        for(i=0;i<4;i++){
                            for(j=0;j<4;j++){
                                for(k=0;k<4;k++){
                                    expr[2] = operator_int[k];
                                    expr[5] = operator_int[j];
                                    expr[8] = operator_int[i];
                                    expr[0]  = operator_int[4];
                                    expr[4]  = operator_int[5];
                                    expr[6]  = operator_int[4];
                                    expr[10] = operator_int[5];
                                    expr[11] = operator_int[6];                                    
                                    if(calc_expr_int(expr) == 24){
                                        printf("\n可以计算出结果为24的表达式为:\n");
                                        for(a=0;a<11;a++){  
                                            if(expr[a]<=39||expr[a]>57||expr[a]==44||expr[a]==46){
                                                printf("%d",expr[a]);
                                            }
                                            else{
                                                printf("%c",expr[a]);
                                            }
                                        }
                                        printf("\n");
                                        return 1;
                                    }
                                }
                            }
                        }                         
                    }
                }
        }
    }
    return 0;
} 
//第六种情况((a b) c) d
int express_6(int *exp){
    int expr[12];
    int p,q,m,n;
    int i,j,k;
    int a;
    for(m=0;m<4;m++){
        for(n=0;n<4;n++){  
                if(n==m){
                    continue;
                }
                for(p=0;p<4;p++){  
                    if(p==n||p==m){
                        continue;
                    }
                    for(q=0;q<4;q++){
                        if(q==p||q==m||q==n){
                            continue;
                        }                         
                        expr[2]  = exp[q];
                        expr[4]  = exp[p];
                        expr[7]  = exp[n];
                        expr[10] = exp[m];                        
                        for(i=0;i<4;i++){
                            for(j=0;j<4;j++){
                                for(k=0;k<4;k++){
                                    expr[3]  = operator_int[k];
                                    expr[6]  = operator_int[j];
                                    expr[9]  = operator_int[i];
                                    expr[0]  = operator_int[4];
                                    expr[8]  = operator_int[5];
                                    expr[1]  = operator_int[4];
                                    expr[5]  = operator_int[5];
                                    expr[11] = operator_int[6];
                                    if(calc_expr_int(expr) == 24){
                                        printf("\n可以计算出结果为24的表达式为:\n");
                                        for(a=0;a<11;a++){  
                                            if(expr[a]<=39||expr[a]>57||expr[a]==44||expr[a]==46){
                                                printf("%d",expr[a]);
                                            }
                                            else{
                                                printf("%c",expr[a]);
                                            }
                                        }
                                        printf("\n");
                                        return 1;
                                    }
                                }
                            }
                        }                        
                    }
                }
        }
    }
    return 0;
} 
//第七种情况(a (b c)) d
int express_7(int *exp){
    int expr[12];
    int p,q,m,n;
    int i,j,k;
    int a,ret;    
    for(m=0;m<4;m++){
        for(n=0;n<4;n++){  
                if(n==m){
                    continue;
                }
                for(p=0;p<4;p++){  
                    if(p==n||p==m){
                        continue;
                    }
                    for(q=0;q<4;q++){
                        if(q==p||q==m||q==n){
                            continue;
                        }
                        expr[1] = exp[m];
                        expr[4] = exp[n];
                        expr[6] = exp[p];
                        expr[10] = exp[q];
                        for(i=0;i<4;i++){
                            for(j=0;j<4;j++){
                                for(k=0;k<4;k++){
                                    expr[2]  = operator_int[i];
                                    expr[5]  = operator_int[j];
                                    expr[9]  = operator_int[k];
                                    expr[0]  = operator_int[4];
                                    expr[8]  = operator_int[5];
                                    expr[3]  = operator_int[4];
                                    expr[7]  = operator_int[5];
                                    expr[11] = operator_int[6];
                                    ret  = calc_expr_int(expr);
                                    if( ret == 24){  
                                        printf("\n可以计算出结果为24的表达式为:\n");
                                        for(a=0;a<11;a++){  
                                            if(expr[a]<=39||expr[a]>57||expr[a]==44||expr[a]==46){
                                                printf("%d",expr[a]);
                                            }
                                            else{
                                                printf("%c",expr[a]);
                                            }
                                        }
                                        printf("\n");
                                        return 1;
                                    }
                                }
                            }
                        }                        
                    }
                }
        }
    }   
    return 0;
}
int calculation24(int *arr){
    if(express_1(arr)){
        return 1;
    }
    else if(express_2(arr)){
        return 1;
    }
    else if(express_3(arr)){
        return 1;
    }
    else if(express_4(arr)){
        return 1;
    }
    else if(express_5(arr)){
        return 1;
    }
    else if(express_6(arr)){
        return 1;
    }
    else if(express_7(arr)){
        return 1;
    }
    else{
        return 0;
    }
}
int check_num(char *arr){  
    int i,j,k;
    int *iarr;
    int tmp[4];
    for(k=0;k<4;k++){
        tmp[k] = rad_num[k];
    }
    iarr = str_to_int(arr,&arr_len);
    for(i=0;i<arr_len;i++){  
        if((iarr[i]>=0&&iarr[i]<=13)||(iarr[i]>=40&&iarr[i]<=43) || iarr[i]==35 || iarr[i]==45 ||iarr[i]==47)
        {  
            if(iarr[i]>=0&&iarr[i]<=13){
                for(j=0;j<4;j++){
                    if(iarr[i] == tmp[j]){  
                        tmp[j] = -1;    //使用tmp数组作为标记,如果不能全部清零证明重复使用给出的某个数字
                        break;
                    }
                }
                if(j>=4){
                    return 0;
                }
            }
            else{
                for(j=0;j<7;j++){
                    if(iarr[i] = operator_int[j]){
                        break;
                    }  
                }
                if(j>=7){
                    return 0;
                }
            }
        }
        else{  
            return 0;
        }
    }
    for(k=0;k<4;k++){
        if(tmp[k] > 0){
            return 0;
        }
    }
    return 1;
}
//enter函数
void enter(int x){
    for(int i=0;i<x;i++)
        printf("\n");
}
//tab函数
void tab(int x){
    for(int i=0;i<x;i++)
        printf("\t");
}
//启动
void start(){
    system("cls");
    int m,i;
    for(m=0;m<1;m++){
            system("color B");      //设置默认的控制台前景和背景颜色
            enter(7);
            tab(3);
            printf("   欢迎来到24点休闲小游戏      ");
            enter(2);
            tab(2);
            printf("    正在加载中 ■");
            enter(1);
            tab(4);
            for(i=0;i<100000000;i++){}
            system("cls");                  //circle 1 end
            enter(7);
            tab(3);
            printf("   欢迎来到24点休闲小游戏      ");
            enter(2);
            tab(2);
            printf("    正在加载中 ■■");
            enter(1);
            tab(4);
            for(i=0;i<100000000;i++){}
            system("cls");                  //circle 2 end     
            enter(7);
            tab(3);
            printf("   欢迎来到24点休闲小游戏      ");
            enter(2);
            tab(2);
            printf("    正在加载中 ■■■");
            enter(1);
            tab(4);
            for(i=0;i<100000000;i++){}
            system("cls");                  //circle 3 end         
            enter(7);
            tab(3);
            printf("   欢迎来到24点休闲小游戏      ");
            enter(2);
            tab(2);
            printf("    正在加载中 ■■■■");
            enter(1);
            tab(4);        
            for(i=0;i<100000000;i++) {}
            system("cls");                  //circle 4 end
            enter(7);
            tab(3);
            printf("   欢迎来到24点休闲小游戏      ");
            enter(2);
            tab(2);
            printf("    正在加载中 ■■■■■");
            enter(1);
            tab(4);
            for(i=0;i<100000000;i++) {}
            system("cls");                  //circle 5 end  
            enter(7);
            tab(3);
            printf("   欢迎来到24点休闲小游戏      ");
            enter(2);
            tab(2);
            printf("    正在加载中 ■■■■■");
            enter(1);
            tab(4);
            for(i=0;i<100000000;i++){}
            system("cls");                  //circle 6 end
            enter(7);
            tab(3);
            printf("   欢迎来到24点休闲小游戏      ");
            enter(2);
            tab(2);
            printf("    正在加载中 ■■■■■■");
            enter(1);
            tab(4);
            for(i=0;i<100000000;i++){}
            system("cls");                  //circle 7 end 
            enter(7);
            tab(3);
            printf("   欢迎来到24点休闲小游戏      ");
            enter(2);
            tab(2);
            printf("    正在加载中 ■■■■■■■");
            enter(1);
            tab(4);
            for(i=0;i<100000000;i++) {}
            system("cls");                  //circle 8 end 
            enter(7);
            tab(3);
            printf("   欢迎来到24点休闲小游戏      ");
            enter(2);
            tab(2);
            printf("    正在加载中 ■■■■■■■■");
            enter(1);
            tab(4);
            for(i=0;i<100000000;i++){}
            system("cls");                //circle 9 end
    }
}                       
char name[20] = "hening";   //游戏账号登陆用户姓名
char password[20] = "123456";  //登录密码
//登陆函数
void login(){  
    system("color E");  
    char count[20];
    char pass[20];
    int i;
    while(1){  
        system("cls");
        enter(7);
        tab(3);
        printf("         游戏账号登录      ");
        enter(2);
        tab(3);
        printf("用户名称:");
        scanf("%s",count);
        if(strcmp(count,name)==0){
            leap:system("cls");
            enter(7);
            tab(3);
            printf("         游戏账号登录      ");            
            enter(2);
            tab(3);
            printf("登录密码:");
            scanf("%s",pass);
            getchar();
            if(strcmp(pass,password) == 0){  
                break;
            }
            else{      
                tab(4);
                printf("输入密码有误,请重新输入:\n");
                for(i=0;i<500000000;i++);
                goto leap;
            }
        }
        else{
            tab(4);
            printf("输入密码有误,请重新输入:\n");
            for(i=0;i<500000000;i++);
        }
    }
}
//主函数
int main(){  
    char c,q;
    int y_n = 1;
    int curr_mode = 1;
    int mode = 1;
    int right_count = 0;
    int all_count = 0;
    char express[50];
    int quit = 0;   
    start();    
    login();
    while(!quit){  
        system("cls");
        system("color 7"); 
        printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n");
        printf(" *                    欢迎来到24点休闲小游戏                       *\n\n");
        printf(" *     [0]:计算机随机给出四个数字,用户输入正确表达式!             *\n\n");
        printf(" *     [1]:用户输入四个数字,计算机给出符合条件的表达式!           *\n\n");
        printf(" *     [2]:游戏退出!                                               *\n\n");
        printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n");
        printf("\n\n请选择编号:");
        c = getchar();
        getchar();
        printf("\n");
        system("cls");
        if(c == '0'){  
            curr_mode = 1;
            while(curr_mode){  
                random_num();
                printf("计算机给出的四个数字是:\n");
                printf("\t\t\t%d %d %d %d\n",rad_num[0],rad_num[1],rad_num[2],rad_num[3]);
                printf("\n请你输入正确的表达式,如果你认为这四个数算不出24点,请输入'?'\n");
                printf("\n你的答案是:");
                scanf("%s",express);
                getchar();
                if(strcmp("?",express) == 0){  
                    system("cls");
                    if(calculation24(rad_num)){                       
                        all_count++;
                        printf("给出的数字是能计算出24的,所以你回答错误!\n\n");
                    }
                    else{  
                        printf("恭喜你,算对了!\n\n");
                        all_count++;
                        right_count++;
                    }
                }
                else{  
                    while(!check_num(express)){
                        printf("你的表达式格式不正确,请重新输入:");
                        scanf("%s",express);
                        getchar();
                    }
                    printf("\n");
                    system("cls");
                    if(calc_expr_int(str_to_int(express,&arr_len)) != 24){
                        all_count++;
                        printf("对不起,你算错了!\n\n");
                    }
                    else{  
                        printf("恭喜你,算对了!\n\n");
                        all_count++;
                        right_count++;
                    }
                } 
                printf("是否继续这个模式?请选择:  'y':继续  'n':退出?\n\n");
                y_n = 1;
                while(y_n){  
                    q = getchar();
                    getchar();
                    if(q == 'y'|| q == 'Y') {
                        curr_mode = 1;
                        y_n = 0;
                        printf("\n");

                    }
                    else if(q == 'N' || q == 'n'){
                        curr_mode = 0;
                        y_n = 0;
                        printf("\n");
                    }
                    else{  
                        printf("\n");
                        printf("输入错误,请重新输入[Y|N]:");
                        y_n = 1;
                    }
                }
            }
            printf("是否继续这个模式?请选择:  'y':继续  'n':退出?\n\n");
            y_n = 1;
            while(y_n){  
                scanf("%c",&c);
                getchar();
                if(c == 'Y'||c == 'y'){
                    quit = 0;
                    y_n = 0;
                    printf("\n");
                }
                else if(c == 'N' || c == 'n'){  
                    quit = 1;
                    y_n  = 0;
                    printf("\n");
                    printf("\t\t********************\n");
                    printf("\t\t*  用户总答题:%d   *\n",all_count);
                    printf("\t\t*  用户共答对:%d   *\n",right_count);
                    printf("\t\t********************\n");
                    printf("\t\t\t\t游戏退出成功!!!\n\n\n\n\n");
                }
                else{  
                    printf("\n");
                    printf("输入错误,请选择:");
                    y_n = 1;
                }
            }
        }         
        else if(c == '1'){  
            int ret;
            mode = 1;
            while(mode == 1){
                printf("请输入0-13之间的4个数字:");
                scanf("%d%d%d%d",&rad_num[0],&rad_num[1],&rad_num[2],&rad_num[3]);
                getchar();
                while(rad_num[0] > 13 || rad_num[0] < 0 || rad_num[1] > 13 || rad_num[1] < 0 ||rad_num[2] > 13 || rad_num[2] < 0 || rad_num[3] > 13 || rad_num[3] < 0)
                {
                    printf("不好意思,你输入的数字必须在0-13之间,请重新输入:");
                    scanf("%d%d%d%d",&rad_num[0],&rad_num[1],&rad_num[2],&rad_num[3]);
                    getchar();
                }  
                system("cls");
                ret = calculation24(rad_num);
                if(ret == 0){  
                    all_count++;
                    printf("\n输入有误,你输入的数字不能构造一个值为24的表达式!\n\n");
                    printf("\n");
                }
                else{ 
                    all_count++;
                    right_count++;
                }
                printf("是否继续这个模式?请选择:  'y':继续  'n':退出?\n\n");
                y_n = 1;
                while(y_n)
                {  
                    scanf("%c",&q);
                    getchar();
                    if(q == 'y'|| q == 'Y'){
                        mode = 1;
                        y_n = 0;
                        printf("\n");
                    }
                    else if(q == 'N' || q == 'n'){
                        mode = 0;
                        y_n = 0;
                        printf("\n");
                    }
                    else{  
                        printf("\n");
                        printf("输入错误,请重新输入[Y|N]:");
                        y_n = 1;
                    }
                }
            }
            printf("是否继续这个模式?请选择:  'y':继续  'n':退出?\n\n");
            y_n = 1;
            while(y_n){  
                scanf("%c",&c);
                getchar();
                if(c == 'Y'||c == 'y'){
                    quit = 0;
                    y_n = 0;
                    printf("\n");
                }
                else if(c == 'N' || c == 'n'){  
                    quit = 1;
                    y_n  = 0;
                    printf("\n");
                    printf("\t\t********************\n");
                    printf("\t\t*  用户总答题:%d   *\n",all_count);
                    printf("\t\t*  用户共答对:%d   *\n",right_count);
                    printf("\t\t********************\n");
                    printf("\t\t\t\t游戏退出成功!!!\n\n\n\n\n");
                }
                else{  
                    printf("\n");
                    printf("输入错误,请选择:");
                    y_n = 1;
                }
            }
        }
        else{  
            quit = 1;
            printf("\t\t********************\n");
            printf("\t\t*  用户总答题:%d   *\n",all_count);
            printf("\t\t*  用户共答对:%d   *\n",right_count);
            printf("\t\t********************\n");
            printf("\t\t\t\t游戏退出成功!!!\n\n\n\n\n");
            printf("\t\t\t\t游戏退出成功!!!\n\n\n\n\n");
            return 0;
        }
    }
    return 0;
    }

5.2时间倒计时

char count(UCHAR m, UCHAR s){
    if( m > 59 || s > 59)
        return -1;
        while(m || s){
            do{
                system("cls");    
                printf("%d%d秒",m,s);
                Sleep(1000);
            }while(s--);
            s = 0;
            if(m > 0){
                s = 59;
                m--;
            }
    }
    return 0;
}
int main(int argc, char **argv) {
    if(count(1,3) == 0)
        printf("时间到,游戏结束!\n");
    else
        printf("错误!\n");
    Sleep(2000);
    system("pause");
    return 0;
}

5.3登录

char name[20] = "hening";   //游戏账号登陆用户姓名
char password[20] = "123456";  //登录密码

6. 运行结果

进入界面
账号登录
密码
主界面
退出

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值