資源描述:
《貪吃蛇游戲C語言源代碼學習》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在行業(yè)資料-天天文庫。
1、貪吃蛇游戲C語言源代碼學習閱讀學習了源代碼,并做了簡單的注釋和修改,里面只用了鏈表數(shù)據(jù)結構,非常適合C語言入門者學習閱讀。程序可在VS2013下編譯運行。1#include2#include3#include4#include56#defineU17#defineD28#defineL39#defineR4//蛇的狀態(tài),U:上;D:下;L:左R:右1011typedefstructSNAKE//蛇身的一個節(jié)點12{13intx;14inty;15structSNA
2、KE*next;16}snake;1718//全局變量//19intscore=0,add=10;//總得分與每次吃食物得分。20intstatus,sleeptime=200;//每次運行的時間間隔21snake*head,*food;//蛇頭指針,食物指針22snake*q;//遍歷蛇的時候用到的指針23intendGamestatus=0;//游戲結束的情況,1:撞到墻;2:咬到自己;3:主動退出游戲。2425//聲明全部函數(shù)//26voidPos();27voidcreatMap();28voidinitSnake();29int
3、biteSelf();30voidcreateFood();31voidcantCrossWall();32voidsnakeMove();33voidpause();34voidrunGame();35voidinitGame();36voidendGame();37voidgameStart();3839voidPos(intx,inty)//設置光標位置40{41COORDpos;42HANDLEhOutput;43pos.X=x;44pos.Y=y;45hOutput=GetStdHandle(STD_OUTPUT_HANDLE)
4、;//返回標準的輸入、輸出或錯誤的設備的句柄,也就是獲得輸入、輸出/錯誤的屏幕緩沖區(qū)的句柄46SetConsoleCursorPosition(hOutput,pos);47}4849voidcreatMap()//創(chuàng)建地圖50{51inti;52for(i=0;i<58;i+=2)//打印上下邊框53{54Pos(i,0);55printf("■");//一個方塊占兩個位置56Pos(i,26);57printf("■");58}59for(i=1;i<26;i++)//打印左右邊框60{61Pos(0,i);62printf("■")
5、;63Pos(56,i);64printf("■");65}66}6768voidinitSnake()//初始化蛇身69{70snake*tail;71inti;72tail=(snake*)malloc(sizeof(snake));//從蛇尾開始,頭插法,以x,y設定開始的位置//73tail->x=24;74tail->y=5;75tail->next=NULL;76for(i=1;i<=4;i++)//初始長度為477{78head=(snake*)malloc(sizeof(snake));79head->next=tail;
6、80head->x=24+2*i;81head->y=5;82tail=head;83}84while(tail!=NULL)//從頭到為,輸出蛇身85{86Pos(tail->x,tail->y);87printf("■");88tail=tail->next;89}90}91//??92intbiteSelf()//判斷是否咬到了自己93{94snake*self;95self=head->next;96while(self!=NULL)97{98if(self->x==head->x&&self->y==head->y)99{100
7、return1;101}102self=self->next;103}104return0;105}106107voidcreateFood()//隨機出現(xiàn)食物108{109snake*food_1;110srand((unsigned)time(NULL));//為了防止每次產(chǎn)生的隨機數(shù)相同,種子設置為time111food_1=(snake*)malloc(sizeof(snake));112while((food_1->x%2)!=0)//保證其為偶數(shù),使得食物能與蛇頭對其113{114food_1->x=rand()%52+2;1
8、15}116food_1->y=rand()%24+1;117q=head;118while(q->next==NULL)119{120if(q->x==food_1->x&&q->y==fo