用C语言写一个简单的动画或者休闲游戏。

//贪吃蛇游戏,可以运行的,我测试过。

# include & ltstdio.h & gt

# include & ltdos.h & gt

# include & ltgraphics.h & gt

# include & ltstdlib.h & gt

#向上定义0x48

#向下定义0x50

#定义左0x4b

#定义右侧0x4d

#定义空间0x39

#define输入0x1c

#定义ESC 0x1

#定义SW 60

#定义SL 20

#定义Gsize 20

#定义S 0

#定义X 1

#定义Z 2

#定义Y 3

typedef结构序号{

int x;

int y;

int方向;

结构序号*下一个;

}蛇;

蛇*尾;

int rank = 0;

int carsted[21][16]= { 0 };

无符号大小,size 1;

void *buffer,* buffer 1;

void中断(* old time)();

void中断new time();

void install(void interrupt(* haddr)());

int timer = 0;

int getkey()

{

联合注册rg;

rg . h . ah = 0;

int86(0x16,& amprg & amp;rg);

返回rg . h . ah;

}

SNAKE *initmainwindow()

{

int i,j,k;

SNAKE *p,* w;

for(I = 0;我& lt20;i++)

{

扒[0]= 1;

扒[15]= 1;

}

for(j = 0;j & lt16;j++)

{

扒[0][j]= 1;

扒[20][j]= 1;

}

矩形(SW+20,SL+20,SW+300,SL+400);

矩形(SW+19,SL+19,SW+299,SL+399);

矩形(SW+Gsize*6,SL+Gsize*6,SW+Gsize*6+20,SL+Gsize * 6+20);

bar(SW+Gsize*6+2,SL+Gsize*6+2,SW+Gsize*6+18,SL+Gsize * 6+18);

size=imagesize(SW+Gsize*6,SL+Gsize*6,SW+Gsize*6+20,SL+Gsize * 6+20);

buffer=malloc(大小);

getimage(SW+Gsize*6,SL+Gsize*6,SW+Gsize*6+20,SL+Gsize*6+20,buffer);

for(k = 1;k & lt3;k++)

{

putimage(SW+Gsize*6,SL+Gsize*(6+k),buffer,XOR _ PUT);

扒[6+k][6]= 1;

}

w = NULL

for(k = 2;k & gt=0;k -)

{

p=(蛇*)malloc(sizeof(蛇));

p->;x = 6;p->;y = 6+k;

p->;方向= S;

p->;next = w;

w = p;

}

矩形(SW+Gsize*2,SL+Gsize*4,SW+Gsize*2+15,SL+Gsize * 4+15);

矩形(SW+Gsize*2+2,SL+Gsize*4+2,SW+Gsize*2+13,SL+Gsize * 4+13);

扒[4][2]= 2;

size 1 = imagesize(SW+Gsize * 2,SL+Gsize*4,SW+Gsize*2+15,SL+Gsize * 4+15);

buffer 1 = malloc(size 1);

getimage(SW+Gsize*2,SL+Gsize*4,SW+Gsize*2+15,SL+Gsize*4+15,buffer 1);

返回w;

}

int main()

{

int driver=VGA,mode = VGAHI

char键;

tail = NULL

init graph(& amp;司机& amp模式,“”;

randomize();

tail = initmainwindow();

old time = get vect(0x 1c);

while(1)

{

key = getkey();

开关(钥匙)

{

案例向上:

尾巴-& gt;方向= S;打破;

案例向下:

尾巴-& gt;方向= X;打破;

案例左侧:

尾巴-& gt;方向= Z;打破;

案例权利:

尾巴-& gt;方向= Y;打破;

case ESC:close graph();退出(1);

案例空间:安装(old time);打破;

case ENTER:install(new time);打破;

}

}

}

void中断新时间()

{

int xx=1,YY = 1;

char s[4];

SNAKE *p,*pend,* pp

p=(蛇*)malloc(sizeof(蛇));

p->;next = NULL

if(timer++==3)

{

定时器= 0;

开关(尾部->;方向)

{

案例S: if(扒[tail-& gt;y-1][tail->;x]==1)退出(1);

p->;x = tail-& gt;x;p->;y = tail-& gt;y-1;p->;方向=尾部-& gt;方向;p->;next = NULL

打破;

案例X:如果(扒[tail-& gt;y+1][tail->;x]==1)退出(1);

p->;x = tail-& gt;x;p->;y = tail-& gt;y+1;p->;方向=尾部-& gt;方向;p->;next = NULL

打破;

案例Z:如果(扒[tail-& gt;y][tail-& gt;x-1]==1)退出(1);

p->;x = tail-& gt;x-1;p->;y = tail-& gt;y;p->;方向=尾部-& gt;方向;p->;next = NULL

打破;

案例Y:如果(扒[tail-& gt;y][tail-& gt;x+1]==1)退出(1);

p->;x = tail-& gt;x+1;p->;y = tail-& gt;y;p->;方向=尾部-& gt;方向;p->;next = NULL

打破;

}

如果(扒[p-& gt;y][p->;x]==2)

{

putimage(SW+Gsize *(p-& gt;x),SL+Gsize *(p-& gt;y),buffer1,XOR _ PUT);

putimage(SW+Gsize *(p-& gt;x),SL+Gsize *(p-& gt;y)、buffer、XOR _ PUT);

烤的[p->;y][p->;x]= 1;

p->;next =尾巴;

尾巴= p;

rank++;

吧(375,390,400,420);

sprintf(s,“%d”,rank);

setcolor(绿色);

outtextxy(380,400,s);

做{

xx = random(14)+1;YY = random(19)+1;

}while((扒[YY][xx]= = 1)| |扒[YY][xx]= = 2);

扒[YY][xx]= 2;

putimage(SW+Gsize*xx,SL+Gsize*yy,buffer1,XOR _ PUT);

}

其他

{

putimage(SW+Gsize *(p-& gt;x),SL+Gsize *(p-& gt;y)、buffer、XOR _ PUT);

烤的[p->;y][p->;x]= 1;

p->;next =尾巴;

尾巴= p;

pend = tail

while(pend-& gt;接下来){ pp = pendpend = pend-& gt;接下来;}

putimage(SW+Gsize *(pend-& gt;x),SL+Gsize *(pend-& gt;y)、buffer、XOR _ PUT);

烤的[pend-& gt;y][pend-& gt;x]= 0;

PP-& gt;next = NULL

}

}

}

void install(void interrupt(* hadder)())

{

disable();

setvect(0x1c,hadder);

enable();

}