蛇每吃一个食物蛇身子就增加一格,用WASD控制蛇头的运动,而蛇身子跟着蛇头走,每后一格蛇身子下一步走到上一格蛇身子的位置,以此类推。
程序主要变量如下:
#define M 20//整个图形界面的长和宽#define N 60struct snake a[(M -2)*(N -2)];//蛇身数组int snake_x =4;//蛇身的XY坐标int snake_y =4;int X =1;//控制蛇头的方向量int Y =0;int food_x , food_y ;//食物的XY坐标int score =0;//分数
食物的随机位置产生是通过两个随机数分别代表X,Y坐标实现的。
void food(int*x,int*y,int*fx,int*fy,int*s, struct snake*snake) {int ffx, ffy;//上一次食物的XY坐标 ffx =*fx; ffy =*fy;if (*x ==*fx &&*y ==*fy)//如果吃到了食物,产生下一个食物 {do {*fx =1 +rand() % (N -3);*fy =1 +rand() % (M -3); }while (ffx ==*fx && ffy ==*fy);//保证与上次食物位置不同for (int i= (*s); i >=0; i--) {if ((snake +*s)->snake_x ==*fx && (snake +*s)->snake_y ==*fy) {*fx =1 +rand() % (N -3);*fy =1 +rand() % (M -3); } }//大概率保证食物与蛇身子的位置不同(不能完全保证) (*s)++ ;//分数加一!!!!!!! } }
用WASD控制蛇头的运动是通过改变蛇头的X,Y坐标实现的。
void control(int*x,int*y,int*X,int*Y)//xy是蛇头的坐标,XY是控制运动方向的量 {if (_kbhit()) { switch (_getch()) { case'w' : case'W' :if(interf[*y -1][*x]!='@'){//if语句保证蛇不能倒着走*X =0;*Y = -1; }break; case'd': case'D':if(interf[*