標籤:函數 nbsp false 流程 turn bsp str ons 增加
蛇死亡判斷、吃食物、計分
一、蛇死亡判斷:裝邊界,撞自己死亡
定義:IsSnakeDie()//蛇死亡判斷 函數,傳回型別為bool型
思路:
//蛇頭的下一個,是方塊 就是死亡 if(0 == strncmp(&g_strgameback[g_arrSnake[0][0]][g_arrSnake[0][1] + g_arrSnake[0][2]], "■", 2)) { return false; }
二、隨機產生食物及吃食物變長
1、(1)為食物產生隨機的座標
//產生隨機座標srand((unsigned int)time(NULL));g_nRow = rand()%18 + 1;g_nCol = rand()%20 + 1;
(2)在產生的位置上畫上食物:
strncpy(&g_strgameback[g_nRow][g_nCol*2], "★", 2);
此時調用函數運行結果可以顯示食物,但是沒有判斷是否應該產生新食物,所以會一直隨機產生食物。
(3)判斷是否產生新食物
bool g_bIsProFood = true;//判斷是否產生新的食物if(false == g_bIsProFood){ return ;}
將隨機產生的食物座標以及遍曆蛇數組放進一個迴圈中,實現蛇沒吃掉食物前只有一個食物
2、蛇吃食物變長
當蛇頭座標與食物的座標相等時,蛇身變長。先定義一個蛇身長度:int g_nSnakelen = 2;
//蛇頭游標跟座標相等if(g_nRow == g_arrSnake[0][0] && g_nLie*2 == g_arrSnake[0][1]){ //蛇長大 if(to_east == g_arrSnake[g_nSnakelen][2]) { g_arrSnake[g_nSnakelen+1][0] = g_arrSnake[g_nSnakelen][0]; g_arrSnake[g_nSnakelen+1][1] = g_arrSnake[g_nSnakelen][0] - 2; g_arrSnake[g_nSnakelen+1][2] = g_arrSnake[g_nSnakelen][0]; } else if(to_west == g_arrSnake[g_nSnakelen][2]) { g_arrSnake[g_nSnakelen+1][0] = g_arrSnake[g_nSnakelen][0]; g_arrSnake[g_nSnakelen+1][1] = g_arrSnake[g_nSnakelen][0] + 2; g_arrSnake[g_nSnakelen+1][2] = g_arrSnake[g_nSnakelen][0]; } else if(to_north == g_arrSnake[g_nSnakelen][2]) { g_arrSnake[g_nSnakelen+1][0] = g_arrSnake[g_nSnakelen][0]; g_arrSnake[g_nSnakelen+1][1] = g_arrSnake[g_nSnakelen][0] + 1; g_arrSnake[g_nSnakelen+1][2] = g_arrSnake[g_nSnakelen][0]; } else if(to_south == g_arrSnake[g_nSnakelen][2]) { g_arrSnake[g_nSnakelen+1][0] = g_arrSnake[g_nSnakelen][0]; g_arrSnake[g_nSnakelen+1][1] = g_arrSnake[g_nSnakelen][0] - 1; g_arrSnake[g_nSnakelen+1][2] = g_arrSnake[g_nSnakelen][0]; } g_nSnakelen++; g_bIsProFood = true;}
當計分函數寫好後需要在蛇變長函數中調用,變長的同時分數也增加
三、計分
設定游標位置:SetConsoleCursorPosition();
COORD rd;rd.X = 55;rd.Y = 8;//設定游標位置SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),rd);printf("Score Is : ");rd.X = 56;rd.Y = 9; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),rd);printf("%d",g_nScore*10);
流程結束。
C語言控制台貪吃蛇4