摘要:c语言代码实现贪吃蛇动画的方法:首先确定基本思路,蛇每吃一个食物蛇身子就增加一格;然后用UP,DOWN,LEFT,RIGHT控制蛇头的运动,而蛇身子跟着蛇头走;最后每后一格蛇身子下一步走到上一
c语言代码实现贪吃蛇动画的方法:首先确定基本思路,蛇每吃一个食物蛇身子就增加一格;然后用UP,DOWN,LEFT,RIGHT控制蛇头的运动,而蛇身子跟着蛇头走;最后每后一格蛇身子下一步走到上一格蛇身子的位置。
基本思路:
蛇每吃一个食物蛇身子就增加一格,用UP, DOWN, LEFT, RIGHT控制蛇头的运动,而蛇身子跟着蛇头走,每后一格蛇身子下一步走到上一格蛇身子的位置,以此类推。
#include <stdio.h> #include <conio.h> #include <windows.h> #define BEG_X 2 #define BEG_Y 1 #define WID 20 #define HEI 20 HANDLE hout; typedef enum {UP, DOWN, LEFT, RIGHT} DIR; typedef struct Snake_body { COORD pos;//蛇身的位置 struct Snake_body *next;//下一个蛇身 struct Snake_body *prev;//前一个蛇身 }SNAKE, *PSNAKE; PSNAKE head = NULL;//蛇头 PSNAKE tail = NULL;//蛇尾 //画游戏边框的函数 void DrawBorder() { int i, j; COORD pos = {BEG_X, BEG_Y}; for(i = 0; i < HEI; ++i) { SetConsoleCursorPosition(hout, pos); for(j = 0; j < WID; ++j) { if(i == 0)//第一行 { if(j == 0) printf("┏"); else if(j == WID - 1) printf("┓"); else printf("━"); } else if(i == HEI - 1)//最后一行 { if(j == 0) printf("┗"); else if(j == WID - 1) printf("┛"); else printf("━"); } else if(j == 0 || j == WID - 1)//第一列或最后一列 printf("┃"); else printf(" "); } ++pos.Y; } } //添加蛇身的函数 void AddBody(COORD pos) { PSNAKE pnew = (PSNAKE)calloc(1, sizeof(SNAKE)); pnew->pos = pos; if(!head) { head = tail = pnew; } else { pnew->next = head;//新创建蛇身的next指向原先的蛇头 head->prev = pnew;//原先的蛇头的prev指向新创建的蛇身 head = pnew;//把新创建的蛇身作为新的蛇头 } SetConsoleCursorPosition(hout, head->pos); printf("◎"); } //蛇身移动的函数 void MoveBody(DIR dir) { PSNAKE ptmp; COORD pos = head->pos; switch(dir) { case UP: if(head->pos.Y > BEG_Y + 1) --pos.Y; else return; break; case DOWN: if(head->pos.Y < BEG_Y + HEI - 2) ++pos.Y; else return; break; case LEFT: if(head->pos.X > BEG_X + 2) pos.X -= 2; else return; break; case RIGHT: if(head->pos.X < BEG_X + (WID - 2) * 2) pos.X += 2; else return; break; } AddBody(pos);//添加了一个新的蛇头 ptmp = tail;//保存当前的蛇尾 tail = tail->prev; if(tail) tail->next = NULL; SetConsoleCursorPosition(hout, ptmp->pos); printf(" "); free(ptmp); } int main() { int ctrl; DIR dir = RIGHT;//初始蛇的方向是向右的 COORD pos = {BEG_X + 2, BEG_Y + HEI / 2}; system("color 0E"); system("mode con cols=90 lines=30"); hout = GetStdHandle(STD_OUTPUT_HANDLE); printf(" ------------贪吃蛇的移动------------"); DrawBorder(); //自定义几个蛇的身体 AddBody(pos); pos.X += 2; AddBody(pos); pos.X += 2; AddBody(pos); pos.X += 2; AddBody(pos); pos.X += 2; AddBody(pos); pos.X += 2; AddBody(pos); pos.X += 2; AddBody(pos); //控制蛇的移动 while(ctrl = getch()) { switch(ctrl) { case 'w': if(dir == DOWN) continue; dir = UP; break; case 's': if(dir == UP) continue; dir = DOWN; break; case 'a': if(dir == RIGHT) continue; dir = LEFT; break; case 'd': if(dir == LEFT) continue; dir = RIGHT; break; case 'q': return 0; } MoveBody(dir); } return 0; }
相关文章推荐
网站谷歌评分90+意味着什么?2022-09-06
怎样将不安全网站变成安全网站访问?2022-09-26
网站排名下降,可能跟算法更新没关系2022-09-20
网站如何设置高质量的网页标题?2022-09-14
做外贸网站选哪些语言?法语、德语最吃香2022-09-13