c語言代碼實現(xiàn)貪吃蛇動畫的方法:首先確定基本思路,蛇每吃一個食物蛇身子就增加一格;然后用UP,DOWN,LEFT,RIGHT控制蛇頭的運動,而蛇身子跟著蛇頭走;最后每后一格蛇身子下一步走到上一格蛇身子的位置。
創(chuàng)新互聯(lián)公司專注于振安網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供振安營銷型網(wǎng)站建設(shè),振安網(wǎng)站制作、振安網(wǎng)頁設(shè)計、振安網(wǎng)站官網(wǎng)定制、微信小程序開發(fā)服務(wù),打造振安網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供振安網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
基本思路:
蛇每吃一個食物蛇身子就增加一格,用UP, DOWN, LEFT, RIGHT控制蛇頭的運動,而蛇身子跟著蛇頭走,每后一格蛇身子下一步走到上一格蛇身子的位置,以此類推。
#include#include #include #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;//蛇尾 //畫游戲邊框的函數(shù) 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; } } //添加蛇身的函數(shù) void AddBody(COORD pos) { PSNAKE pnew = (PSNAKE)calloc(1, sizeof(SNAKE)); pnew->pos = pos; if(!head) { head = tail = pnew; } else { pnew->next = head;//新創(chuàng)建蛇身的next指向原先的蛇頭 head->prev = pnew;//原先的蛇頭的prev指向新創(chuàng)建的蛇身 head = pnew;//把新創(chuàng)建的蛇身作為新的蛇頭 } SetConsoleCursorPosition(hout, head->pos); printf("◎"); } //蛇身移動的函數(shù) 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;//保存當(dāng)前的蛇尾 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; }