貪吃蛇(也叫做貪食蛇)游戲是一款休閑益智類游戲,有PC和手機等多平臺版本。既簡單又耐玩。該游戲通過控制蛇頭方向吃蛋,從而使得蛇變得越來越長。
我們的今天的目標(biāo)就是:用C語言來實現(xiàn)一個貪吃蛇項目,也不用太復(fù)雜,初學(xué)者能看懂就行!
貪吃蛇小程序,主要采用C語言描述,采用數(shù)組進行數(shù)據(jù)存儲的圖形化操作界面,會涉及一點點C++ 知識(特別少的一點點),但是有C語言基礎(chǔ)就夠用了,編譯器:VS2019,會涉及部分庫函數(shù)的安裝及使用,不過也很簡單啦!
效果展示:
看到了這個效果之后,那我們就動手來實現(xiàn)吧!
希望大家都能輕松實現(xiàn)這個項目!另外涉及到的#include
代碼如下:
?
#include#include #include #include #include #include "snake.h" int score = 0; int gamespeed = 100; //蛇運行速度 static void Init(void); /*圖形驅(qū)動*/ static void Close(void); /*圖形結(jié)束*/ static void Game_interface(void); /*游戲界面*/ static void GameOver(void); /*結(jié)束游戲*/ static void GamePlay(void); /*游戲過程*/ static void PrScore(void); /*輸出成績*/ /*主函數(shù)*/ int main(void) { Init(); Game_interface(); GamePlay(); Close(); return 0; } /*圖形驅(qū)動*/ static void Init(void) { int gd=9,gm=2; initgraph(&gd,&gm," "); cleardevice(); } /* 開始畫面,左上角坐標(biāo)為(50,40),右下角坐標(biāo)為(610,460)的圍墻 */ static void Game_interface(void) { int i; setcolor(LIGHTCYAN); /*setbkcolor(LIGHTGREEN);*/ setlinestyle(PS_SOLID,0,1); /*設(shè)置線型*/ for(i=50;i<=600;i+=10) /*畫邊框*/ { rectangle(i,40,i+10,49); /*上邊框*/ rectangle(i,451,i+10,460); /*下邊框*/ } for(i=40;i<=450;i+=10) { rectangle(50,i,59,i+10); /*左邊框*/ rectangle(601,i,610,i+10); /*右邊框*/ } } /* 游戲主函數(shù) */ static void GamePlay(void) { int i; srand(time(NULL)); /*隨機數(shù)發(fā)生器*/ food.yes = 1; /*1表示需要出現(xiàn)新食物,0表示已經(jīng)存在食物*/ snake.life = 0; /*活著*/ snake.direction = 1; /*方向往右*/ snake.x[0] = 100; snake.y[0] = 100; snake.x[1] = 110; snake.y[1] = 100; snake.node = 2; /*節(jié)數(shù)*/ PrScore(); /*輸出得分*/ while(1) /*可以重復(fù)玩游戲,壓ESC鍵結(jié)束*/ { while( !kbhit() ) /*在沒有按鍵的情況下,蛇自己移動*/ { if(food.yes == 1) /*需要出現(xiàn)新食物*/ { food.x = rand()%400 + 60; food.y = rand()%350 + 60; while(food.x%10 != 0) /*食物隨機出現(xiàn)后必須讓食物能夠在整格內(nèi),這樣才可以讓蛇吃到*/ food.x++; while(food.y%10 != 0) food.y++; food.yes = 0; /*畫面上有食物了*/ } if(food.yes == 0) /*畫面上有食物了就要顯示*/ { setcolor(GREEN); rectangle(food.x,food.y,food.x + 10,food.y - 10); } for(i=snake.node-1;i>0;i--) /*蛇的每個環(huán)節(jié)往前移動,也就是貪吃蛇的關(guān)鍵算法*/ { snake.x[i] = snake.x[i-1]; snake.y[i] = snake.y[i-1]; } /*1,2,3,4表示右,左,上,下四個方向,通過這個判斷來移動蛇頭*/ switch(snake.direction) { case 1: snake.x[0] += 10; break; case 2: snake.x[0] -= 10; break; case 3: snake.y[0] -= 10; break; case 4: snake.y[0] += 10; break; } /* 從蛇的第四節(jié)開始判斷是否撞到自己 */ for(i=3;i 595) || (snake.y[0] < 55) || (snake.y[0] > 455)) /*蛇是否撞到墻壁*/ { GameOver(); /*本次游戲結(jié)束*/ snake.life = 1; /*蛇死*/ } if(snake.life == 1) /*以上兩種判斷以后,如果蛇死就跳出內(nèi)循環(huán),重新開始*/ break; if((snake.x[0] == food.x) && (snake.y[0] == food.y)) /*吃到食物以后*/ { setcolor(BLACK); /*把畫面上的食物東西去掉*/ rectangle(food.x,food.y,food.x+10,food.y-10); snake.x[snake.node] = -20; snake.y[snake.node] = -20; /* 新的一節(jié)先放在看不見的位置,下次循環(huán)就取前一節(jié)的位置 */ snake.node++; /*蛇的身體長一節(jié)*/ food.yes = 1; /*畫面上需要出現(xiàn)新的食物*/ score += 10; PrScore(); /*輸出新得分*/ } setcolor(RED); /*畫出蛇*/ for(i=0;i ?
此外,我也給大家分享我收集的其他資源,從最零基礎(chǔ)開始的教程到C語言C++項目案例,幫助大家在學(xué)習(xí)C語言的道路上披荊斬棘!
審核編輯:湯梓紅
評論
查看更多