游戏筑基开发之贪吃蛇移动算法(C语言)
主要利用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语言)相关推荐
- Win32 游戏开发:贪吃蛇 上篇
1)贪吃蛇游戏介绍(摘抄自百度百科) 1976年,Gremlin平台推出了一款经典街机游戏Blockade.游戏中,两名玩家分别控制一个角色在屏幕上移动,所经之处砌起围栏.角色只能向左.右方向90度转 ...
- laya游戏开发之贪吃蛇大作战(一)
laya游戏开发之贪吃蛇大作战 一.背景 二.引擎选择 三.整体架构 3.1 玩法分析 3.2 游戏架构 3.3 技术选型 一.背景 需要快速实现一个贪吃蛇的 demo 以验证功能,非传统贪吃蛇玩法, ...
- 开发Windows贪吃蛇游戏——(二)代码实现
目录 前言 窗体部分 Frame部分 声明全局变量 Panel的初始化 startGame方法 paintComponent方法 drawGame方法 newSnake方法 newFood方法 mov ...
- python 250行代码开发一个贪吃蛇
python 250行代码开发一个贪吃蛇 1. 前提工作准备 2. 全局变量的定义与包的导入 3. 游戏开始界面初始化 4. 游戏界面的设置 4.1 游戏界面,使用一个Point类进行划分 4.2 预 ...
- c/c++游戏编程之控制台贪吃蛇(一)
c/c++游戏编程之控制台贪吃蛇(一) c/c++游戏编程之控制台贪吃蛇(二) 欢迎你开启了c++的游戏编程世界之旅 如果你还未学过c++基本语法,请先学习基本语法再来学习游戏编程噢~. 对这样的&q ...
- c/c++游戏编程之控制台贪吃蛇(二)
c/c++游戏编程之控制台贪吃蛇(一) c/c++游戏编程之控制台贪吃蛇(二) 为了解决"闪屏"问题,我们不再使用system("cls")进行清屏,而是直接用 ...
- 用python自带的tkinter做游戏(一)—— 贪吃蛇 篇
用python自带的tkinter做游戏(一)-- 贪吃蛇 篇 本人新手,刚自学python满半年,现分享下心得,希望各位老手能指点一二,也希望和我一样的新手能共勉,谢谢~ 大家都知道用python做 ...
- java小游戏代码压缩包_java 贪吃蛇小游戏 源码下载
[实例简介] 使用java程序设计语言制作的一个贪吃蛇小游戏.游戏的控制模块应该做到易懂.易操作,以给玩家一个很好的游戏环境.在这个游戏的设计中,牵涉到图形界面的显示与更新.数据的收集与更新,还要应用 ...
- Qt入门开发__贪吃蛇小游戏
qt是一个由Qt Company于1991年开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程序(比如控制台工具和服务器).在图形用户界面开发相比MFC更加 ...
- laya游戏开发之贪吃蛇大作战(二)—— 贪吃蛇客户端
文章目录 一 功能分析 二 实现方案 1. 代码结构 2. 关键函数实现 2.1 游戏主循环(GameLoop) 2.2 数据层(Model) 2.3 画面绘制层(View) 帧同步的困难与解决方法 ...
最新文章
- 集成、知识蒸馏和自蒸馏有区别?
- 浅谈大型网络入侵检测建设
- runtime实现的机制是什么,怎么用,一般用于干嘛. 你还能记得你所使用的相关的头文件或者某些方法的名称吗?...
- c++基础学习(07)--(类)
- 吃货阶段01 类的定义 方法的布局 0925
- mac使用codelite运行程序没有输出
- java:数据库连接池
- Angular 项目打包之后,部署到服务器,刷新访问404解决方法
- jdbc basedao mysql_Java使用JDBC连接mysql、sqlserver、orcle数据库的baseDao类
- wps怎么免费导出简历_简历模板Word文档 免费下载简历模板
- cad剖切线的快捷键_cad快捷键(最全CAD快捷键大全 )
- No filesystem could mount root, tried: ext3 ext2 ext4 vfat msdos
- 好用的 Windows 软件授权管理工具 - slmgr
- 组合数学 多重集的排列和组合
- `Computer-Algorithm` 数论基础知识 (同余,取模,快速幂,质数,互质,约数,质因子)
- zookeeper Unreasonable length错误导致无法启动
- “误收”2100 个以太坊之后,星火矿池是退是分?
- 量化交易入门阶段:布林带调整参数又如何?
- 信号处理趣学D8——关于拉氏变换和频谱图的那些事儿
- 利用WoWSimpleRegistration实现TrinityCore自助注册