跪求VC6.0下的c语言版贪吃蛇代码
# include & ltstdio.h & gt
# include & ltconio.h & gt
# include & ltstdlib.h & gt
# include & ltbios.h & gt
#define KEY_UP 0x48
#define KEY_LEFT 0x4B
#define KEY_RIGHT 0x4D
#define KEY_DOWN 0x50
#定义ESC 0x011b
const int gamespeed = 90000/*自己调整游戏速度*/
结构点
{
int x;
int y;
}
p[100];
结构点FD;
Void p_frame() /* boundary */
{
int I;
printf(" \ n \ t \ t ");
for(I = 0;我& lt41;i++)
printf(" = ");
printf(" \ n ");
for(I = 0;我& lt20;i++)
printf(" \ t \ t | \ t \ t \ t \ t | \ n ");
printf(" \ t \ t ");
for(I = 0;我& lt41;i++)
printf(" = ");
}
Void print(int n)/* output snake */
{
int I;
clr SCR();
p _ frame();
gotoxy(fd.x,FD . y);
printf(“@”);
for(I = 0;我& lt= n;i++)
{
gotoxy(p[i]。x,p[i]。y);
printf(" * ");
}
}
Int gameover(int n)/*你咬自己了吗*/
{
int I;
for(I = 0;我& ltn-1;i++)
如果(p[i]。x==p[n]。x & amp& ampp[i]。y==p[n]。y)
返回1;
返回0;
}
Void slp() /*这是我自己的图*/
{
int a=40,b=20,I,t,x,y;
x = 16;
y = 2;
for(t = 0;t & lt50;t++)
{
if(t%4==0) {
for(I = 0;我& lta;i++){
gotoxy(x++,y);
printf(" * ");
}
a-;
}
其他
if(t%4==1){
for(I = 0;我& ltb;i++){
gotoxy(x,y++);
printf(" * ");
}
B-;
}
其他
if(t%4==2){
for(I = 0;我& lta;i++){
gotoxy(x -,y);
printf(" * ");
}
a-;
}
其他
if(t%4==3){
for(I = 0;我& ltb;i++){
gotoxy(x,y-);
printf(" * ");
}
B-;
}
延迟(gamespeed);
}
}
Void prover(int n)/*结尾输出*/
{
SLP();/*结尾*/
clr SCR();
p _ frame();
gotoxy(23,8);
printf("Game Over T_T .你已经得到了%d ",n+1);
gotoxy(23,9);
printf("继续?(y/n)");
}
Voidcalculate (int * px,int * py,int * pn)/*计算并更新每个节点的位*/
{
int i,n,tx,ty;
n = * pn
tx = * px
ty = * py
if(tx & lt;17)tx = 57;
else if(tx & gt;56)tx = 17;
if(ty & lt;= 1)ty = 22;
else if(ty & gt;22)ty = 2;
if(tx = = FD . x & amp;& ampty==fd.y)
{
n++;
p[n]。x = fd.x
p[n]。y = fd.y
printf(" \ a ");
FD . x = rand()% 39+18;
FD . y = rand()% 20+3;
}
其他
{
for(I = 0;我& ltn;i++)
{
p[i]。x=p[i+1]。x;
p[i]。y=p[i+1]。y;
}
p[n]。x = tx
p[n]。y = ty
}
* pn = n;
* px = tx
* py = ty
}
void main()
{
int n,tx,ty,f=1,flag,game/*当前蛇的长度,x,y记录改变后的蛇头*/
int *pn,*px,* py
char键;
pn = & ampn;
px = & amptx;
py = & ampty;
n = 1;/*蛇身0~n*/
FD . x = rand()% 20+17;/*初始形状太*/
FD . y = rand()% 17+3;
p[0]。x = 20
p[0]。y = 3;
tx=p[1]。x = 21;
ty=p[1]。y = 3;
flag = 0;/*记录无效的反向键*/
while(1)
{
而(!Khit ())/*没有键盘消息*/
{
开关(f)
{
案例1:
ty++;
打破;
案例二:
ty-;
打破;
案例三:
tx-;
打破;
案例4:
tx++;
打破;
}
计算(px,py,pn);
打印(n);
睡眠(1);
}/*有一条消息*/
flag = 0;
key = getch();/* key = BIOS key(0);接收按钮*/
开关(钥匙)
{
案例关键点_向下:
如果(f!=2){
f = 1;
ty++;
flag = 1;
}
打破;
案例索引_UP:
如果(f!=1){
f = 2;
ty-;
flag = 1;
}
打破;
案例关键字_左:
如果(f!=4){
f = 3;
tx-;
flag = 1;
}
打破;
案例关键字_右:
如果(f!=3){
f = 4;
tx++;
flag = 1;
}
打破;
}
if(key = = ' ')break;
If(flag) /*按钮有效*/
{
计算(px,py,pn);
打印(n);
延迟(gamespeed);
}
/*游戏*/
if(gameover(n))
{
证明人;
key = getch();
if(key=='n ')
打破;
Else /*再次播放*/
{
n = 1;
ty=p[1]。y;
tx=p[1]。x;
}
}
}
}
源文章地址:
/suli pol/blog/item/514443 b6b 39612f 830 add 16c . html