还记得非常久曾经听群里人说做贪吃蛇什么的,那时候大一刚学了C语言,认为非常难,根本没什么思路。

前不久群里有些人又在谈论C语言贪吃蛇的事了,看着他们在做,我也打算做一个出来。

如今大三,经过了这一年半的编程,如今认为这个C语言的贪吃蛇还是比較简单的,花的时间不非常多!

我认为主要是思路正确,基本上就米什么大的问题。

如今贴上我的代码和我的详解,希望大家多交流。

首先说下我这个贪吃蛇仅仅是一个简单的,游戏结束有2种可能:一碰墙,二自杀即蛇头碰到蛇身。

如有不好之处,请见谅把。

首先说下我这个贪吃蛇仅仅是一个简单的,游戏结束有2种可能:一碰墙,二自杀即蛇头碰到蛇身。
如有不好之处,请见谅把。//*******************************************************
//**************版权所有***2011.9.20***咸鱼**************
//*******************************************************
//*友情提示:如想速度快点,请改小_sleep(500)函数中參数*****
//*******************************************************
//*****************如写的不好,请见谅*********************
//*******************************************************
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <time.h>
const int H = 8;   //地图的高
const int L = 16;  //地图的长
char GameMap[H][L];   //游戏地图
int  key;  //按键保存
int  sum = 1, over = 0;  //蛇的长度, 游戏结束(自吃或碰墙)
int  dx[4] = {0, 0, -1, 1};  //左、右、上、下的方向
int  dy[4] = {-1, 1, 0, 0};
struct Snake   //蛇的每一个节点的数据类型
{int x, y;  //左边位置int now;   //保存当前节点的方向, 0,1,2,3分别为左右上下
}Snake[H*L];
const char Shead = '@';  //蛇头
const char Sbody = '#';  //蛇身
const char Sfood = '*';  //食物
const char Snode = '.';  //'.'在地图上标示为空
void Initial();  //地图的初始化
void Create_Food(); //在地图上随机产生食物
void Show();   //刷新显示地图
void Button();  //取出按键,并推断方向
void Move();   //蛇的移动
void Check_Border();  //检查蛇头是否越界
void Check_Head(int x, int y);   //检查蛇头移动后的位置情况
int main()
{Initial();Show();return 0;
}
void Initial()  //地图的初始化
{int i, j;int hx, hy;system("title 贪吃蛇");  //控制台的标题memset(GameMap, '.', sizeof(GameMap));  //初始化地图所有为空'.'system("cls");srand(time(0));   //随机种子hx = rand()%H;    //产生蛇头hy = rand()%L;GameMap[hx][hy] = Shead;Snake[0].x = hx;  Snake[0].y = hy;Snake[0].now = -1;Create_Food();   //随机产生食物for(i = 0; i < H; i++)   //地图显示{ for(j = 0; j < L; j++)printf("%c", GameMap[i][j]);printf("\n");}printf("\n小小C语言贪吃蛇\n");printf("按随意方向键開始游戏\n");getch();   //先接受一个按键,使蛇開始往该方向走Button();  //取出按键,并推断方向
}
void Create_Food()  //在地图上随机产生食物
{int fx, fy;while(1){fx = rand()%H;fy = rand()%L;if(GameMap[fx][fy] == '.')  //不能出如今蛇所占有的位置{ GameMap[fx][fy] = Sfood;break;}}
}
void Show()  //刷新显示地图
{int i, j;while(1){  _sleep(500); //延迟半秒(1000为1s),即每半秒刷新一次地图Button();   //先推断按键在移动Move();if(over)  //自吃或碰墙即游戏结束{ printf("\n**游戏结束**\n");printf("     >_<\n");getchar();break;}system("cls");   //清空地图再显示刷新吼的地图for(i = 0; i < H; i++) { for(j = 0; j < L; j++)printf("%c", GameMap[i][j]);printf("\n");}printf("\n小小C语言贪吃蛇\n");printf("按随意方向键開始游戏\n");}
}
void Button()  //取出按键,并推断方向
{if(kbhit() != 0) //检查当前是否有键盘输入,若有则返回一个非0值,否则返回0{ while(kbhit() != 0)  //可能存在多个按键,要所有取完,以最后一个为主key = getch(); //将按键从控制台中取出并保存到key中switch(key){   //左case 75:  Snake[0].now = 0;break;//右case 77:  Snake[0].now = 1;     break;//上case 72:  Snake[0].now = 2;break;//下case 80:  Snake[0].now = 3;break;}}
}
void Move()   //蛇的移动
{int i, x, y;int t = sum;  //保存当前蛇的长度//记录当前蛇头的位置,并设置为空,蛇头先移动x = Snake[0].x;  y = Snake[0].y;  GameMap[x][y] = '.';Snake[0].x = Snake[0].x + dx[ Snake[0].now ];Snake[0].y = Snake[0].y + dy[ Snake[0].now ];Check_Border();   //蛇头是否越界Check_Head(x, y);  //蛇头移动后的位置情况,參数为: 蛇头的開始位置if(sum == t)  //未吃到食物即蛇身移动哦for(i = 1; i < sum; i++)  //要从蛇尾节点向前移动哦,前一个节点作为參照{if(i == 1)   //尾节点设置为空再移动GameMap[ Snake[i].x ][ Snake[i].y ] = '.';if(i == sum-1)  //为蛇头后面的蛇身节点,特殊处理{Snake[i].x = x;Snake[i].y = y;Snake[i].now = Snake[0].now;}else   //其它蛇身即走到前一个蛇身位置{Snake[i].x = Snake[i+1].x;Snake[i].y = Snake[i+1].y;Snake[i].now = Snake[i+1].now;}GameMap[ Snake[i].x ][ Snake[i].y ] = '#'; //移动后要置为'#'蛇身 }
}
void Check_Border()  //检查蛇头是否越界
{if(Snake[0].x < 0 || Snake[0].x >= H|| Snake[0].y < 0 || Snake[0].y >= L)over = 1;
}
void Check_Head(int x, int y)  //检查蛇头移动后的位置情况
{if(GameMap[ Snake[0].x ][ Snake[0].y ] == '.')  //为空GameMap[ Snake[0].x ][ Snake[0].y ] = '@';elseif(GameMap[ Snake[0].x ][ Snake[0].y ] == '*')  //为食物{GameMap[ Snake[0].x ][ Snake[0].y ] = '@';  Snake[sum].x = x;   //新添加�的蛇身为蛇头后面的那个Snake[sum].y = y;Snake[sum].now = Snake[0].now;GameMap[ Snake[sum].x ][ Snake[sum].y ] = '#'; sum++;Create_Food();  //食物吃完了立即再产生一个食物}elseover = 1;
}

转载于:https://www.cnblogs.com/yxwkf/p/3853520.html

C语言 小游戏之贪吃蛇相关推荐

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

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

  2. c语言贪吃蛇咬到尾巴,【图片】C语言小游戏~贪吃蛇【c语言吧】_百度贴吧

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

  3. 小小c语言贪吃蛇思路,【图片】C语言小游戏~贪吃蛇【c语言吧】_百度贴吧

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

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

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

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

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

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

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

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

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

  8. cocos creator开发微信小游戏(五)贪吃蛇大作战

    目录 小游戏介绍 小游戏cocos creator场景图 小游戏部分JS代码 开发中碰到的问题 工程及说明 小游戏介绍 贪吃蛇小游戏:贪吃蛇试玩(首次加载比较慢),类似贪吃蛇大作战的小游戏.当玩家的蛇 ...

  9. 超级详细的注释C语言简单实现童年小游戏:贪吃蛇

    引言: 记得小时候还没有现在超级高端的智能手机,当时的诺基亚类型的老人机是我的最爱,而里面的贪吃蛇小游戏我总是能玩很久,所以今天就用C语言简单实现一下贪吃蛇这一个小游戏吧. 一. 准备工作: 1.VS ...

最新文章

  1. android类名方法名不混淆,android – 如何告诉Proguard混淆类名
  2. UC,qq浏览器强制横屏
  3. Java里optionsMenu.add_Android中OptionMenu的使用总结
  4. WP8开发日志(1):Toolkit的本地化
  5. 基于python的网站_基于Python的网站爬虫应用研究
  6. PHP的查找stripos strpos strripos strpos
  7. Git命令集十三——快照操作
  8. Microsoft宣布将停止支持多个 .NET Framework版本
  9. ajax php 投票,PHP 实例 AJAX 投票
  10. [css] 用CSS实现一个轮播图
  11. 【学习笔记】数据链路层——随机访问介质访问控制(ALOHA、CSMA、CSMA/CD、CSMA/CA),截断二进制指数规避算法
  12. jieba源码分析(二)
  13. java web 路径 .html,java web 路径(java web 路径).doc
  14. 如何从尚硅谷下载免费的前端开发视频资源
  15. xshell6上传文件到linux,xshell上传文件到虚拟机中
  16. unity android 不锁屏,Unity 实现Android不锁屏
  17. 验证集到底有什么作用
  18. 使用 Electron 构建桌面应用程序的介绍
  19. 各大财经网站股票数据接口
  20. 架构一个数据交换与信息共享平台

热门文章

  1. python软件包自带的集成开发环境-Python: 内置的集成开发环境-IDLE
  2. python画动态爱心-使用Python画出小人发射爱心的代码
  3. python是基于什么语言开发-python是哪个国家的人开发的语言
  4. 零基础学python用什么书-零基础自学python3 好用的入门书籍推荐
  5. python使用什么注释语句和运算-怎么使用python注释语句
  6. 零基础自学python的app-零基础转行Python,为什么有些人自学几天就放弃了?
  7. python学生管理系统-python实现学生管理系统
  8. 用python画烟花-python实现烟花小程序
  9. python3.5安装教程-Python 3.5安装教程
  10. python3.6.5无法安装-Python3.6无法安装numpy,如何解决?