久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2764|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

新人報道,第一帖就發(fā)個C語言程序吧,用C語言做的貪吃蛇

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:536890 發(fā)表于 2019-6-25 14:14 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
感興趣的可以下載共同學(xué)習(xí)學(xué)習(xí)


單片機(jī)源程序如下:
  1. #include<stdio.h>
  2. #include<windows.h>
  3. #include<dos.h>
  4. #include<time.h>
  5. #include<stdlib.h>
  6. #include <conio.h>
  7. #define WIDTH 20
  8. #define HEIGTH 20
  9. #define SX 20//初始x坐標(biāo)
  10. #define SY 10//初始y坐標(biāo)
  11. #define LENGTH 1
  12. #define LEFT 75
  13. #define RIGHT 77
  14. #define UP 72
  15. #define BUTTOM 80
  16. #define DIC UP//初始方向;
  17. #define STEP 1
  18. #define SL 1//每增加多少積分提升難度
  19. #define RED FOREGROUND_RED
  20. #define BLUE FOREGROUND_BLUE
  21. #define GREEN FOREGROUND_GREEN
  22. #define COLOR RED //蛇顏色 可通過RGB相加得出
  23. #define BGCOLOR RED+BLUE+GREEN//背景顏色 可通過RGB相加得出
  24. struct snake
  25. {
  26.         int x;
  27.         int y;
  28. };
  29. struct node
  30. {
  31.         snake point;
  32.         node *next;
  33.        
  34. };
  35. char control;
  36. int total=0,nd;
  37. snake food;

  38. void HideCursor()
  39. {
  40. CONSOLE_CURSOR_INFO cursor_info = {1, 0};
  41. SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
  42. }
  43. void movexy(int x, int y)
  44. {
  45. COORD coord;   
  46. HANDLE hscr;   
  47. coord.X = x;   
  48. coord.Y = y;
  49. hscr = GetStdHandle(STD_OUTPUT_HANDLE);
  50. SetConsoleCursorPosition(hscr, coord);  
  51. }
  52. void bgcolr()
  53. {
  54.         HANDLE hscr = GetStdHandle(STD_OUTPUT_HANDLE);
  55.         SetConsoleTextAttribute(hscr,BGCOLOR);
  56. }
  57. void showsnake(int x,int y)
  58. {
  59.         HANDLE hscr = GetStdHandle(STD_OUTPUT_HANDLE);
  60.         SetConsoleTextAttribute(hscr,FOREGROUND_INTENSITY|COLOR);
  61.         movexy(x,y);
  62.         printf("%s","■") ;
  63.         bgcolr();
  64. }

  65. void dig(node *v,node *n)//蛇向前走
  66. {
  67.         if(n->next!=NULL)
  68.                 dig(n,n->next);
  69.         n->point=v->point;
  70. }
  71. void update(node *head )//更新蛇位置
  72. {
  73.         int step=STEP;
  74.         node *ol=head;
  75.         snake v=head->point;
  76.         if(control!=LEFT&&control!=RIGHT&&control!=BUTTOM&&control!=UP)return;
  77.         while(ol->next!=NULL)
  78.         {
  79.                 ol=ol->next;
  80.         }
  81.                 movexy(ol->point.x,ol->point.y);
  82.                 printf("%s","□");
  83.         dig(head,head->next);
  84.                
  85.        
  86.                
  87.                 switch(control)
  88.                         {
  89.                                 case LEFT:step=-1*step;
  90.                                 case RIGHT:v.x=v.x+2*step;v.y=v.y;head->point=v;break;
  91.                                 case UP:step=-1*step;
  92.                                 case BUTTOM:v.y=v.y+step;v.x=v.x;head->point=v;break;
  93.                         }
  94.                
  95.        

  96. }
  97. node* newlist()//用鏈表存蛇并顯示出來
  98. {
  99.         node *head=(node*)malloc(sizeof(node)),*ol;
  100.         int step=STEP;
  101.         ol=head;
  102.         ol->next=NULL;
  103.         snake v={SX+12,SY+6};
  104.         ol->point=v;
  105.         for(int i=0;i<LENGTH;i++)
  106.                 {
  107.                         node *t=(node*)malloc(sizeof(node));
  108.                         ol->next=t;
  109.                         t->next=NULL;
  110.                         v=ol->point;
  111.                         switch(DIC)
  112.                         {
  113.                                 case LEFT:step=-1*STEP;
  114.                                 case RIGHT:v.x=v.x+2*step;v.y=v.y;break;
  115.                                 case UP:step=-1*STEP;
  116.                                 case BUTTOM:v.y=v.y+step;v.x=v.x;break;
  117.                         }
  118.                         t->point=v;
  119.                         showsnake(v.x,v.y);
  120.                         ol=t;
  121.                 }
  122.                 return head;
  123. }
  124. void add(node *t)//增加蛇身體
  125. {
  126.         node *ol=(node*)malloc(sizeof(node));
  127.         ol->next=NULL;
  128.         while(t->next!=NULL)
  129.         {
  130.                 t=t->next;
  131.         }
  132.         ol->point=t->point;
  133.         t->next=ol;
  134. }
  135. void show(node *node)//顯示鏈表是否正常;
  136. {
  137.         while(node!=NULL)
  138.         {
  139.                 printf("%d,%d\n",node->point.x,node->point.y);
  140.                 node=node->next;
  141.         }
  142. }
  143. void init()//初始化背景,并去掉無關(guān)信息
  144. {
  145.         bgcolr();
  146.         srand(time(0));
  147.         movexy(SX+WIDTH-WIDTH/2,SY+HEIGTH+5);
  148.         printf("                                             ");
  149.         HideCursor();
  150.         for(int i=0;i<WIDTH;i++)
  151.         {       
  152.                 movexy(SX,SY+i);
  153.                 for(int j=0;j<HEIGTH;j++)
  154.                         {
  155.                                 printf("%s","□");
  156.                         }
  157.         }
  158. }
  159. void run(node *node)//顯示蛇頭
  160. {
  161.         //snake v=node->point;
  162.         showsnake(node->point.x,node->point.y);
  163.        
  164.         char *s[]={"簡單","困難","噩夢"};
  165.         movexy(SX+2*WIDTH+2,SY+HEIGTH-HEIGTH/2);
  166.         printf("難度:%s    ",s[nd]);
  167.         movexy(SX+2*WIDTH+2,SY+HEIGTH-HEIGTH/2+2);
  168.         if(total%5==9)add(node);
  169.         printf("積分:%d    ",total);
  170. }
  171. void over()
  172. {
  173.         movexy(SX+2*WIDTH-20,SY+HEIGTH+5);
  174.         printf("游戲結(jié)束按esc退出或方向鍵重新游戲");
  175. }
  176. int eatf(node *node)//判斷蛇吃食物
  177. {
  178.         if(node->point.x==food.x&&node->point.y==food.y)return 1;
  179.         return 0;
  180. }
  181. int cf(node *node)//食物合法性檢查
  182. {
  183.         while(node!=NULL)
  184.         {
  185.                 if(node->point.x!=food.x&&node->point.y!=food.y&&food.x%2==0)return 1;
  186.                 node=node->next;
  187.         }
  188.         return 0;
  189. }

  190. void addfood(node *head)//添加食物并顯示
  191. {
  192.        
  193.         int x,y;
  194.         while(1)
  195.         {
  196.                 x=rand()%(2*WIDTH)+SX;
  197.                 y=rand()%(HEIGTH)+SY;
  198.                 food.x=x;
  199.                 food.y=y;
  200.                 if(cf(head))break;
  201.                  
  202.         }
  203.        
  204.         movexy(x,y);
  205.         printf("%s","★");
  206. }
  207. int main(void)
  208. {   
  209.         movexy(SX+WIDTH,SY-4);
  210.         printf("貪吃蛇");
  211.         movexy(SX+WIDTH-WIDTH/2,SY-3);
  212.         printf("可隨時按ESC終止游戲");
  213.         movexy(SX+WIDTH-WIDTH/2,SY-2);
  214.         printf("請按方向鍵開始游戲");
  215.         int sd[]={500,250,100};
  216.         while(1)
  217.         {
  218.                 nd=0;
  219.                 init();
  220.                 node *head=newlist();
  221.                 control=0;
  222.                 total=0;
  223.                 addfood(head);
  224.                 //show(head);
  225.                 while(1)
  226.                 {
  227.                         while(kbhit())
  228.                         {
  229.                                 movexy(SX+WIDTH-WIDTH/2,SY-2);
  230.                                
  231.                                 char c;
  232.                                 if((c=getch())==LEFT||c==RIGHT||c==UP||c==BUTTOM||c==27)
  233.                                 {       
  234.                                         printf("                    ");
  235.                                         if(c==LEFT&&control==RIGHT||control==LEFT&&c==RIGHT)continue;
  236.                                         if(c==UP&&control==BUTTOM||control==UP&&c==BUTTOM)continue;
  237.                                         control=c;
  238.                                 }
  239.                         }
  240.                         if(control==27)break;
  241.                         update(head);
  242.                         if(head->point.x<SX||head->point.y<SY||head->point.x>=SX+2*WIDTH||head->point.y>=SY+HEIGTH)break;
  243.                         if(eatf(head))
  244.                         {
  245.                                 addfood(head);
  246.                                 total++;//積分增加
  247.                                 add(head);
  248.                                 if(nd<2&&total%SL==0)nd++;//難度增加
  249.                         }
  250.                         run(head);
  251.                         Sleep(sd[nd]);
  252.                 }
  253.                 over() ;
  254.                
  255.                 if(getch()==27)break;
  256.         }
  257.         return 0;
  258. }
復(fù)制代碼

所有資料51hei提供下載:
貪吃蛇.rar (1.12 MB, 下載次數(shù): 10)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 99精品欧美一区二区蜜桃免费 | 国产精品不卡一区 | 精品1区 | 国产成人jvid在线播放 | 精品日韩一区 | 成人毛片一区二区三区 | 亚洲一区 | 日韩 欧美 综合 | 91精品久久久 | 免费一区 | 性欧美hd| 久久爱黑人激情av摘花 | 亚洲精久| 亚洲成人精品 | 在线成人| 精品视频久久久 | 免费色网址 | 国产精品色| 日韩在线 | 亚洲精品短视频 | 91天堂网 | 农村真人裸体丰满少妇毛片 | 亚洲另类视频 | 国产黄色在线观看 | 91av在线影院 | 亚洲一区二区精品视频 | 91精品国产91久久久久福利 | 亚洲成人在线网 | 99精品一区二区 | 国产色视频网站 | 国产成人高清视频 | 欧美日韩看片 | 国产视频久久 | 九九久久国产精品 | 午夜爽爽爽男女免费观看 | 欧美爱爱视频 | 久久久久久中文字幕 | 欧美精品在欧美一区二区少妇 | 91精品国产综合久久久密闭 | 亚洲国产自产 | 激情福利视频 |