亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言如何實現貪吃蛇小游戲

發布時間:2021-05-29 17:02:03 來源:億速云 閱讀:161 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關C語言如何實現貪吃蛇小游戲的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

實現功能

蛇最開始三節,向右移動。用戶可以通過按上下左右來控制蛇的移動,食物隨機產生,蛇吃到食物后蛇的身體會變長。蛇撞墻或者撞到自己身體后,游戲結束。

C語言如何實現貪吃蛇小游戲

怎么實現

要實現一個貪吃蛇小游戲,首先要想清楚游戲里有什么,怎樣實現功能。

很明顯游戲中只有兩樣東西,蛇和食物。
所以要建立蛇和食物信息,然后將蛇和食物進行初始化,在將蛇和食物畫出來。

實現的功能有:

 1. 蛇的移動
 2. 按鍵控制蛇的移動
 3. 食物的產生
 4. 蛇吃食物后蛇身體變長
 5. 游戲的結束

用結構體建立蛇和食物的信息

struct COOR{//位置,x,y坐標
 int x;
 int y;
};

struct SNAKE{//蛇的基礎信息
 int size;//節數
 int speed;//運動速度
 char dir;//運動方向
 struct COOR xy[MAX];//位置
}snakes;

struct FOOD{//食物信息
 struct COOR fooddir;//食物位置
 int flag;//判斷食物是否被吃掉,1未被吃掉,0被吃掉
}food;

實現功能的函數:

蛇:

void snakeInit(){//初始化蛇的信息
void drawSnake(){//畫蛇
void moveSnake(){//蛇的移動
void coorSnake(){//按鍵控制蛇的運動方向

食物:

void initFood(){//初始化食物的信息
void drawFood(){//畫食物

其它:

int gameOver(){//游戲結束情況
void gameInit(){//初始化窗口范圍

代碼

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<graphics.h>
#include<conio.h>
#include<Windows.h>

#define MAX 200
HWND hwnd = NULL;

enum DIR{//枚舉移動方向
 UP,
 DOWN,
 LEFT,
 RIGHT,
};

struct COOR{//位置,x,y坐標
 int x;
 int y;
};

struct SNAKE{//蛇的基礎信息
 int size;//節數
 int speed;//運動速度
 char dir;//運動方向
 struct COOR xy[MAX];//位置
}snakes;

struct FOOD{//食物信息
 struct COOR fooddir;//食物位置
 int flag;//判斷食物是否被吃掉,1未被吃掉,0被吃掉
}food;

void snakeInit(){//初始化蛇的信息
 snakes.size = 3;//開始節數
 snakes.dir = RIGHT;//開始運動方向
 snakes.speed = 10;
 int i = 0;
 for (; i < snakes.size; i++){//每一節書的位置,注意將第一節作為頭
  snakes.xy[i].x = 40 - 10 * i;
  snakes.xy[i].y = 10;
 }

}

void drawSnake(){//畫蛇
 int i = 0;
 for (; i < snakes.size; i++){
 setlinecolor(BLACK);//畫線的顏色
 setfillcolor(RED);//填充色
 //fillrectangle(snakes.xy[i].x, snakes.xy[i].y, snakes.xy[i].x + 10, snakes.xy[i].y+10);//矩形
 fillcircle(snakes.xy[i].x, snakes.xy[i].y, 5);//圓形
 }


}

void moveSnake(){//蛇的移動
 //snakes.xy[0].x++;

 int i = 0;
 for (i = snakes.size-1; i >0; i--){//蛇身跟著舌頭運動
  snakes.xy[i].x = snakes.xy[i-1].x;
  snakes.xy[i].y = snakes.xy[i-1].y;
 }
 switch (snakes.dir){
 case UP:
  snakes.xy[0].y-=snakes.speed;
  break;
 case DOWN:
   snakes.xy[0].y+=snakes.speed;
  break;
 case LEFT:
   snakes.xy[0].x-=snakes.speed;
  break;
 case RIGHT:
   snakes.xy[0].x+=snakes.speed;
  break;
 default:
  break;
 }


}

void coorSnake(){//按鍵控制蛇的運動方向
 if (_kbhit()){ //等待獲取按鍵
  char c = _getch();//獲得按鍵
  switch (c){
  case 72:
  case'w':
   if (snakes.dir != DOWN){
    snakes.dir = UP;
   }
   break;
  case 80:
  case's':
   if (snakes.dir != UP){
    snakes.dir = DOWN;
   }
   break;
  case 75:
  case'a':
   if (snakes.dir != RIGHT){
    snakes.dir = LEFT;
   }
   break;
  case 77:
  case'd':
   if (snakes.dir != LEFT){
    snakes.dir = RIGHT;
   }
   break;
  default:
   break;
  }
 }
}
void initFood(){//初始化食物的信息
 food.flag = 1;
 while (1){
START:
  food.fooddir.x = rand() % 63 * 10;//食物位置隨機
  food.fooddir.y = rand() % 47 * 10;
  for (int i = 0; i < snakes.size; i++){//防止食物生成在蛇身上。
   if (food.fooddir.x == snakes.xy[i].x&&food.fooddir.y == snakes.xy[i].y){
    goto START;
   }
   else{
    break;
   }
  }
  break;
 }
}

void drawFood(){//畫食物
 //food.fooddir.x = 100;
 //food.fooddir.y = 200;
 setlinecolor(BLACK);
 setfillcolor(RED);
 fillcircle(food.fooddir.x, food.fooddir.y, 5);

}
void eatFood(){//蛇吃食物
 if (snakes.xy[0].x - food.fooddir.x <= 5 && snakes.xy[0].y - food.fooddir.y <= 5 \
  && food.fooddir.x - snakes.xy[0].x <= 5 && food.fooddir.y - snakes.xy[0].y <= 5 && food.flag == 1){
  food.flag = 0;
  snakes.size++;
 }

}

int gameOver(){//游戲結束情況
 if (snakes.xy[0].x < 5 || snakes.xy[0].y <= 0 || snakes.xy[0].x > 635 || snakes.xy[0].y > 478){
  MessageBox(hwnd, "GAME OVER!","你撞墻了!", MB_OK);
  return 1;
 }
 for (int i = 1; i < snakes.size; i++){
  if (snakes.xy[0].x == snakes.xy[i].x&&snakes.xy[0].y == snakes.xy[i].y){
   MessageBox(hwnd, "GAME OVER!", "你撞了自己",MB_OK);
   return 1;
  }
 }
 return 0;
}


void gameInit(){
 hwnd=initgraph(640, 480);//設置窗口大小
 setbkcolor(GREEN);//設置窗口顏色
}


int main(){
 srand((unsigned long)time(NULL));//生成隨機數
 gameInit();
 cleardevice();//刷新窗口
 snakeInit();
 initFood();
 while (1){
  cleardevice();
  if (food.flag == 0){
   initFood();
  }
  drawFood();
  drawSnake();
  coorSnake();
  eatFood();
  moveSnake();
  //eatFood();
  if (gameOver()){
   break;
  }
  //stopGame();
  Sleep(100);
 }
 getchar();//防止閃屏
 closegraph();
 system("pause");
 return 0;
}

感謝各位的閱讀!關于“C語言如何實現貪吃蛇小游戲”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

土默特左旗| 肇东市| 弋阳县| 宁津县| 阿克陶县| 夏河县| 新密市| 连江县| 延吉市| 维西| 会同县| 正宁县| 抚州市| 木兰县| 鄢陵县| 越西县| 泸西县| 鄯善县| 开江县| 德钦县| 绩溪县| 甘德县| 穆棱市| 浮梁县| 古蔺县| 康保县| 通河县| 闵行区| 蓬莱市| 东海县| 海伦市| 九龙城区| 屏东县| 宽甸| 马山县| 龙门县| 塔河县| 华池县| 叶城县| 龙里县| 淄博市|