主要利用C语言中最基础的方法及数据变量

包括二位数组、静态全局变量、循环(循环嵌套)、switch语句等。

注:未进行模块化(封装)。

实现效果如下:

基础数据变量:

static int map[N][N] = {{1,1,1,1,1,1,1,1,1,1},{1,0,0,0,0,0,0,0,0,1},{1,0,2,3,4,0,0,0,0,1},{1,0,0,0,0,0,0,0,-1,1},{1,0,0,0,0,0,0,0,0,1},{1,0,0,0,-1,0,0,0,0,1},{1,0,0,0,0,0,0,0,0,1},{1,0,-1,0,0,0,0,-1,0,1},{1,0,0,0,0,0,0,0,0,1},{1,1,1,1,1,1,1,1,1,1}
};

注:其中”1“表示围墙、”0“表示空、”2“表示蛇头、”3、4…“表示蛇身,”-1“表示零食。

利用深度搜索算法实现贪吃蛇移动(两种方式、核心思想相同)

方式一:

该方式相对容易理解,实现方式较为粗暴。

代码如下:

     //x,y一开始代表蛇头的坐标。随着深度搜索,x,y变量不断变化,表示蛇身坐标。map[tx][ty] = map[x][y];//移动蛇头while (1){if (map[x][y] + 1 == map[x - 1][y])//搜索方向:上{map[x][y] = map[x - 1][y];x = x - 1;}else if (map[x][y] + 1 == map[x + 1][y])//搜索方向:下{map[x][y] = map[x + 1][y];x = x + 1;}else if (map[x][y] + 1 == map[x][y - 1])//搜索方向:左{map[x][y] = map[x][y-1];y = y - 1;}else if (map[x][y] + 1 == map[x][y + 1])//搜索方向:右{map[x][y] = map[x][y + 1];y = y + 1;}else{//吃到食物foodif (bFlag == 1){map[x][y] ++;} else{ //便遍历到蛇尾且未吃到食物foodmap[x][y] = 0;}break;}}//int tx,ty记录的是蛇头的坐标,还原蛇头坐标x = tx;y = ty;

方式二:

该方式较为精炼,融入一定的编程技巧。主要利用二位数组直接存储深度搜索的四个方向。符合设计模式中的高内聚、低耦合的思想。

代码如下:

         //x,y一开始代表蛇头的坐标。随着深度搜索,x,y变量不断变化,表示蛇身坐标。int dirs[4][2] = { {-1,0}, {1,0}, {0,1}, {0,-1} };//记录深度搜索四个方向坐标map[tx][ty] = map[x][y];//蛇头移动while (1){int bFlag = 0;//用于记录是否遍历到蛇尾for (int i = 0; i < 4; i++){if (map[x][y] + 1 == map[x + dirs[i][0]][y + dirs[i][1]]){map[x][y] += 1;x += dirs[i][0];y += dirs[i][1];bFlag = 1;break;}}//遍历到蛇尾if (!bFlag){//看是否吃到食物if (bEat){map[x][y]++;break;}map[x][y] = 0;break;}}//还原蛇头x = tx;y = ty;

游戏筑基开发之贪吃蛇移动算法(C语言)相关推荐

  1. Win32 游戏开发:贪吃蛇 上篇

    1)贪吃蛇游戏介绍(摘抄自百度百科) 1976年,Gremlin平台推出了一款经典街机游戏Blockade.游戏中,两名玩家分别控制一个角色在屏幕上移动,所经之处砌起围栏.角色只能向左.右方向90度转 ...

  2. laya游戏开发之贪吃蛇大作战(一)

    laya游戏开发之贪吃蛇大作战 一.背景 二.引擎选择 三.整体架构 3.1 玩法分析 3.2 游戏架构 3.3 技术选型 一.背景 需要快速实现一个贪吃蛇的 demo 以验证功能,非传统贪吃蛇玩法, ...

  3. 开发Windows贪吃蛇游戏——(二)代码实现

    目录 前言 窗体部分 Frame部分 声明全局变量 Panel的初始化 startGame方法 paintComponent方法 drawGame方法 newSnake方法 newFood方法 mov ...

  4. python 250行代码开发一个贪吃蛇

    python 250行代码开发一个贪吃蛇 1. 前提工作准备 2. 全局变量的定义与包的导入 3. 游戏开始界面初始化 4. 游戏界面的设置 4.1 游戏界面,使用一个Point类进行划分 4.2 预 ...

  5. c/c++游戏编程之控制台贪吃蛇(一)

    c/c++游戏编程之控制台贪吃蛇(一) c/c++游戏编程之控制台贪吃蛇(二) 欢迎你开启了c++的游戏编程世界之旅 如果你还未学过c++基本语法,请先学习基本语法再来学习游戏编程噢~. 对这样的&q ...

  6. c/c++游戏编程之控制台贪吃蛇(二)

    c/c++游戏编程之控制台贪吃蛇(一) c/c++游戏编程之控制台贪吃蛇(二) 为了解决"闪屏"问题,我们不再使用system("cls")进行清屏,而是直接用 ...

  7. 用python自带的tkinter做游戏(一)—— 贪吃蛇 篇

    用python自带的tkinter做游戏(一)-- 贪吃蛇 篇 本人新手,刚自学python满半年,现分享下心得,希望各位老手能指点一二,也希望和我一样的新手能共勉,谢谢~ 大家都知道用python做 ...

  8. java小游戏代码压缩包_java 贪吃蛇小游戏 源码下载

    [实例简介] 使用java程序设计语言制作的一个贪吃蛇小游戏.游戏的控制模块应该做到易懂.易操作,以给玩家一个很好的游戏环境.在这个游戏的设计中,牵涉到图形界面的显示与更新.数据的收集与更新,还要应用 ...

  9. Qt入门开发__贪吃蛇小游戏

    qt是一个由Qt Company于1991年开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程序(比如控制台工具和服务器).在图形用户界面开发相比MFC更加 ...

  10. laya游戏开发之贪吃蛇大作战(二)—— 贪吃蛇客户端

    文章目录 一 功能分析 二 实现方案 1. 代码结构 2. 关键函数实现 2.1 游戏主循环(GameLoop) 2.2 数据层(Model) 2.3 画面绘制层(View) 帧同步的困难与解决方法 ...

最新文章

  1. 集成、知识蒸馏和自蒸馏有区别?
  2. 浅谈大型网络入侵检测建设
  3. runtime实现的机制是什么,怎么用,一般用于干嘛. 你还能记得你所使用的相关的头文件或者某些方法的名称吗?...
  4. c++基础学习(07)--(类)
  5. 吃货阶段01 类的定义 方法的布局 0925
  6. mac使用codelite运行程序没有输出
  7. java:数据库连接池
  8. Angular 项目打包之后,部署到服务器,刷新访问404解决方法
  9. jdbc basedao mysql_Java使用JDBC连接mysql、sqlserver、orcle数据库的baseDao类
  10. wps怎么免费导出简历_简历模板Word文档 免费下载简历模板
  11. cad剖切线的快捷键_cad快捷键(最全CAD快捷键大全 )
  12. No filesystem could mount root, tried: ext3 ext2 ext4 vfat msdos
  13. 好用的 Windows 软件授权管理工具 - slmgr
  14. 组合数学 多重集的排列和组合
  15. `Computer-Algorithm` 数论基础知识 (同余,取模,快速幂,质数,互质,约数,质因子)
  16. zookeeper Unreasonable length错误导致无法启动
  17. “误收”2100 个以太坊之后,星火矿池是退是分?
  18. 量化交易入门阶段:布林带调整参数又如何?
  19. 信号处理趣学D8——关于拉氏变换和频谱图的那些事儿
  20. 利用WoWSimpleRegistration实现TrinityCore自助注册

热门文章

  1. 封城第12日,冰箱都快塞不下咯(附菜谱分享)
  2. 一道快手面试题,击败了100%用户
  3. 每日算法系列【LeetCode 495】提莫攻击
  4. Leetcode-树
  5. 构建运营级IPv6网络
  6. 这样的书 我改怎么起名呢?
  7. NMF(非负矩阵分解)的场景应用
  8. 信用评分python_信用评分卡模型在Python中实践(上)
  9. c语言中extern关键字
  10. 蓝桥杯2019年第十届C/C++省赛B组第四题-数的分解