急求一个至少1000行的C语言游戏源程序。最好能有个解释。

# include & ltstdio.h & gt

# 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;

}

}

注意:表达式需要一个确认字符“.”在号码的末尾。