游戏编程笔记-起步(一)一个简单的游戏-贪吃蛇
二 游戏编程起步
1.一个简单的游戏-贪吃蛇
1.贪吃蛇游戏剖析
1)游戏的目标。在不被撞死的前提下,吃掉奖子增加自己的长度,来完成升级。
2)游戏中的物体。蛇,墙壁,奖子。
3)动作。蛇移动,蛇吃奖子,蛇增加长度。
2.数据结构与算法分析
1)数据结构。简单起见,所有物体都用方块拼接。
则蛇可以使用一个一维数组描述,数组的每个单元描述了蛇块的状态,如方向;可使用一个二维数组来描述地面情况,不可通过的地方为墙壁设置为1,可通过的地方设置为0;奖子,就是一个特殊的方块。
2)算法。
注意观察蛇的特点。将蛇肢解为方块,则会发现每个方块的移动都依赖于它前面方块上一次的移动状态(第一个方块由玩家控制)。
如图,1是蛇头,4是尾,蓝色箭头是原来移动方向,红色箭头是玩家控制的方向(按了下键)。移动方向从1~4。(a)->(b) 下右右右,(b)->(c)下下右右。
根据这个规律,我们可以总结出一个基本算法:用数组来存贮蛇块,每个蛇块结点包含的信息有当前的移动方向,那么更新蛇的状态时,从尾部到头部进行处理。
for i=n-1 to 1
{
dir(i) = dir(i-1)
pos(i) += dir(i)
}
if dirKeyDown
{
dir(0) = k
}
pos(0) += dir(0)
这样,最复杂的部分就解决了。当然这不是最好的算法,如果我们再仔细观察下,就会发现这样的规律,蛇每次移动的时候,都只是头和尾发生了变化,那么,每次更新蛇的时候,我们只需要将尾部的蛇块移到头部相应的位置,不就更简单吗?答案是肯定的。这就是算法的魅力!只要我们勤于动脑筋,总会发现一些更好的解决办法。
pos(n-1) = pos(0)+dir
insert(n-1) before pos(0)
算法的复杂度立即从O(n)变到了O(1)!而且我们还会发现,我们只需要记录一个方向就可以了,则空间复杂度也因此降低了。
3)地图。描述了地面信息。
我们的贪吃蛇游戏地图信息很简单,总共有3类物体会站到地面上:墙壁,蛇,奖子。在每次更新的时候,我们将3类物体的信息按类别填充到地图中。如,墙壁的位置填1,奖子的位置填2,蛇的位置填3(每个蛇块都填),没有东西的地方填0。然后,将这个填满0,1,2,3的二维数组,交给渲染系统。
到此,我们的幕后操作就算基本完成,剩下的就是些细节,等到编码的时候在详细处理。
3.渲染地图数据描述
渲染贪吃蛇游戏其实也很简单,把地图中1的部分涂成蓝色,2的部分涂成红色,3的部分涂成绿色,这将会是一个什么样的效果呢?看下图:
怎么样,有贪吃蛇游戏的感觉吗?再看看下图:
简直是完美!
游戏编程笔记-起步(一)一个简单的游戏-贪吃蛇相关推荐
- 游戏编程笔记-起步(三)-贪吃蛇游戏实现
游戏编程笔记-起步 3.贪吃蛇游戏实现 代码下载:http://download.csdn.net/detail/you_lan_hai/3738025 核心代码实现如下,算法描述见 "起步 ...
- python自己制作节奏大师游戏_使用pygame制作一个简单的游戏
翻译自Will McGugan的<Beginning Game Development with Python and Pygame –From Novice to Professional&g ...
- python编程制作接金币游戏_pygame学习笔记(6):完成一个简单的游戏
学了这么长时间的Pygame,一直想写个游戏实战一下.看起来很简单的游戏,写其来怎么这么难.最初想写个俄罗斯方块,想了很长时间如何实现,想来想去,也没写出来,于是干脆下载别人的代码来读.后来,要想写一 ...
- Cocos2dx游戏开发系列笔记7:一个简单的跑酷游戏《萝莉快跑》的消化(附下载)
懒骨头(http://blog.csdn.net/iamlazybone QQ124774397 青岛 ) 或许有天 我们羡慕和崇拜的人 因为我们的努力 也会来了解我们 说不定 还会成为好友 骨头喜 ...
- Cocos2dx游戏开发系列笔记7:一个简单的跑酷游戏《萝莉快跑》的消化(附下载)...
2019独角兽企业重金招聘Python工程师标准>>> 或许有天 我们羡慕和崇拜的人 因为我们的努力 也会来了解我们 说不定 还会成为好友 骨头喜欢这样与哲哲共勉 多少个夜晚 一张长 ...
- 【 Visual C++】游戏开发笔记之二——最简单的DirectX,vc窗口的编写
笔记一中我们介绍了如何用代码创建空的win32窗口,然而创建空的win32窗口只完成了一半的工作,接下来要做的工作是设置Direct3D,从而可以在屏幕上渲染图形. Direct3D要调用很多函数才能 ...
- rust如何在木板上上传图片_通过编写一个简单的游戏来学习 Rust | Linux 中国
导读:你可以尝试以多种语言编程一个简单的游戏来开始编程之路. 本文字数:4068,阅读时长大约: 5分钟 https://linux.cn/article-12979-1.html 作者:Moshe ...
- tensorflow学习笔记二——建立一个简单的神经网络拟合二次函数
tensorflow学习笔记二--建立一个简单的神经网络 2016-09-23 16:04 2973人阅读 评论(2) 收藏 举报 分类: tensorflow(4) 目录(?)[+] 本笔记目的 ...
- 本文将引导你使用XNA Game Studio Express一步一步地创建一个简单的游戏
本文将引导你使用XNA Game Studio Express一步一步地创建一个简单的游戏 第1步: 安装软件 第2步: 创建新项目 第3步: 查看代码 第4步: 加入一个精灵 第5步: 使精灵可以移 ...
最新文章
- 47万实例数据集,智源联合旷视发布2020 CrowdHuman人体检测大赛
- LeetCode Surrounded Regions(floodfill算法)
- POJ9384 迷宫(基金会BFS)
- ACM: 畅通工程-并查集-解题报告
- TWaver版3D化学元素周期表
- python 求连线相似度_Python分析《都挺好》中的人物关系,苏大强与蔡根花是真爱?...
- Python使用数字与字符串的技巧
- 移动端不利用HTML5和echarts开发一样可以实现大数据展示及炫酷统计系统(产品技术综合)...
- java中输出系统时间
- ubuntu 14.04中文显示乱码问题
- 编译原理:正规式转变成DFA算法
- 内存泄漏以及常见的解决方法
- 组合数学 —— 组合数
- 114. Flatten Binary Tree to Linked List【Medium】【将给定的二叉树转化为“只有右孩子节点”的链表(树)】...
- python trie
- UVA11526 H(n)【数学】
- 【数据结构】二叉搜索树的python实现
- 计划行为理论(TPB,Theory of Planned Behavior)
- uniapp开发微信小程序,主包(分包超过限制)
- Error 和 Exception 的区别?