//游戏说明;
//游戏由基本的C语言和easyx制作而成
//在玩游戏之前,你需要下载一个VS并创建一个空项目
//然后再在源文件里创造一个后缀为.cpp的源文件
//由于easyx(一种绘图语言)必须用c++的文件编译,所以用.c后缀的文件是不行的
//但是代码全部是由c语言和c语言的风格写完的,这点大可放心
//将一下代码粘贴过去以后,你需要将VS最上面一栏的"项目"——"xxx的属性"——"高级"——"字符集"改成使用多字符集
//这样做的原因是,音频的播放需要这样修改以后才可以运行
//另外你还需要去easyx官网下载并安装一下easyx
//网站如下https://easyx.cn/download
//以及:代码的音乐文件需要下载并且在最后音频处修改为自己电脑中的音频的地址
// (注意音频播放函数下面的提示和双斜杠哦!)
//完成这些以后,就可以愉快体验贪吃蛇游戏啦!
//祝您游戏愉快!#define _CRT_SECURE_NO_WARNINGS 1        //scanf函数在vs运行中存在风险,需要先宏定义无风险才可以使用
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>    //getch函数
#include <time.h>
#include <graphics.h> //easyx中的函数
#include <mmsystem.h> //播放音乐的头文件
#pragma comment(lib,"winmm.lib")//播放音乐的库文件/*
知识点:结构体 循环 函数 easyx 数组
*/#define SNAKE_NUM 100000  //蛇的最大节数
#define X 500
#define Y 500
void Game();             //对游戏函数声明//xy坐标的结构
struct coor
{int x;             //横坐标int y;             //纵坐标
};//蛇的结构
struct Snake
{struct coor xy[SNAKE_NUM];        //记录每一节坐标int  size;                        //当前蛇的长度int  dir;                        //方向
}snake;//食物结构
struct Food
{struct coor xy;         //食物的坐标int flag;               //食物有没有被吃掉的标志
}food;//墙的结构
struct Wall
{struct coor xy;        //墙的坐标int flag;              //有没有撞墙的标志
}wall;//初始化食物
void InitFood()
{food.flag = 1;                                    //食物没有被吃掉food.xy.x = rand() % ((X - 100) / 10) * 10;         //生成的食物的坐标是10整数,否则容易出现不落在方块区域内的问题food.xy.y = rand() % ((Y - 100) / 10) * 10;
}//绘制食物
void DrawFood()
{setfillcolor(WHITE);            //设置食物的颜色为白色setlinecolor(BLACK);                                                    //食物的边框线为黑色fillrectangle(food.xy.x, food.xy.y, food.xy.x + 10, food.xy.y + 10);
}//初始化墙
void InitWall()
{wall.xy.x = 0;wall.xy.y = 0;wall.flag = 1;
}//绘制墙
void DrawWall()
{for (wall.xy.x = 0; wall.xy.x < X; wall.xy.x += 10){wall.xy.y = 0;setfillcolor(WHITE);setlinecolor(BLACK);fillrectangle(wall.xy.x, wall.xy.y, wall.xy.x + 10, wall.xy.y + 10);}for (wall.xy.x = 0; wall.xy.x < X; wall.xy.x += 10){wall.xy.y = Y - 10;setfillcolor(WHITE);setlinecolor(BLACK);fillrectangle(wall.xy.x, wall.xy.y, wall.xy.x + 10, wall.xy.y + 10);}for (wall.xy.y = 0; wall.xy.y < Y; wall.xy.y += 10){wall.xy.x = X - 10;setfillcolor(WHITE);setlinecolor(BLACK);fillrectangle(wall.xy.x, wall.xy.y, wall.xy.x + 10, wall.xy.y + 10);}for (wall.xy.y = 0; wall.xy.y < Y; wall.xy.y += 10){wall.xy.x = 0;setfillcolor(WHITE);setlinecolor(BLACK);fillrectangle(wall.xy.x, wall.xy.y, wall.xy.x + 10, wall.xy.y + 10);}
}//方向控制
//0:上     1:下     2:右      3:左
// 用枚举类型来表示这些常数
enum direction
{up, down, right, left
};//初始化蛇
void InitSnake()
{snake.xy[0].x = 20;   //初始状态蛇有三节,三节的坐标分别初始化snake.xy[0].y = 10;snake.xy[1].x = 10;snake.xy[1].y = 10;snake.xy[2].x = 0;snake.xy[2].y = 10;snake.size = 3;snake.dir = right;//对后面的坐标处理一下;for (int i = 3; i < SNAKE_NUM; i++){snake.xy[i].x = -100;snake.xy[i].y = -100;}
}//绘制一条蛇
void DrawSnake()
{setfillcolor(RED);             //给蛇头设计一个颜色setlinecolor(BLACK);fillrectangle(snake.xy[0].x, snake.xy[0].y, snake.xy[0].x + 10, snake.xy[0].y + 10);for (int i = 1; i < snake.size; i++){setfillcolor(WHITE);             //给蛇身设计一个颜色setlinecolor(BLACK);fillrectangle(snake.xy[i].x, snake.xy[i].y, snake.xy[i].x + 10, snake.xy[i].y + 10);}
}//移动蛇
void MoveSnake()
{//处理后面的节数(跟随)for (int i = snake.size - 1; i > 0; i--){snake.xy[i].x = snake.xy[i - 1].x;snake.xy[i].y = snake.xy[i - 1].y;}switch (snake.dir){case up:snake.xy[0].y -= 10;break;case down:snake.xy[0].y += 10;break;case right:snake.xy[0].x += 10;break;case left:snake.xy[0].x -= 10;break;}
}//按键处理控制蛇的移动
void KeyDown()
{char userkey = _getch();                 //读入输入的字符并且不需要回车switch (userkey){case 'W':case 'w':case 72:if (snake.dir != down){snake.dir = up;}break;case 's':case 'S':case 80:if (snake.dir != up){snake.dir = down;}break;case 'a':case 'A':case 75:if (snake.dir != right){snake.dir = left;}break;case 'd':case 'D':case 77:if (snake.dir != left){snake.dir = right;}break;}
}//吃食物
void EatFood()
{if (food.xy.x == snake.xy[0].x && food.xy.y == snake.xy[0].y){food.flag = 0;snake.size++;}
}//游戏暂停设置
void Stop()
{if (_kbhit()){if (_getch() == ' '){while (_getch() != ' ');}}
}//撞墙游戏结束
void GameOver()
{if (snake.xy[0].x == X || snake.xy[0].x == -10 || snake.xy[0].y == Y || snake.xy[0].y == -10){wall.flag = 0;}
}void Game()
{int grade = 0;                                                                 //分数srand((unsigned int)time(NULL));                                               //设计随机数种子;initgraph(X, Y);                                                               //初始化绘图窗口setbkcolor(RGB(rand() % 256, rand() % 256, rand() % 256));                     //设置背景颜色为随机cleardevice();                                                                 //用背景色清空屏幕InitSnake();InitFood();InitWall();mciSendString("open C:\\Users\\F\\Desktop\\bgm.mp3 alias bkmusic", NULL, 0, NULL);//open指令打开需要播放的音乐,alias后面制定了前面文件路径的别名,以后想要操作这个文件直接使用这个别名就可以了.//如果音乐文件和我们的debug文件夹在同一目录下,就可以像我这样不用写路径,直接音乐名。//如果音乐文件不是上面的情况就得写清楚路径。//例: D盘下的demo目录有一个叫1.MP3的文件//mciSendString("open D:\\demo\\1.mp3 alias bkmusic", NULL, 0, NULL);mciSendString("play bkmusic repeat", NULL, 0, NULL);     //循环播放音乐while (1){BeginBatchDraw();                           //双缓冲绘图开始cleardevice();DrawSnake();DrawFood();DrawWall();MoveSnake();EatFood();Stop();                                     //按空格游戏暂停GameOver();if (food.flag == 0){InitFood();grade += 10;}if (wall.flag == 0){printf("***************************************\n");printf("***************************************\n");printf("*************Game Over!!!!*************\n");printf("*************Your Grade is:%d**********\n", grade);printf("***************************************\n");printf("***************************************\n");break;}if (_kbhit())                               //判断是否有按键{KeyDown();}Sleep(100);                                  //控制速度EndBatchDraw();                             //将之前的操作显示出来}closegraph();                                      //关闭图形窗口
}void menu()
{printf("**************贪吃蛇小游戏*************\n");printf("***************************************\n");printf("***************************************\n");printf("***************游戏说明:**************\n");printf("****玩家操控蛇吃东西,吃到以后长度+1***\n");printf("**如果玩家操控蛇头撞墙了那么直接结束***\n");printf("*******另外按空格可以暂停游戏哦!******\n");printf("**************ok游戏开始!*************\n");printf("***************************************\n");printf("***************************************\n");printf("***********1.扣1回车开始游戏***********\n");printf("***************************************\n");printf("***************************************\n");printf("********2.扣眼珠子退出(bushi)********\n");printf("***************************************\n");printf("***************************************\n");
}
int main()
{int n = 0;menu();while (scanf("%d", &n), n == 1){Game();}printf("好的,游戏结束!");return 0;
}

贪吃蛇C语言代码(简单易懂)相关推荐

  1. C语言贪吃蛇游戏代码,贪吃蛇C语言代码实现大全

    一.C语言贪吃蛇代码实现前言 设计贪吃蛇游戏的主要目的是让大家夯实C语言基础,训练编程思维,培养解决问题的思路,领略多姿多彩的C语言. 贪吃蛇是非常经典的一款游戏,本次我们模拟在控制台实现贪吃蛇游戏, ...

  2. 贪吃蛇python语言代码_Python贪吃蛇简单的代码

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在自学Python的过程中在网上查询资料时发现了一些好玩的东西,python的游戏库模块,它可以自己弄一个小游戏来玩玩,然后我在网上找了一些游戏的代码,, ...

  3. 简单贪吃蛇c语言代码,一个C语言写简单贪吃蛇源代码.doc

    一个C语言写简单贪吃蛇源代码 #include #include #include #include #include #include int grade=5,point=0,life=3; voi ...

  4. unity贪吃蛇c 语言代码,unity实现简单贪吃蛇游戏

    本文实例为大家共享了unity实现贪吃蛇游戏的详细代码,供大家参考,详细内容如下 首先创建一个头部,编写脚本利用WASD控制头部的移动. Vector3 up=new Vector3(0,1,0); ...

  5. linux贪吃蛇c语言代码,C语言贪吃蛇讲解及源码

    { set_cursor_position(0, i); printf("■"); set_cursor_position(N+2, i); printf("■" ...

  6. 贪吃蛇c语言代码数组,刚学C语言,想写一个贪吃蛇的代码

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #include typedef struct snake { int a; int b; stru ...

  7. 贪吃蛇c语言代码图片,【图片】C语言小游戏~贪吃蛇【c语言吧】_百度贴吧

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 好巧,我也是(有了) #include #include #include #include #include #define N 21 void got ...

  8. 贪吃蛇c语言代码高难,100多行代码的《贪吃蛇》

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 耗费两节课,调试到一个不错的效果. http://www.lugede.cn 注意:使用前请确保TC文件夹位于D:\TC目录下. ------- #inc ...

  9. 贪吃蛇c语言 游戏中会出现障碍物,贪吃蛇C语言游戏代码.doc

    贪吃蛇C语言游戏代码 //开始编写游戏需要的类 #include //EasyX_2011惊蛰版(绘图库) #include #include #include #define UP1 #define ...

最新文章

  1. 最新版GMP规范全文
  2. vue 不能监测数组长度变化length的原因
  3. Python的数据库mongoDB的入门操作
  4. linux DNS服务器配置
  5. Hbase2.1.0-CDH6.3.2 Region in Transition (永久RIT) 异常解决
  6. 树莓派自动备份mysql数据表_MySQL数据备份之mysqldump使用
  7. 群晖windows文件服务器,小白玩群晖 篇六:群晖NFS远程加载管理Windows文件夹看电影...
  8. 江恩买卖规则中的定性与定量分析方法
  9. JavaScript运算规则
  10. 用c语言编写九九乘法表
  11. matlab混沌指数的计算,matlab实现混沌系统最大李雅普诺夫指数
  12. Python爬虫入门教程15:音乐网站数据的爬取
  13. GEF 命令模式介绍
  14. H5打开支付宝小程序
  15. 重新开博,短期目标,工作计划
  16. 使用VPS时的注意事项
  17. CSS : 七彩呼吸灯
  18. 浪潮之巅读书笔记(三)
  19. “元宇宙”概念爆火,VR全景行业迎来重大利好
  20. Qt 实现自定义Ui控件例子,以自定义的Slider为例(QWidget)

热门文章

  1. C#,VB.Net,VB6调用Codesoft打印标签
  2. AD shift+space 解决办法
  3. Java中的常用类——Calendar类
  4. c++游戏设计五:打飞机
  5. 工厂模式---实体类集合
  6. 【计量经济学】【高教版】第一次作业(7、8、10)
  7. WIFI宝——见证人生巅峰使者
  8. unity怪物攻击玩家减血_Unity3d 怪物死亡燃烧掉效果
  9. 随着餐饮、酒店、医院、学校等行业的发展,商用台下洗碗机的市场需求将会不断增加...
  10. 软件工程SSM毕设旅游信息发布管理系统(含源码+论文)