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. 运行结果