亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

C語言貪吃蛇經典小游戲

2020-01-26 13:46:53
字體:
來源:轉載
供稿:網友

一、貪吃蛇小游戲簡介:

用上下左右控制蛇的方向,尋找吃的東西,每吃一口就能得到一定的積分,而且蛇的身子會越吃越長,身子越長玩的難度就越大,不能碰墻,也不能咬到自己的身體,等到了一定的分數,就能過關。

二、函數框架

三、數據結構

typedef struct Snake {  size_t x; //行  size_t y; //列  struct Snake* next; }Snake, *pSnake; 

定義蛇的結構體,利用單鏈表來表示蛇,每個結點為蛇身體的一部分。

四、代碼實現(vs2010  c語言)

1.Snake.h

#ifndef __SNAKE_H__ #define __SNAKE_H__  #include <stdio.h> #include <stdlib.h> #include <Windows.h> #include <time.h> #include <malloc.h> #include <assert.h> //標識地圖大小 #define ROW_MAP 10 //地圖的行 #define COL_MAP 20 //地圖的列 #define SUCCESS_SCORE 10//通關分數 enum Direction //蛇行走的方向 {  R, //右  L, //左  U, //上  D //下 }Direction;  enum State {  ERROR_SELF, //咬到自己  ERROR_WALL, //撞到墻  NORMAL,  //正常狀態  SUCCESS  //通關 }State;  typedef struct Snake {  size_t x; //行  size_t y; //列  struct Snake* next; }Snake, *pSnake;   void StartGame(); void RunGame(); void EndGame();  #endif 

2.Snake.c

#include "Snake.h"  pSnake head = NULL; //定義蛇頭指針 pSnake Food = NULL; //定義食物指針  int sleeptime = 500;//間隔時間,用來控制速度 int Score = 0; //總分 int everyScore = 1; //每步得分  //定義游戲中用到的符號 const char food = '#'; const char snake = '*';  void Pos(int x, int y) //控制輸出光標 {  COORD pos; //pos為結構體  pos.X = x; //控制列  pos.Y = y; //控制行  SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);//讀取標準輸出句柄來控制光標為pos }  void Face() {  system("color 0C");  printf("*******************************************************/n");  printf("*    Welcome to Snake Game!    */n");  printf("*              */n");  printf("*    ->開始游戲請按 enter鍵     */n");  printf("*    ->退出游戲請按 esc鍵     */n");  printf("*    ->暫停游戲請按 space鍵     */n");  printf("*    ->通過上下左右鍵來控制蛇的移動   */n");  printf("*    ->通過F1鍵減速  F2鍵加速   */n");  printf("*******************************************************/n"); } void Map() //初始化地圖 {  int i = 0;  for(i = 0; i<COL_MAP; i+=2) //打印上下邊框(每個■占用兩列)  {   Pos(i, 0);   printf("■");   Pos(i, ROW_MAP-1);   printf("■");  }  for(i = 0; i<ROW_MAP; i++) //打印左右邊框  {   Pos(0, i);   printf("■");   Pos(COL_MAP-2, i);   printf("■");  } } void PrintSnake() //打印蛇 {  pSnake cur = head;  while(cur)  {   Pos(cur->y, cur->x);   printf("%c", snake);   cur = cur->next;  } } void InitSnake() //初始化蛇身 {  int initNum = 3;  int i = 0;  pSnake cur;  head = (pSnake)malloc(sizeof(Snake));  head->x = 5;  head->y = 10;  head->next = NULL;   cur = head;  for(i = 1; i < initNum; i++)  {   pSnake newNode = (pSnake)malloc(sizeof(Snake));   newNode->x = 5+i;   newNode->y = 10;   newNode->next = NULL;   cur->next = newNode;   cur = cur->next;  }   PrintSnake(); }  void CreateFood() //在地圖上隨機產生一個食物 {  pSnake cur = head;  Food = (pSnake)malloc(sizeof(Snake));   //產生x~y的隨機數 k=rand()%(Y-X+1)+X;  srand((unsigned)time(NULL));  Food->x = rand()%(ROW_MAP-2 - 1 + 1)+1;  Food->y = rand()%(COL_MAP-3 - 2 + 1)+2;  Food->next = NULL;  while(cur) //檢查食物是否與蛇身重合  {   if(cur->x == Food->x && cur->y == Food->y)   {    free(Food);    Food = NULL;    CreateFood();    return;   }   cur = cur->next;  }  Pos(Food->y, Food->x);  printf("%c", food); }  void StartGame() //游戲開始的所有設置 {  Face();  system("pause");   if(GetAsyncKeyState(VK_RETURN))  {   system("cls");   Pos(COL_MAP+5, 1);   printf("當前分數/通關分數:");   Pos(COL_MAP+20, 1);   printf("%d/%d", Score, SUCCESS_SCORE);   Pos(COL_MAP+5, 2);   printf("當前分每步得分:");   Pos(COL_MAP+20, 2);   printf("%d", everyScore);   Pos(COL_MAP+5, 3);   printf("/n");   Pos(COL_MAP+5, 4);   printf("速度越快 得分越高哦??!/n");    Map();   InitSnake();   CreateFood();  }  else if(GetAsyncKeyState(VK_ESCAPE))  {   exit(0);  } }  int IsCrossWall()    //判斷是否碰到墻 {  if(head->x <= 0 || head->x >= ROW_MAP-1   ||head->y <= 1 || head->y >= COL_MAP-2)  {   State = ERROR_WALL;   return 0;  }  return 1; }  int IsEatSelf(pSnake newHead) //判斷是否咬到自己 {  pSnake cur = head;  assert(newHead);  while(cur)  {   if(cur->x == newHead->x && cur->y == newHead->y)   {    State = ERROR_SELF;    return 0;   }   cur = cur->next;  }  return 1; }  int IsFood(pSnake pos) //判斷該位置是不是食物 {  assert(pos);  if(pos->x == Food->x && pos->y == Food->y)  {   return 1;  }  return 0; }  void SnakeMove() //蛇移動一次 {  pSnake newHead = NULL;  newHead = (pSnake)malloc(sizeof(Snake));   if(Direction == R)  {   newHead->x = head->x;   newHead->y = head->y+1;   newHead->next = head;  }  else if(Direction == L)  {   newHead->x = head->x;   newHead->y = head->y-1;   newHead->next = head;  }  else if(Direction == U)  {   newHead->x = head->x-1;   newHead->y = head->y;   newHead->next = head;    }  else if(Direction == D)  {   newHead->x = head->x+1;   newHead->y = head->y;   newHead->next = head;  }   if(IsFood(newHead))  {   head = newHead;   PrintSnake();   CreateFood();   Score += everyScore;   Pos(COL_MAP+20, 1);   printf("%d/%d", Score, SUCCESS_SCORE);   if(Score >= SUCCESS_SCORE)   {    State = SUCCESS;   }  }  else   {    if(IsCrossWall() && IsEatSelf(newHead))    {     pSnake cur = NULL;     head = newHead;     cur = head;     //刪除蛇尾并打印     while(cur->next->next != NULL)     {      Pos(cur->y, cur->x);      printf("%c", snake);      cur = cur->next;     }          Pos(cur->y, cur->x);     printf("%c", snake);     Pos(cur->next->y, cur->next->x);     printf(" "); //打印空格來覆蓋頻幕上的蛇尾     free(cur->next);     cur->next = NULL;    }    else    {     free(newHead);     newHead = NULL;    }  } }  void Pause() {  while(1)  {   Sleep(sleeptime);   if(GetAsyncKeyState(VK_SPACE))   {    break;   }  } }  void ControlSnake() //用鍵盤控制游戲 {  if(GetAsyncKeyState(VK_UP) && Direction!=D)  {   Direction = U;  }  else if(GetAsyncKeyState(VK_DOWN) && Direction!=U)  {   Direction = D;  }  else if(GetAsyncKeyState(VK_LEFT) && Direction!=R)  {   Direction = L;  }  else if(GetAsyncKeyState(VK_RIGHT) && Direction!=L)  {   Direction = R;  }  else if(GetAsyncKeyState(VK_F1))  {   if(sleeptime != 500)   {    sleeptime = 500;    everyScore = 1;    Pos(COL_MAP+20, 2);    printf("%d", everyScore);   }  }  else if(GetAsyncKeyState(VK_F2))  {   if(sleeptime != 300)   {    sleeptime = 300;    everyScore = 2;    Pos(COL_MAP+20, 2);    printf("%d", everyScore);   }  }  else if(GetAsyncKeyState(VK_SPACE))  {   Pause();  }  else if(GetAsyncKeyState(VK_ESCAPE))  {   exit(0);  } }  void StateGame() //判斷游戲失敗或成功 {  if(State == ERROR_SELF)  {   system("cls");   printf("很遺憾,蛇咬到自己,游戲失敗!/n");  }  else if(State == ERROR_WALL)  {   system("cls");   printf("很遺憾,蛇碰到墻壁,游戲失?。?n");  }  else if(State == SUCCESS)  {   system("cls");   printf("恭喜您,已通關!??!/n");  }   } void RunGame() {  Direction = R; //蛇初始行走方向為右  State = NORMAL;//游戲初始為正常狀態  while(1)  {   ControlSnake();   SnakeMove();   if(State != NORMAL)   {    StateGame();    break;   }   Sleep(sleeptime);  } }  void EndGame() //釋放鏈表并恢復默認值 {  pSnake cur = head;  while(cur)  {   pSnake del = cur;   cur = cur->next;   free(del);   del = NULL;  }  head = NULL;  if(Food != NULL)  {   free(Food);   Food = NULL;  }  Score = 0;  everyScore = 1;  sleeptime = 500; } 

3.Test.c

#include "Snake.h"  int main() {  while(1)  {   StartGame();   RunGame();   EndGame();  }  system("pause");  return 0; } 

五、運行界面展示

1.歡迎界面

 

2.游戲界面

小小的c語言項目,用來練手,僅供參考哦!!

謝謝閱讀,如有問題,歡迎提出。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区二中文字幕在线看| 国产精品高潮在线| 日韩av片电影专区| 日韩欧中文字幕| 中文字幕亚洲无线码在线一区| 亚洲成人av资源网| 亚洲一二在线观看| 九九热精品视频在线播放| 亚洲精品www久久久久久广东| 国产精品91视频| 日韩电影中文字幕在线| 国产精品成久久久久三级| 日韩电影免费观看在线观看| 日韩成人性视频| 日韩毛片在线看| 中文字幕日韩欧美精品在线观看| 久久高清视频免费| 亚洲精品大尺度| 国产中文字幕亚洲| 国产成一区二区| 亚洲无限乱码一二三四麻| 国产成人亚洲综合| 欧美成人午夜激情视频| 一本色道久久综合狠狠躁篇的优点| 成人久久一区二区三区| 亚洲国产中文字幕在线观看| 九九九久久国产免费| 日韩欧美在线第一页| 国产一区视频在线| 亚洲欧美激情在线视频| 国内精品中文字幕| 欧美激情一区二区三区久久久| 欧美成人精品一区二区| 九九久久久久99精品| www.日韩系列| 一区二区在线免费视频| 国产剧情久久久久久| 伊人av综合网| 日韩美女视频中文字幕| 欧美日韩一区二区在线| 97欧美精品一区二区三区| 欧美俄罗斯性视频| 欧美黄色片视频| 69av视频在线播放| 亚洲精品动漫久久久久| 欧美又大又粗又长| 日韩欧美在线观看视频| 亚洲qvod图片区电影| 欧美一区二区三区免费视| 欧美另类在线观看| 欧美综合在线第二页| 日韩免费在线电影| 欧美视频中文在线看| 黄色91在线观看| 亚洲欧美中文在线视频| 久久天天躁狠狠躁夜夜躁2014| 国产精品美女视频网站| 欧美午夜宅男影院在线观看| 国产精品无码专区在线观看| 欧美日韩免费区域视频在线观看| 亚洲精品videossex少妇| 亚洲一区久久久| 久久久av电影| 久久久久北条麻妃免费看| 日韩高清电影好看的电视剧电影| 欧洲成人午夜免费大片| 日本视频久久久| 久久大大胆人体| 精品女厕一区二区三区| 国产成人aa精品一区在线播放| 亚洲天堂av在线播放| 在线观看亚洲视频| 国产亚洲美女精品久久久| 2019中文在线观看| 亚洲a成v人在线观看| 日韩精品免费电影| 欧美www视频在线观看| 亚洲三级黄色在线观看| 色视频www在线播放国产成人| 国产精品久久久久久久一区探花| 欧美最猛性xxxxx亚洲精品| 国产日韩欧美在线视频观看| 日韩av在线影视| 亚洲国产欧美一区二区三区久久| 久久精品视频99| 91av在线播放| 欧美激情xxxxx| 亚洲精品大尺度| 国产精品无码专区在线观看| 一区二区三区四区精品| 色久欧美在线视频观看| 国产午夜精品全部视频在线播放| 成人欧美一区二区三区在线湿哒哒| 57pao成人永久免费视频| 国产精品视频地址| 成人妇女免费播放久久久| 成人国产精品色哟哟| 欧美富婆性猛交| 欧洲成人在线观看| 精品国产91乱高清在线观看| 97久久精品人搡人人玩| 色婷婷综合久久久久| 国产亚洲免费的视频看| 久久精品一区中文字幕| 久久999免费视频| 最新中文字幕亚洲| 青青久久aⅴ北条麻妃| 7777kkkk成人观看| 日韩av在线播放资源| 中文国产成人精品久久一| 久久久91精品国产| 在线观看免费高清视频97| 日韩av中文字幕在线| 亚洲第一国产精品| 九九久久精品一区| 欧美一区视频在线| 日韩精品在线免费观看| 国产日产欧美a一级在线| 久久免费视频网| 久久久久久久电影一区| 国产亚洲欧美日韩精品| 欧美日韩在线另类| 欧美夫妻性生活视频| 亚洲国产一区二区三区在线观看| 欧美视频专区一二在线观看| 久久99国产精品自在自在app| 欧美日韩一区二区三区在线免费观看| 欧美成人亚洲成人日韩成人| 亚洲最新av在线网站| 欧美一级大片在线观看| 隔壁老王国产在线精品| 国产中文字幕亚洲| 亚洲综合中文字幕68页| 国产九九精品视频| 欧美日韩精品在线视频| 欧美日韩精品在线| 久久久天堂国产精品女人| 在线看国产精品| 91精品国产综合久久久久久蜜臀| 国产精品xxx视频| 成人深夜直播免费观看| 欧美www视频在线观看| 精品美女久久久久久免费| 亚洲国产一区二区三区在线观看| 97碰在线观看| 国产精品看片资源| 成人精品一区二区三区| 欧美激情xxxx性bbbb| 最近中文字幕mv在线一区二区三区四区| 日韩在线www| 5278欧美一区二区三区| 国内精品一区二区三区四区| 日韩欧中文字幕| 国产精品流白浆视频| 中文字幕日韩在线播放| 日韩中文综合网| 日韩免费在线免费观看| 欧美多人爱爱视频网站| 国产欧美日韩中文| 国产小视频91| 欧美在线观看日本一区| 中文字幕在线成人| 国产日韩亚洲欧美| 午夜精品久久久久久久男人的天堂|