本篇內(nèi)容介紹了“C語(yǔ)言實(shí)現(xiàn)的貪吃蛇游戲代碼分享”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)企業(yè)建站,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),專注于網(wǎng)站建設(shè)技術(shù),精于網(wǎng)頁(yè)設(shè)計(jì),有多年建站和網(wǎng)站代運(yùn)營(yíng)經(jīng)驗(yàn),設(shè)計(jì)師為客戶打造網(wǎng)絡(luò)企業(yè)風(fēng)格,提供周到的建站售前咨詢和貼心的售后服務(wù)。對(duì)于網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)中不同領(lǐng)域進(jìn)行深入了解和探索,創(chuàng)新互聯(lián)在網(wǎng)站建設(shè)中充分了解客戶行業(yè)的需求,以靈動(dòng)的思維在網(wǎng)頁(yè)中充分展現(xiàn),通過(guò)對(duì)客戶行業(yè)精準(zhǔn)市場(chǎng)調(diào)研,為客戶提供的解決方案。
方案設(shè)計(jì)
首先初始化背景,使用全局二維數(shù)組map[][]表示實(shí)體內(nèi)容,設(shè)置邊界條件,即數(shù)組邊界設(shè)置為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; }
游戲啟動(dòng)時(shí)設(shè)置蛇在map數(shù)組中的位置,用全局一維數(shù)組snake保存蛇位置信息。
食物設(shè)置
在map數(shù)組內(nèi)找到一格空地放置食物。為了防止每次產(chǎn)生的隨機(jī)數(shù)相同,初始化時(shí)種子設(shè)置為time,同時(shí)這里注意出現(xiàn)死循環(huán)。
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;}
蛇移動(dòng)方案
1、空地
移動(dòng)方向前方為空地,刪除蛇尾,空地置為蛇頭:
case SPACE: map[snake[SnakeSize -1].X][snake[SnakeSize - 1].Y] = SPACE; //原蛇尾位置置空 for (int i = SnakeSize - 1; i >0; i--) //蛇尾到蛇頭整體移動(dòng)一位 { snake[i] = snake[i - 1]; } map[snake[0].X][snake[0].Y] =SNAKE; //原蛇頭位置設(shè)置為蛇身 snake[0] = next; //下一個(gè)位置設(shè)置為蛇頭 map[snake[0].X][snake[0].Y] =HEAD; //更新map break;
2、食物
更新分?jǐn)?shù)及蛇尺寸信息,下一位置設(shè)置為蛇頭,同時(shí)新生成食物。
case FOOD: for (int i = SnakeSize; i > 0;i--) //蛇尾到蛇頭整體移動(dòng)一位 { snake[i] = snake[i - 1]; } map[snake[0].X][snake[0].Y] =SNAKE; //蛇頭置 蛇 snake[0] = next; //將下一個(gè)位置賦值給蛇頭 score++; //分?jǐn)?shù)加一 SnakeSize++; //蛇尺寸加一 map[snake[0].X][snake[0].Y] =HEAD; //更新map create_food(); break;
3、墻/蛇身/蛇頭
下一位置非SPACE時(shí)游戲結(jié)束。
方向控制
讀取鍵盤(pán)中斷,忽略大小寫(xiě),這里注意一點(diǎn)就是蛇往右運(yùn)動(dòng)的時(shí)候選擇往左是無(wú)效操作,即忽略反向運(yùn)動(dòng)的命令。
主流程用while(1)死循環(huán):
while (1)
{
t2 = GetTickCount();
DrawMap();
if (kbhit()) //獲取鍵盤(pán)敲擊事件
{
ChangeDir(); //根據(jù)輸入字符設(shè)置運(yùn)動(dòng)方向
creep(); //根據(jù)下一位置做出決策
t2 = GetTickCount();
t1 = t2;
}
if (t2 - t1 > time_interval) //這里是為了保證即使用戶不操作,time_interval超時(shí)后蛇同樣能前進(jìn)一個(gè)位置
{
creep();
t1 = t2;
}
}
“C語(yǔ)言實(shí)現(xiàn)的貪吃蛇游戲代碼分享”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
網(wǎng)站題目:C語(yǔ)言實(shí)現(xiàn)的貪吃蛇游戲代碼分享
文章源于:http://muchs.cn/article30/jiocso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)、微信小程序、ChatGPT、全網(wǎng)營(yíng)銷推廣、品牌網(wǎng)站制作、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)