您好,登錄后才能下訂單哦!
本篇內容介紹了“C語言實現的貪吃蛇游戲代碼分享”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
方案設計
首先初始化背景,使用全局二維數組map[][]表示實體內容,設置邊界條件,即數組邊界設置為WALL:
//初始化墻 for (int i = 0; i < ROW; i++) { map[i][0] = map[i][COL - 1] =WALL; } for (int j = 0; j < COL; j++) { map[0][j] = map[ROW - 1][j] =WALL; }
游戲啟動時設置蛇在map數組中的位置,用全局一維數組snake保存蛇位置信息。
食物設置
在map數組內找到一格空地放置食物。為了防止每次產生的隨機數相同,初始化時種子設置為time,同時這里注意出現死循環。
voidcreate_food(){ int row, col; int cnt = 100; do { cnt--; row = rand() % (ROW - 1) + 1; col = rand() % (COL - 1) + 1; } while (map[row][col] != SPACE&& cnt); map[row][col] = FOOD;}
蛇移動方案
1、空地
移動方向前方為空地,刪除蛇尾,空地置為蛇頭:
case SPACE: map[snake[SnakeSize -1].X][snake[SnakeSize - 1].Y] = SPACE; //原蛇尾位置置空 for (int i = SnakeSize - 1; i >0; i--) //蛇尾到蛇頭整體移動一位 { snake[i] = snake[i - 1]; } map[snake[0].X][snake[0].Y] =SNAKE; //原蛇頭位置設置為蛇身 snake[0] = next; //下一個位置設置為蛇頭 map[snake[0].X][snake[0].Y] =HEAD; //更新map break;
2、食物
更新分數及蛇尺寸信息,下一位置設置為蛇頭,同時新生成食物。
case FOOD: for (int i = SnakeSize; i > 0;i--) //蛇尾到蛇頭整體移動一位 { snake[i] = snake[i - 1]; } map[snake[0].X][snake[0].Y] =SNAKE; //蛇頭置 蛇 snake[0] = next; //將下一個位置賦值給蛇頭 score++; //分數加一 SnakeSize++; //蛇尺寸加一 map[snake[0].X][snake[0].Y] =HEAD; //更新map create_food(); break;
3、墻/蛇身/蛇頭
下一位置非SPACE時游戲結束。
方向控制
讀取鍵盤中斷,忽略大小寫,這里注意一點就是蛇往右運動的時候選擇往左是無效操作,即忽略反向運動的命令。
主流程用while(1)死循環:
while (1)
{
t2 = GetTickCount();
DrawMap();
if (kbhit()) //獲取鍵盤敲擊事件
{
ChangeDir(); //根據輸入字符設置運動方向
creep(); //根據下一位置做出決策
t2 = GetTickCount();
t1 = t2;
}
if (t2 - t1 > time_interval) //這里是為了保證即使用戶不操作,time_interval超時后蛇同樣能前進一個位置
{
creep();
t1 = t2;
}
}
“C語言實現的貪吃蛇游戲代碼分享”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。