代码如下
x #include<stdio.h>#include<Windows.h>#include<conio.h>#define MAP_WIDTH 60 //平均宽度#define MAP_HEIGHT 20 //平均高度struct snake{ //x坐标 int x; //y坐标 int y; //@或者* char ch;};//结构体数组:代表蛇struct snake g_snake[MAP_WIDTH*MAP_HEIGHT];//蛇实际的长度int g_snake_length = 5;void SetPos(int x, int y){ COORD point = { x , y }; //光标要设置的位置x,y HANDLE HOutput = GetStdHandle(STD_OUTPUT_HANDLE); //使用GetStdHandle(STD_OUTPUT_HANDLE)来获取标准输出的句柄 SetConsoleCursorPosition(HOutput, point); //设置光标位置}void DrawSnake(){ int i = 0; for (i = 0; i < g_snake_length; i++) { //设置坐标到(0,0)位置 SetPos(g_snake[i].x, g_snake[i].y); //绘制贪吃蛇**** printf("%c", g_snake[i].ch); }}void HideCorsor(){ HANDLE fd = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_CURSOR_INFO cinfo; cinfo.bVisible = 0; cinfo.dwSize = 1; if (SetConsoleCursorInfo(fd, &cinfo)) printf("执行成功\n"); else printf("执行失败\n"); }int main(){ //隐藏光标 HideCorsor(); int i, j; //[0,21) for (j = 0; j < MAP_HEIGHT + 1; j++) { if (j == MAP_HEIGHT) { //绘制一行 for (i = 0; i < MAP_WIDTH; i++) { printf("-"); } printf("\n"); } else { //绘制空行 for (i = 0; i < MAP_WIDTH; i++) { printf(" "); } printf("|"); printf("\n"); } } g_snake_length = 5; g_snake[0].x = 0; g_snake[0].y = 0; g_snake[0].ch = '*'; g_snake[1].x
[align=center][align=left][align=left][align=left][align=center][align=right][align=left]
[/align][/align][/align][/align][/align][/align][/align]= 1; g_snake[1].y = 0; g_snake[1].ch = '*'; g_snake[2].x = 2; g_snake[2].y = 0; g_snake[2].ch = '*'; g_snake[3].x = 3; g_snake[3].y = 0; g_snake[3].ch = '*'; g_snake[4].x = 4; g_snake[4].y = 0; g_snake[4].ch = '@'; //绘制贪吃蛇**** DrawSnake(); while (1) { int tail_x = g_snake[0].x; int tail_y = g_snake[0].y; //向右移动一格 //(0,0),(1,0),(2,0),(3,0),(4,0)@ // (1,0),(2,0),(3,0),(4,0),(5,0)@ //[0,5) for (i = 0; i < g_snake_length - 1; i++) { g_snake[i].x = g_snake[i + 1].x; g_snake[i].y = g_snake[i + 1].y; } int key = _getch(); switch (key) { case 'w'://上 printf("上"); g_snake[g_snake_length - 1].y -= 1; break; case 'a'://左 printf("左"); g_snake[g_snake_length - 1].x -= 1; break; case 's'://下 printf("下"); g_snake[g_snake_length - 1].y += 1; break; case 'd'://右 printf("右"); g_snake[g_snake_length - 1].x += 1; break; } //清除尾坐标 SetPos(tail_x, tail_y); putchar(' '); //绘制贪吃蛇**** DrawSnake(); } return 0;}