急求一个至少1000行的C语言游戏源程序。最好能有个解释。
# include & ltstdlib.h & gt
# include & lttime.h & gt
# include & ltctype.h & gt
typedef结构节点
{
char数据;
结构节点* next
}栈;//定义堆栈
//堆叠操作
栈*推(栈*顶,字符x)
{
stack * p;
p =(stack *)malloc(sizeof(stack));//打开节点
If(p==NULL)//如果开发失败,
{
printf("错误!\ n ");
退出(1);
}
x = p-& gt;数据;
p->;next = top
top = p;
返回顶部;
}
//堆叠操作
堆栈*弹出(堆栈*顶部)
{
if(top==NULL)
{
printf("stack为null \ n ");
返回顶部;
}
stack * q;
q = top
top = top-& gt;接下来;
免费(q);//释放节点
返回顶部;
}
//读取堆栈的顶部元素
char get(stack *top)
{
If(top==NULL)//如果堆栈为空
{
printf("stack为null \ n ");
退出(1);
}
返回顶部-& gt;数据;
}
Stack * getdel (stack * top,char * x)//读取栈顶元素并删除。
{
* x = get(top);
top=pop(顶);
返回顶部;
}
Void change(char *a,char *b)//将中缀表达式转换为后缀表达式。
{
int i=0,j = 0;
char ch
stack * top = NULL
while(a[i]!='\0')
{
If(is digit(a[I])//如果读到数字,
{
做
{
b[j]= a[I];//直接转换成b
j++;i++;
}while(a[i]!='.');
b[j]= ' . ';
}
If(a[i]=='(')//如果你读'('
top=push(top,a[I]);//直接压入堆栈
If(a[i]==')')//如果你读')'
{
ch = get(top);//读取堆栈的顶部元素
而(ch!='(')
{
b[j]= ch;//进给b
j++;
top = pop(ch);
ch = get(top);
}
}
if(s[i]=='+'||s[i]=='-')
{
如果(顶!=空)
{
ch=get(top)
而(ch!='(')
{
b[j]= ch;
top=pop(顶);
if(top==NULL)
打破;
其他
ch = get(top);
}
}
top=push(top,a[i])
}
if(a[i]=='*'||a[i]=='/')
{
如果(顶!=空)
{
ch=get(top)
while(ch=='*'||ch=='/')
{
b[j]= ch;
top=pop(顶);
if(top==NULL)
打破;
其他
ch = get(top);
}
}
top=push(top,a[i])
}
i++;
}
而(顶!=NULL)//如果堆栈不为空,则顺序弹出堆栈中的运算符并发送给b。
top=getdel(top,& ampb[j++]);
}
Int fun(char *s)//计算结果
{
stack * top = NULL
int i=0,k=0,r,n,m;
while(s[i]!='\0')
{
If(is digit(s[I])//如果是数字,
{
做
{
k = 10 * k+s[I]-48;//转换为数字
i++;
}while(s[i]!='.')
top=push(top,k);
k = 0;
}
//如果读操作符,栈上会依次弹出两个数N和M,然后以M操作符N的形式计算,最后把结果放到栈上。
if(s[i]=='+')
{
top=getdel(top,& ampn);
top=getdel(top,& ampm);
r = n+m;
top=push(top,r);
}
if(s[i]=='-')
{
top=getdel(top,& ampn);
top=getdel(top,& ampm);
r = n-m;
top=push(top,r);
}
if(s[i]=='* ')
{
top=getdel(top,& ampn);
top=getdel(top,& ampm);
r = n * m;
top=push(top,r);
}
if(s[i]=='/')
{
top=getdel(top,& ampn);
top=getdel(top,& ampm);
r = n/m;
top=push(top,r);
}
i++;
}
top=getdel(top,& ampr);//最终结果是栈顶元素。
return r;
}
Int check(char *a)//判断输入表达式是否正确。
{
int I = 0;
char ch
while((ch=a[i])!='\0')
{
If(isdigit(ch))//如果是数字
{
If(is digit(a[I+1])//如果还是数字。
{
i++;//然后读
持续;
}
if(a[i+1]!='.')
{
//如果数字不适合以“.”结尾,将输出一条错误消息。
printf("这是错误的表达式格式!!!\ n ");
返回1;
}
i++;
}
i++;
}
返回0;
}
作废卡()
{
srand(time(0));
int I;
for(I = 0;我& lt4;i++)
{
printf("%3d ",rand()% 13+1);
}
printf(" \ n ");
}
void main()
{
char a[100],b[100],ch;
while(1)
{
printf("四位数是:");
card();
做
{
printf("输入表达式:");
scanf("%s%c ",a,& ampch);
}while(检查(a));
变化(a,b);
printf("%s=%d\n ",a,fun(b));
if(fun(b)==24)printf("You right!\ n ");
else printf("你错了!\ n ");
printf(" y/n:");
ch = getchar();
if(ch = = ' N ' | | ch = = ' N ')break;
}
}
注意:表达式需要一个确认字符“.”在号码的末尾。