//2020-6-18
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <time.h>
#include <windows.h>const int height = 20;   //地图的高
const int length = 20;   //地图的长
char Map[height][length]; //游戏地图int key;  //按键保存
int snakeLen = 4;   //蛇的长度,刚开始时为4
int gameOver = 0;   //自吃或碰墙时gameOver=1,游戏结束//左、右、上、下的方向
int  dx[4] = {0, 0, -1, 1};
int  dy[4] = {-1, 1, 0, 0};enum
{LeftKey = 75,RightKey = 77,UpKey = 72,DownKey = 80
};struct Snake    //蛇的每个节点的数据类型
{int r;     //行位置int c;     //列位置int dir;   //当前节点的方向, 0,1,2,3分别为左右上下
}Snake[height * length];const char head = '@';  //蛇头
const char body = '#';  //蛇身
const char food = '*';  //食物//函数声明
void Initial();     //地图的初始化
void CreateFood(); //在地图上随机产生食物
void Show();        //刷新显示地图
void GetPressKey();      //取出按键,并判断方向
void Move();        //蛇的移动
void CheckBorder();  //检查蛇头是否越界
void CheckHead(int r, int c);  //检查蛇头移动后的位置情况int main()
{Initial();Show();return 0;
}void Initial()  //地图的初始化
{int i, j;int hx, hy;system("title 贪吃蛇");  //控制台的标题memset(Map, '.', sizeof(Map));  //初始化地图全部为空'.'//system("cls");srand(time(0));     //随机种子hx = rand() % height; //产生蛇头hy = rand() % length;Map[hx][hy] = head;Snake[0].r = hx;  Snake[0].c = hy;Snake[0].dir = -1;CreateFood();       //随机产生食物for(i = 0; i < height; i++)   //地图显示{for(j = 0; j < length; j++){printf("%c", Map[i][j]);}printf("\n");}printf("\nC语言贪吃蛇\n");printf("按任意方向键开始游戏\n");getch();   //先接受一个按键,使蛇开始往该方向走GetPressKey();  //取出按键,并判断方向
}void CreateFood()  //在地图上随机产生食物
{int fx, fy;while(1){fx = rand() % height;fy = rand() % length;if(Map[fx][fy] == '.')  //不能出现在蛇所占有的位置{Map[fx][fy] = food;break;}}
}void Show()  //刷新显示地图
{int i, j;while(1){Sleep(500); //延迟半秒(1000为1s),即每半秒刷新一次地图GetPressKey();   //先判断按键在移动Move();if(gameOver)  //自吃或碰墙即游戏结束{printf("\n**游戏结束**\n");printf("    >_<\n");getchar();break;}system("cls");   //清空地图再显示刷新吼的地图for(i = 0; i < height; i++){for(j = 0; j < length; j++){printf("%c", Map[i][j]);}printf("\n");}printf("\nC语言贪吃蛇\n");printf("按任意方向键开始游戏\n");}
}void GetPressKey()  //取出按键,并判断方向
{if(kbhit() != 0) //检查当前是否有键盘输入,若有则返回一个非0值,否则返回0{while(kbhit() != 0)  //可能存在多个按键,要全部取完,以最后一个为主{key = getch(); //将按键从控制台中取出并保存到key中}switch(key){   //左case LeftKey:{Snake[0].dir = 0;break;}//右case RightKey:{Snake[0].dir = 1;break;}//上case UpKey:{Snake[0].dir = 2;break;}//下case DownKey:{Snake[0].dir = 3;break;}}}
}void Move()   //蛇的移动
{int i, r, c;int len = snakeLen;  //保存当前蛇的长度//记录当前蛇头的位置,并设置为空,蛇头先移动r = Snake[0].r;c = Snake[0].c;Map[r][c] = '.';Snake[0].r = Snake[0].r + dx[ Snake[0].dir ];Snake[0].c = Snake[0].c + dy[ Snake[0].dir ];CheckBorder();   //蛇头是否越界CheckHead(r, c);  //蛇头移动后的位置情况,参数为: 蛇头的开始位置if(snakeLen == len)  //未吃到食物即蛇身移动哦{for(i = 1; i < snakeLen; i++)  //要从蛇尾节点向前移动哦,前一个节点作为参照{if(i == 1)   //尾节点设置为空再移动{Map[ Snake[i].r ][ Snake[i].c ] = '.';}if(i == snakeLen-1)  //为蛇头后面的蛇身节点,特殊处理{Snake[i].r = r;Snake[i].c = c;Snake[i].dir = Snake[0].dir;}else   //其他蛇身即走到前一个蛇身位置{Snake[i].r = Snake[i+1].r;Snake[i].c = Snake[i+1].c;Snake[i].dir = Snake[i+1].dir;}Map[ Snake[i].r ][ Snake[i].c ] = '#'; //移动后要置为'#'蛇身}}
}void CheckBorder()  //检查蛇头是否越界
{if(Snake[0].r < 0 || Snake[0].r >= height || Snake[0].c < 0 || Snake[0].c >= length){gameOver = 1;}
}void CheckHead(int r, int c)  //检查蛇头移动后的位置情况
{if(Map[ Snake[0].r ][ Snake[0].c ] == '.')  //为空{Map[ Snake[0].r ][ Snake[0].c ] = '@';}else{if(Map[ Snake[0].r ][ Snake[0].c ] == '*')  //为食物{Map[ Snake[0].r ][ Snake[0].c ] = '@';Snake[snakeLen].r = r;   //新增加的蛇身为蛇头后面的那个Snake[snakeLen].c = c;Snake[snakeLen].dir = Snake[0].dir;Map[ Snake[snakeLen].r ][ Snake[snakeLen].c ] = '#';snakeLen++;CreateFood();  //食物吃完了马上再产生一个食物}else{gameOver = 1;}}
}
了解中小学信息学竞赛请加微信307591841(QQ同号)

C语言实现贪食蛇游戏相关推荐

  1. C语言 实现贪食蛇游戏

    参照博客"贪食蛇的C语言实现"的图形界面,用了大概一天的时间我也写了一个简单版的贪食蛇,能玩. 游戏截图 1.调用Windows API 解决画图问题 2.初始化画出围墙,蛇身体 ...

  2. 一个完整的嵌入式程序_【荐读】贪食蛇游戏的Android嵌入式系统设计

    贪食蛇游戏的Android嵌入式系统设计 Design of Android Embedded-System for Greedy Snake Game 作者: 韩 中, 苟和平, 李 援:琼台师范学 ...

  3. linux终端贪吃蛇,分享|nSnake: 在Linux的终端上玩经典的贪食蛇游戏

    你知道20世纪末的那些古老的诺基亚手机上最棒的东西是什么吗? 贪食蛇! 我以前在这个看似无聊但却让人上瘾的游戏上花费了大把的时间.在古老的诺基亚手机被智能手机取代的同时,贪食蛇也被另外的无聊但却令人上 ...

  4. tomcat websock html5,websocket实战(4) websocket版贪食蛇游戏(tomcat官方自带)

    通过前面3篇的阐述,相信可以构建一个简单的socket应用了.当然,也会遗漏了许多知识点,相信会在以后分享的实例中捎带说明下. 本文的主要是分析下tomcat官方自带的贪食蛇游戏.为什么选择分析这个项 ...

  5. 使用强化学习快速让AI学会玩贪食蛇游戏(轻量级二十分钟训练+代码)

    如何让AI玩会贪食蛇,甚至比你厉害 概述 构建问题(强化学习求解的一般步骤) 环境 动作定义 状态定义 奖励设计 训练奖励值收敛图 采用第4种状态定义方法 初步训练效果 最终训练效果 模型泛化迁移能力 ...

  6. 强化学习与ChatGPT:快速让AI学会玩贪食蛇游戏!

    大家好,我是千寻哥,现在自动驾驶很火热,其实自动驾驶是一个很大的概念,主要涉及的领域包括强化学习以及计算机视觉. 今天给各位讲讲强化学习的入门知识,并且手把手和大家一起做一个强化学习的Demo. 一. ...

  7. Java版贪食蛇游戏的设计与实现毕业设计

    技术:Java.JSP等 摘要: 使用java语言,贪吃蛇游戏,其界面简单易于操作,受到了世界各地玩家的喜爱.近年来,作为一种的高级语言java收到了大家的欢迎欢迎,具有简单.易于理解的特性,被广泛应 ...

  8. c# winfrom 贪食蛇游戏

    QQ:285679784   欢迎加入博主CSDN资源QQ群799473954(附加信息:CSDN博客)一起学习 ! using System; using System.Collections.Ge ...

  9. 80行JavaScript代码实现的贪食蛇游戏,简约之美

    新建一个文本文件,将下列80行代码粘贴进去,重命名为.html, 用浏览器打开: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transit ...

最新文章

  1. AtCoder Petrozavodsk Contest 001
  2. 读取csv数据存到list,批量写入mysql
  3. 公共基础选择题—关系代数和范式
  4. poj 2515 差分序列,排列组合
  5. Counterfeit Dollar
  6. java 防渗透_「java、工程师工作经验怎么写」-看准网
  7. Openshift源中的高可用性Drools无状态服务
  8. mysql rpm包安装指定路径_安装rpm包时指定路径
  9. 使用proguard混淆java web项目代码
  10. 信息学奥赛一本通(1045:收集瓶盖赢大奖)
  11. Ubuntu中Python3找不到_sqlite3模块
  12. (15)Verilog HDL宏定义:define
  13. python+flask编写一个简单的登录接口例子
  14. python对象属性是与数据有关的项目_python之对象产生,属性(定义的值)的查找原则,对象绑定关系...
  15. 使用Tenorshare iCareFone for mac如何对iPhone进行系统修复?
  16. 计算机入门培训考试,计算机基础培训考试习题.doc
  17. GB50174《电子信息系统机房设计规范》贯标培训通知
  18. vba 涉及合并取消合并单元格
  19. 注册表怎么禁用计算机,如何禁用注册表,注册表禁用和启动的方法
  20. mac更新系统后xcode-select --install使用问题

热门文章

  1. 高项--十大管理、47个过程、五大过程组
  2. ssm Vue的家教平台系统java项目源码
  3. python制作小黄人唱歌_小黄人音效制作方法图文教程
  4. NBA 本周五将空场复赛,球迷可用微软 Teams 现场互动
  5. composition与delegation
  6. 全国影子银行数据(含信托、理财、理财产品余额等数据)
  7. UE5 烘焙贴图(记录一下)
  8. 图像检索(CBIR)三剑客之BoF、VLAD、FV
  9. web前端入门到实战:HTML5 VideoAPI,打造自己的Web视频播放器
  10. plsql字体设置@顺带解决汉子横向显示的问题