#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#include <time.h>
struct sb
{
int x,y;
struct sb *hou;
}*fuck,*tou,shi;
char o='d';
int qwe=6,sqwe=100;
void gotoxy(int x,int y)
{
COORD loc;
loc.X = y;
loc.Y = x;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), loc);
}//坐标定位函数
void bian()
{
int i;
for(i=0;i<=50;i++)
{
gotoxy(0,i);
putchar('M');
}
for(i=1;i<23;i++)
{
gotoxy(i,0);
putchar('I');
}
for(i=0;i<=50;i++)
{
gotoxy(23,i);
putchar('M');
}
for(i=1;i<23;i++)
{
gotoxy(i,50);
putchar('I');
}
gotoxy(8,57);
puts("按住不放可以加速");
gotoxy(12,57);
printf(" ");
gotoxy(12,57);
printf("距离胜利还差%d\n",50-qwe);
}
void jia(int q,int w)
{
sb *p;
p=(sb *)malloc(sizeof(sb));
p->x=q;
p->y=w;
p->hou=NULL;
fuck->hou=p;
fuck=p;
}//将q,w加入蛇中
void chushe()
{
sb *jb;
jb=tou;
gotoxy(tou->x,tou->y);
putchar( jb=jb->hou;
}
}//画蛇
void dongshe()
{
sb *jb;
jb=tou;
gotoxy(tou->x,tou->y);
putchar( }
void yidong(char s)
{
sb *jb;
jb=tou;
int q=tou->x;
int w=tou->y;
if(s=='a')
{
tou->y--;
}
else if(s=='w')
{
tou->x--;
}
else if(s=='s')
{
tou->x++;
}
else if(s=='d')
{
tou->y++;
}
while(jb->hou!=NULL)
{
int m=q,n=w;
q=jb->hou->x;
w=jb->hou->y;
jb->hou->x=m;
jb->hou->y=n;
jb=jb->hou;
}
}//根据方向移动
void qingchu()
{
sb *jb;
jb=tou;
gotoxy(tou->x,tou->y);
putchar(' ');
while(jb->hou!=NULL)
{
//gotoxy(jb->hou->x,jb->hou->y);
//putchar(' ');
jb=jb->hou;
}
gotoxy(jb->x,jb->y);
putchar(' ');
}//清除蛇
void shibai()
{
if(tou->x<=0||tou->x>=23||tou->y<=0||tou->y>=50)
{
Sleep(1000);
system("cls");
gotoxy(5,30);
puts("GAME OVER");
Sleep(1000);
exit(0);
}
//else if()
sb *jb;
jb=tou;
while(jb->hou!=NULL)
{
if(jb->hou->x!=tou->x||jb->hou->y!=tou->y)
jb=jb->hou;
else
{
Sleep(1000);
system("cls");
gotoxy(5,30);
puts("GAME OVER");
Sleep(1000);
exit(0);
}
}
}//判断失败
void zhongzi()
{
loop:
srand(time(NULL));
shi.x=rand()%21+1;
shi.y=rand()%48+1;
sb *jb;
jb=tou;
while(jb->hou!=NULL)
{
if(shi.x==jb->hou->x&&shi.y==jb->hou->y)
goto loop;
else
jb=jb->hou;
}
gotoxy(shi.x,shi.y);
putchar('&');
}//随机种子
void chizhong()
{
if(tou->x==shi.x&&tou->y==shi.y)
{
//srand(time(NULL));
int q=5;
int w=5;
jia(q,w);
//qingchu();
//yidong(o);
//chushe();
zhongzi();
qwe++;
//Sleep(200);
sqwe=100-2*qwe;
bian();
if(qwe==50)
{
system("cls");
gotoxy(5,30);
puts("恭喜你赢了");
Sleep(1000);
exit(0);
}
//Sleep(200);
}
}//吃
int main()
{
//system("color 02");
bian();
fuck=(sb *)malloc(sizeof(sb));
tou=fuck;
int q=3,w=10;//初始位置
tou->x=q;
tou->y=w;
int n=6;//初始长
while(n--)
jia(q,--w);
chushe();
n=1;
zhongzi();
int cao=0;
while(n)
{
while(!_kbhit())
{
qingchu();
yidong(o);
dongshe();//chushe();
shibai();
chizhong();
Sleep(sqwe);
if(_kbhit())
break;
Sleep(20);
if(_kbhit())
break;
Sleep(20);
if(_kbhit())
break;
Sleep(20);
if(_kbhit())
break;
Sleep(20);
if(_kbhit())
break;
Sleep(20);
if(_kbhit())
break;
Sleep(20);
}//自行控制检测键盘输入,和加速
char u=getch();
if(cao==1)
{
if(u==75)
if(o!='d')
o='a';
if(u==80)
if(o!='w')
o='s';
if(u==77)
if(o!='a')
o='d';
if(u==72)
if(o!='s')
o='w';//防误走
//system("cls");
// putchar(o);
cao=0;
}
if(u==-32)
{
cao=1;
//puts(">>>>>>>>>>>>");
}
if(u==32)
{
system("cls");
gotoxy(10,30);
system("pause");
system("cls");
bian();
gotoxy(shi.x,shi.y);
putchar('&');//暂停
chushe();
}
}
return 0;
}//用C++编译器写的,C语言编译器上运行不了,但写的时候还不会纯C++的风格,算是刚刚接触编程的一个小程序吧