温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C语言如何实现贪吃蛇小游戏

发布时间:2021-05-29 17:02:03 来源:亿速云 阅读:202 作者:小新 栏目:开发技术

这篇文章给大家分享的是有关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