24点⼩游戏(C语⾔实现)
⼀、题⽬分析
题⽬要求:
24点⼩游戏是经典的纸牌益智游戏。
常见游戏规则如下:
从扑克牌中任意取出四张牌,对牌⾯上的四个数字使⽤任意的加减乘除(每张牌牌⾯上的数字都只能使⽤⼀次),第⼀个能得到24者为胜。(其中,J代表11、Q代表12、K代表13、A代表1),请按要求编写程序实现24点⼩游戏。
基本要求:随机⽣成四个代表扑克牌牌⾯的数字,程序⾃动列出所有可能算出24点的表达式,⽤擅长的语⾔(C/C++/Java或其他均可)实现程序解决问题。
1. 程序风格良好(使⽤⾃定义的注释模板)
2. 程序⾃动列出的表达式⽆重复
提⾼要求:⽤户初始⽣命值为⼀给定值,初始分数为0。随机⽣成四个代表扑克牌牌⾯的数字,由⽤户输⼊包含这四个数字的运算表达式(可包含括号),如果表达式计算结果为24,则代表⽤户赢了此局。
1. 程序风格良好(使⽤⾃定义的注释模板)
2. 使⽤计时器,要求⽤户在规定时间内输⼊表达式,如果规定时间内运算正确则加分,超时或运算错误则进⼊下⼀题并减少⽣命值(不
扣分)
3. 所有成绩均可记录在⽂件中
分析:
1.可以通过rand()函数⽣成四个1-13的随机数
2.通过分析,表达式可分为以下三类:
1. )不含括号的表达式
2. )含有⼀个括号的表达式
3. )含有两个括号的表达式
这三类表达式可具体概括为以下五种:
● ((A_B)_C)_D
● (A_(B_C))_D
● A_((B_C)_D)
● A_(B_(C_D))
● (A_B)_(C_D)
我们可以通过3个for循环的嵌套根据五种表达式类型穷举出四个随机数可能组成的所有表达式,并利⽤if条件判断输出所有能够得到24点的表达式。
⼆、算法构造(流程图)
● 通过num()函数⽣成四个1-13的随机数
void num()
{
int i;
srand(time(NULL));
for(i=0; i<4; i++)
{
a[i] = rand()%13+1;
}
for(i=0; i<4; i++)
{
printf("第%d张牌:%d\n", i+1, a[i]);
}
}
● 通过cal()函数对两个操作数进⾏计算
int cal(int x, int y, char ope)
{
int z;
if(ope=='+')
z = x+y;
else if(ope=='-')
z = x-y;
else if(ope=='*')
z = x*y;
else if(ope=='/')
z = x/y;
return z;
}
● 通过express_1()函数计算表达式((A_B)_C)_D
int express_1(int i, int j, int k, int t, char ope1, char ope2, char ope3) {
int x1, x2, x3;
x1 = cal(i, j, ope1);
x2 = cal(x1, k, ope2);
x3 = cal(x2, t, ope3);
return x3;
}
● 通过express_2()函数计算表达式(A_(B_C))_D
int express_2(int i, int j, int k, int t, char ope1, char ope2, char ope3) {
int x1, x2, x3;
x1 = cal(j, k, ope2);
x2 = cal(i, x1, ope1);
x3 = cal(x2, t, ope3);
return x3;
}
● 通过express_3()函数计算表达式A_((B_C)_D)
int express_3(int i, int j, int k, int t, char ope1, char ope2, char ope3) {
int x1, x2, x3;
x1 = cal(j, k, ope2);
x2 = cal(x1, t, ope3);
x3 = cal(i, x2, ope1);
return x3;
}
● 通过express_4()函数计算表达式A_(B_(C_D))
int express_4(int i, int j, int k, int t, char ope1, char ope2, char ope3)
{
int x1, x2, x3;
x1 = cal(k, t, ope3);
x2 = cal(j, x1, ope2);
x3 = cal(i, x2, ope1);
return x3;
}
● 通过express_5()函数计算表达式(A_B)_(C_D)
int express_5(int i, int j, int k, int t, char ope1, char ope2, char ope3)
{
int x1, x2, x3;
x1 = cal(i, j, ope1);
x2 = cal(k, t, ope3);
c语言游戏编程题经典100例x3 = cal(x1, x2, ope2);
return x3;
}
● 通过3个for循环穷举出四个随机数所能组成的所有表达式,并利⽤if条件判断输出所有能够得到24点的表达式
for(x=0; x<4; x++)
{
p = ope[x];
for(y=0; y<4; y++)
{
q = ope[y];
for(z=0; z<4; z++)
{
r = ope[z];
if(express_1(i, j, k, t, p, q, r)==24)
printf("((%d %c %d) %c %d) %c %d = 24\n", i, p, j, q, k, r, t);
if(express_2(i, j, k, t, p, q, r)==24)
printf("(%d %c (%d %c %d)) %c %d = 24\n", i, p, j, q, k, r, t);
if(express_3(i, j, k, t, p, q, r)==24)
printf("%d %c ((%d %c %d) %c %d) = 24\n", i, p, j, q, k, r, t);
if(express_4(i, j, k, t, p, q, r)==24)
printf("%d %c (%d %c (%d %c %d)) = 24\n", i, p, j, q, k, r, t);
if(express_5(i, j, k, t, p, q, r)==24)
printf("(%d %c %d) %c (%d %c %d) = 24\n", i, p, j, q, k, r, t);
}
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。