用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();
}