此次貪吃蛇小游戲的目的是使得我在Linux底下使用vi進行編寫的
心得:
1.自己對linux中如何使用vi更加熟悉
如::wq yy pp dd u 等等
2.對c語言的指針,結構體,鏈表等更加的牢固
3.借此小項目也運用到多線程作為進入linux的深入學習打下堅實的基礎
代碼展示
#include<curses.h>#include<stdlib.h>#defineUP1//1與-1的目的是使用abs()函數防止一上一下#defineDOWN-1#defineLEFT2#defineRIGHT-2structSnake{//創建一個結構體inthang;intlie;structSnake*next;};structSnake*head=NULL;//全局定義一個頭和尾structSnake*tail=NULL;intkey;//定義一個按鍵的整形變量intdir;//定義一個方向的整形變量structSnakefood;voidinitFood(){//定義一個食物##可以隨機生成intx=rand()%19;inty=rand()%19;food.hang=x;food.lie=y;}voidinitNcurse(){initscr();keypad(stdscr,1);noecho();}inthasSnakeNode(inti,intj){//顯示蛇身體structSnake*p;p=head;while(p!=NULL){if(p->hang==i&&p->lie==j){return1;}p=p->next;}return0;}inthasFood(inti,intj){//有食物if(food.hang==i&&food.lie==j){return1;}return0;}voidgamePic(){//游戲圖形化展示inthang;intlie;move(0,0);for(hang=0;hang<20;hang++){if(hang==0){for(lie=0;lie<20;lie++){printw("--");}printw("\n");}if(hang>=0&&hang<=19){for(lie=0;lie<=20;lie++){if(lie==0||lie==20){printw("|");}elseif(hasSnakeNode(hang,lie)){printw("[]");}elseif(hasFood(hang,lie)){printw("##");}else{printw("");}}printw("\n");}if(hang==19){for(lie=0;lie<20;lie++){printw("--");}printw("\n");printw("byricko");}}}voidaddNode(){//加頭并且方向structSnake*new=(structSnake*)malloc(sizeof(structSnake));new->next=NULL;switch(dir){caseUP:new->hang=tail->hang-1;new->lie=tail->lie;break;caseDOWN:new->hang=tail->hang+1;new->lie=tail->lie;break;caseLEFT:new->hang=tail->hang;new->lie=tail->lie-1;break;caseRIGHT:new->hang=tail->hang;new->lie=tail->lie+1;break;}tail->next=new;tail=new;}voidinitSnake(){//初始化蛇structSnake*p;dir=RIGHT;while(head!=NULL){p=head;head=head->next;free(p);}initFood();head=(structSnake*)malloc(sizeof(structSnake));head->hang=1;head->lie=1;head->next=NULL;tail=head;addNode();addNode();addNode();addNode();}voiddeleNode(){//刪除最后節點structSnake*p;p=head;head=head->next;free(p);}intifSnakeDie(){//在撞到邊界以及自己遲到自己的時候會輸出一個1讓自己復活structSnake*p;p=head;if(tail->hang<0||tail->lie==0||tail->hang==20||tail->lie==20){return1;}while(p->next!=NULL){if(p->hang==tail->hang&&p->lie==tail->lie){return1;}p=p->next;}return0;}voidmoveSnake(){//蛇的移動addNode();if(hasFood(tail->hang,tail->lie)){//如果吃到食物就不刪除最后的節點initFood();}else{deleNode();}if(ifSnakeDie()){initSnake();}}voidrefreshJieMian(){//刷新界面線程while(1){moveSnake();gamePic();refresh();usleep(150000);//刷新頻率}}voidturn(intdirection){//防止方向鍵按了上又按下if(abs(dir)!=abs(direction)){dir=direction;}}voidchangeDir(){//改變方向while(1){key=getch();switch(key){caseKEY_DOWN:turn(DOWN);break;caseKEY_UP:turn(UP);break;caseKEY_LEFT:turn(LEFT);break;caseKEY_RIGHT:turn(RIGHT);break;}}}intmain(){pthread_tt1;//定義線程1pthread_tt2;initNcurse();//初始化ncurseinitSnake();//初始化蛇gamePic();//初始化界面pthread_create(&t1,NULL,refreshJieMian,NULL);//啟動線程里面的函數pthread_create(&t2,NULL,changeDir,NULL);while(1);//線程3getch();endwin();return0;}
對代碼進行編譯
gccsnake.c-lcurses-lpthread
生成a.out運行文件
運行代碼
./a.out
圖片展示
“Linux下C語言如何實現貪吃蛇小游戲”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注本站網站,小編將為大家輸出更多高質量的實用文章!
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
ABS融資是什么意思?abs融資它是由各企業的貸款協議或者應收賬款作為擔?;A發行進行融資的一種方式,簡單來說就是把缺乏流動性、但具有可預期收入的資產,通過在資本市場上發行證券的方式出售以獲取資金,提高資產的流動性。abs融資是通過在國際市場發行債券籌集資金的,債券利率一般相對較低,降低了企業籌資成本。abs是直接融資還是間接融資?ABS是指將資產通過資本市場上發行證券的方式出售,以獲取融資,是一...
(相關資料圖)在我們的生活中,大改很多人都不知道人生4大喜事是什么意思,其實是非常簡單的,下面就是小編搜索到的人生4大喜事相關的一些知識,一起了解下吧!1、人生第一大喜便是“洞房花燭”夜。洞房者,新房之意,當然也有不少高人曲解了這個詞兒,這里權當是婚房吧。古人把結婚之喜稱作洞房花燭,新人行過傳統禮儀之后,會被送進充滿喜慶的婚房里,房間里點著兩支紅色的喜燭,彌漫著誘人的香氣,一對有情人終于走到了愛情...
去年ks里涌現出一個叫東方阿寶的土豪,瘋狂在各大網絡名人的直播間刷禮物,獲利700多萬。無論你進平臺上哪個網絡名人工作室,對方都要為了錢叫東方寶“寶哥”。據網友統計,東方阿寶在ks上累計送禮上億。粉漲之后,東方阿寶從神壇跌落,成為粉絲和網絡名人口中的“東方阿寶”。從外形上看,東方阿寶已經老到可以叫“爺爺”了。人崩潰的原因是東方Po太喜歡吹牛了。本來大家都知道他有錢是因為他花了很多錢買禮物,但是為了...