蛇这个很有意思。我把这个代码先重新排版一下,当然了,即使重新排版之后,这种代码风格也非常非常不可取。。。。其中的宏被我替换了,其中2个函数名字也被我改了。有时间我会继续分析,有事情要出去啦。
程序代码:
/*尚未分析完成。。。。等待。。。。*/
#include <stdio.h>
int k,f,g,q;
int p,m=0,n=1,d=0,e=0,a=2,b=5,c=5,t=1,M[22][76]={-1,4};
L()
{
return a%2?(f=0,g=a/2?-1:1):(g=0,f=a/2?1:-1),\
(!M[m+f][n+g]||M[m+f][n+g]==10||M[m+f][n+g]==-1);
}
K()
{
M[m+f][n+g]==-1 && PrintGameOver(),M[m+f][n+g]!=10?F(m,n):(t=0),\
M[m+f][n+g]=(a+2)%4+1;
}
D()
{
a-0\
||((m+f>=0&&L())?(K(),m=m+f):(a=rand()%2?3:1)),a-2\
||((m+f<22&&L())?(K(),m=m+f):(a=rand()%2?1:3)),a-1\
||((n+g<76&&L())?(K(),n=n+g):(a=rand()%2?0:2)),a-3\
||((n+g>=0&&L())?(K(),n=n+g):(a=rand()%2?2:0));
}
F(x,y)
{
M[x][y]%2?(p=0,q=M[x][y]/2?1:-1):(q=0,p=M[x][y]/3?-1:1),\
M[x+q][y+p]==-1?(M[x+q][y+p]=0,b=x+q,c=y+p,M[x][y]=-1):F(x+q,y+p);
}
/*找到一个空位置打印X表示食物*/
PrintFood()
{
int x,y;
x=rand()%22,\
y=rand()%76,\
M[x][y]==0?(M[x][y]=10,gotoxy(y+1,x+2),printf("X")):PrintFood();
}
PrintSnake()/* ??? */
{
gotoxy(c+1,b+2),printf(" "),\
gotoxy(n+1,m+2),printf("O"),\
gotoxy(e+1,d+2),printf("o");
}
PrintGameOver()
{
gotoxy(10,10),printf("The""g""ame is over!"),\
getch( ),\
exit();
}
main()
{
clrscr(); /*清屏,我加的*/
PrintFood();
while(1)
{
while(bioskey(1)==0)
d=m,e=n,\
D(),\
PrintSnake(),\
t==0&&(PrintFood(),t=1),\
delay(45000);/*我吧演示时间改长了*/
k=bioskey(0)>>8,\
k-75||\
(a=3),k-77||\
(a=1),k-72||\
(a=0),k-80||\
(a=2);
}
}
[[it] 本帖最后由 hoodlum1980 于 2008-3-22 20:45 编辑 [/it]]