C语言版24点游戏.docx
- 文档编号:7024265
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:13
- 大小:15.86KB
C语言版24点游戏.docx
《C语言版24点游戏.docx》由会员分享,可在线阅读,更多相关《C语言版24点游戏.docx(13页珍藏版)》请在冰豆网上搜索。
C语言版24点游戏
#include
#include
#include
#include
#include
structs_node
{
intdate;
structs_node*next;
};
typedefstructs_nodes_list;
typedefs_list*link;
linkOPER=NULL;
linkOPND=NULL;
charm;
linkcreat(linkstack)//创建空栈的函数
{
stack=(link)malloc(sizeof(s_list));
if(!
stack)
{
printf("\nERROR");
returnNULL;
}
returnstack;
}
linkpush(linkstack,intvalue)//添加新的元素value为stack的栈顶元素
{
linknewnode;
newnode=(link)malloc(sizeof(s_list));
if(!
newnode)
{
printf("\nERROR");
returnNULL;
}
newnode->date=value;
newnode->next=stack;
stack=newnode;
returnstack;
}
linkpop(linkstack)//栈顶出栈的函数,m表示出栈的栈顶元素
{
linktop;
if(stack!
=NULL)
{
top=stack;
stack=stack->next;
m=top->date;
free(top);
returnstack;
}
else
m=-1;
}
intis_oper(charoper)//判断是否为算符的函数
{
switch(oper)
{
case'+':
case'-':
case'*':
case'/':
case'(':
case')':
case'#':
return1;
default:
return0;
}
}
intcompare(charq1,charq2)//比较算符优先程度的函数
{
if(q1=='+')//‘+’的比较
{
switch(q2)
{
case'+':
return1;
case'-':
return1;
case'*':
return0;
case'/':
return0;
case'(':
return0;
case')':
return1;
case'#':
return1;
}
}
elseif(q1=='-')//‘-’的比较
{
switch(q2)
{
case'+':
return1;
case'-':
return1;
case'*':
return0;
case'/':
return0;
case'(':
return0;
case')':
return1;
case'#':
return1;
}
}
elseif(q1=='*')//‘*’的比较
{
switch(q2)
{
case'+':
return1;
case'-':
return1;
case'*':
return1;
case'/':
return1;
case'(':
return0;
case')':
return1;
case'#':
return1;
}
}
elseif(q1=='/')//‘/’的比较
{
switch(q2)
{
case'+':
return1;
case'-':
return1;
case'*':
return1;
case'/':
return1;
case'(':
return0;
case')':
return1;
case'#':
return1;
}
}
elseif(q1=='(')//‘(’的比较
{
switch(q2)
{
case'+':
return0;
case'-':
return0;
case'*':
return0;
case'/':
return0;
case'(':
return0;
case')':
return2;
case'#':
return-1;
}
}
elseif(q1==')')//‘)’的比较
{
switch(q2)
{
case'+':
return1;
case'-':
return1;
case'*':
return1;
case'/':
return1;
case'(':
return-1;
case')':
return1;
case'#':
return1;
}
}
elseif(q1=='#')//‘#’的比较
{
switch(q2)
{
case'+':
return0;
case'-':
return0;
case'*':
return0;
case'/':
return0;
case'(':
return0;
case')':
return-1;
case'#':
return2;
}
}
}
intoperate(intp1,intp2,charq)//二元运算的函数,q代表运算符,p1为运算符的左边数值,p2为运算符的右边数值
{
intp;
if(q=='+')
{
p=p1+p2;
returnp;
}
elseif(q=='-')
{
p=p1-p2;
returnp;
}
elseif(q=='*')
{
p=p1*p2;
returnp;
}
elseif(q=='/')
{
p=p1/p2;
returnp;
}
}
intmain()
{
charc,e,u;
intn,a,b,t,v;
inti=0;
intf1,f2,f3,f4,flag=0;
inth[5]={0};
OPER=creat(OPER);
OPND=creat(OPND);
while
(1)
{
OPER->date=0;
OPND->date=0;
printf("------------------------------------------------------------------------------\n\n\n");
printf("24点游戏系统\n\n");
printf("您得到的四个随机数\n\n");
srand((unsigned)time(NULL));
f1=rand()%13+1;
f2=rand()%13+1;
f3=rand()%13+1;
f4=rand()%13+1;
printf("【%d】【%d】【%d】【%d】\n\n",f1,f2,f3,f4);
printf("请输入表达式'#'号结束,无法解答请输入?
直接结束请输入*\n\n");
printf("------------------------------------------------------------------------------\n\n\n");
printf("");
c=getchar();
if(c=='?
')
{
system("cls");
getchar();
continue;
}
elseif(c=='*')
break;
while(OPER->date!
='#')
{
if(flag==1)
break;
if(is_oper(c))
{
if(OPER->date==0)//判断OPER是否为空
{
OPER=push(OPER,c);//若为空则为第一次输入,进栈.
c=getchar();
continue;
}
else
{
n=compare(OPER->date,c);
switch(n)
{
case0:
{
OPER=push(OPER,c);
c=getchar();
break;
}
case1:
{
OPER=pop(OPER);
e=m;
OPND=pop(OPND);
if((t!
=f1)&&(t!
=f2)&&(t!
=f3)&&(t!
=f4)&&(t!
=h[0])&&(t!
=h[1])&&(t!
=h[2])&&(t!
=h[3])&&(t!
=h[4])&&(t!
=h[5]))
{
printf("\n\n-----------------------------没有使用给出的数字!
-------------------------------\n\n");
flag=1;
}
b=m;
OPND=pop(OPND);
if((t!
=f1)&&(t!
=f2)&&(t!
=f3)&&(t!
=f4)&&(t!
=h[0])&&(t!
=h[1])&&(t!
=h[2])&&(t!
=h[3])&&(t!
=h[4])&&(t!
=h[5]))
{
printf("\n\n-----------------------------没有使用给出的数字!
-------------------------------\n\n");
flag=1;
}
a=m;
t=operate(a,b,e);
h[i]=t;
i++;
OPND=push(OPND,t);
break;
}
case2:
{
OPER=pop(OPER);
c=getchar();
break;
}
}
}
}
else
{
OPND=push(OPND,c-48);
c=getchar();
if(is_oper(c))
continue;
else
{
OPND=pop(OPND);
v=c-'0';
t=m*10+v;
if((t!
=f1)&&(t!
=f2)&&(t!
=f3)&&(t!
=f4)&&(t!
=h[0])&&(t!
=h[1])&&(t!
=h[2])&&(t!
=h[3])&&(t!
=h[4])&&(t!
=h[5]))
{
printf("\n\n-----------------------------没有使用给出的数字!
-------------------------------\n\n");
flag=1;
}
OPND=push(OPND,t);
h[i]=t;
i++;
c=getchar();
continue;
}
}
}
if(OPND->date==24&&flag==0)
{
printf("----------------------------------------------------------------------------\n\n\n");
printf("**【Congratulation!
】**\n\n\n");
printf("----------------------------------------------------------------------------\n\n\n");
}
elseif(flag==0)
{
printf("----------------------------------------------------------------------------\n\n\n");
printf("**【Incorrect!
】**\n\n\n");
printf("----------------------------------------------------------------------------\n\n\n");
}
system("pause");
printf("是否继续游戏?
y:
继续.n:
结束\n\n\n");
flag=0;
u=getchar();
if(u=='n')
{
break;
}
else
{
c=getchar();
system("cls");
continue;
}
}
printf("\n\n\n-----------------------------24点游戏系统-------------------------------\n\n\n");
printf("\n\n\n**谢谢使用!
**\n");
system("pause");
return0;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言版 24 游戏