实现功能

蛇最开始三节,向右移动。用户可以通过按上下左右来控制蛇的移动,食物随机产生,蛇吃到食物后蛇的身体会变长。蛇撞墙或者撞到自己身体后,游戏结束。

怎么实现

要实现一个贪吃蛇小游戏,首先要想清楚游戏里有什么,怎样实现功能。

很明显游戏中只有两样东西,蛇和食物。
所以要建立蛇和食物信息,然后将蛇和食物进行初始化,在将蛇和食物画出来。
实现的功能有: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语言编写贪吃蛇小游戏相关推荐

  1. 【笔记】用vs2017 c语言写 贪吃蛇 小游戏

    目录 文章目录 前言 一.贪吃蛇游戏 设计逻辑 二.详细介绍 1.设置界面(界面大小,背景颜色) 2.设置贪吃蛇的身体并显示 3.使之能够移动并能够穿墙 4.添加食物并让蛇吃掉 5.设置背景音乐 完整 ...

  2. python 贪吃蛇小游戏代码_10分钟再用Python编写贪吃蛇小游戏

    Python编写贪吃蛇 前不久我们公众号发布了一篇C++编写贪吃蛇小游戏的推文,反响空前.看来大家对这类简单易上手小游戏还是很喜爱的. 恰逢2018年IEEE Spectrum编程语言排行榜新鲜出炉, ...

  3. 10分钟用python编写贪吃蛇小游戏_牛得一批!10分钟用Python编写一个贪吃蛇小游戏...

    贪吃蛇,大家应该都玩过.当初第一次接触贪吃蛇的时候 ,还是能砸核桃的诺基亚上,当时玩的不亦乐乎.今天,我们用Python编程一个贪吃蛇游戏,下面我们先看看效果: 好了,先介绍一个思路 所有的游戏最主要 ...

  4. 安卓c语言自动补全软件吾爱,C语言实现贪吃蛇小游戏

    本文实例为大家分享了C语言实现贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 一.程序实现的原理: 1.构造蛇身:定义一个坐标数组,存放的是蛇的每一节蛇身所在的坐标位置.这样就将移动蛇身的操作转换为 ...

  5. C语言实现贪吃蛇小游戏1.0

    C语言实现贪吃蛇小游戏1.0 贪吃蛇游戏要有三个东西:边框.蛇.食物 还有两个灵魂的东西:光标的移动与按键监控 一.光标的移动 在我看来在控制台上移动光标画图是实现这个小游戏的灵魂了,在这之前我一直以 ...

  6. Python使用pygame编写贪吃蛇小游戏

    Python使用pygame编写贪吃蛇小游戏 代码如下: # -*- coding:utf-8 -*- """ 贪吃蛇 """ import ...

  7. C语言实现贪吃蛇小游戏!(超简单详细)详细思路+源码分享

    贪吃蛇(也叫做贪食蛇)游戏是一款休闲益智类游戏,有PC和手机等多平台版本.既简单又耐玩.该游戏通过控制蛇头方向吃蛋,从而使得蛇变得越来越长. 我们的今天的目标就是:用C语言来实现一个贪吃蛇项目,也不用 ...

  8. C语言实现贪吃蛇小游戏(详解)

    目录 一.程序实现的原理: 二.预备知识 1.控制台窗口 2.通过代码将光标移动到控制台指定位置 三. 程序框架 四.具体操作 1.定义相关头文件 2.定义函数结构以及相关属性 五.完成各代码块 1. ...

  9. python编程小游戏-10分钟用Python编写一个贪吃蛇小游戏,简单

    贪吃蛇,大家应该都玩过.小编当初第一次接触贪吃蛇的时候 ,还是能砸核桃的诺基亚上,当时玩的不亦乐乎.今天,我们用Python编程一个贪吃蛇游戏,下面我们先看看效果: 好了,先介绍一个思路 所有的游戏最 ...

  10. 10分钟python游戏_牛得一批!10分钟用Python编写一个贪吃蛇小游戏

    贪吃蛇,大家应该都玩过.当初第一次接触贪吃蛇的时候 ,还是能砸核桃的诺基亚上,当时玩的不亦乐乎.今天,我们用Python编程一个贪吃蛇游戏,下面我们先看看效果: 好了,先介绍一个思路 所有的游戏最主要 ...

最新文章

  1. (附下载地址)制作RPM包(星际译王词典包)
  2. python 利用多进程实现文件的拷贝
  3. python 中一些常用的内置函数
  4. BMP图片的解析,关于压缩方式
  5. ubuntu 安装git
  6. anydesk截屏技术
  7. B树、B+树、LSM树以及其典型应用场景
  8. base64 转文件_PHP伪协议与文件包含
  9. java 固定值_这些频繁调用函数是否可以在dblquad中返回固定值?
  10. pytorch学习笔记(四):线性回归从零开始实现
  11. java classpath详解_java Classpath全解(转)
  12. 【学习OpenCV4】什么是图像的直方图?如何获取直方图?
  13. vue+node全栈移动商城【8】-vant新建注册页面
  14. UT(XCAP) 参数说明
  15. les有学计算机的吗,拷问LES大涡模拟
  16. H5 在iPhone真机上调试H5页面
  17. Win10配置Tensorflow-GPU
  18. django后台添加学生-jquery实现表单正则表达式验证,判断是否可以进行提交
  19. 必考题系列--十种常见的运行时异常
  20. 十进制转换为十六进制-八进制-二进制的进制转换计算

热门文章

  1. matlab 附录 周开利,【新书推荐】【2005.07】神经网络模型及其MATLAB仿真程序设计(周开利)...
  2. [附源码]Java计算机毕业设计SSM公立医院绩效考核系统
  3. 无法连接网络的解决办法
  4. VC 和 VS 区别
  5. 逆水寒服务器维护公告,逆水寒1月3日更新了什么 逆水寒1月3日更新维护公告
  6. 人工智能究竟能否实现?
  7. ubuntu安装 gcc 5.4.0
  8. 局域网共享设置软件_局域网软件(支持文件共享)
  9. MacBook安装git教程,git学习这一篇就够了!
  10. win10背景显示计算机名,如何自定义Win10计算机的开始菜单背景和图片