二 游戏编程起步

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的部分涂成绿色,这将会是一个什么样的效果呢?看下图:

怎么样,有贪吃蛇游戏的感觉吗?再看看下图:

简直是完美!

游戏编程笔记-起步(一)一个简单的游戏-贪吃蛇相关推荐

  1. 游戏编程笔记-起步(三)-贪吃蛇游戏实现

    游戏编程笔记-起步 3.贪吃蛇游戏实现 代码下载:http://download.csdn.net/detail/you_lan_hai/3738025 核心代码实现如下,算法描述见 "起步 ...

  2. python自己制作节奏大师游戏_使用pygame制作一个简单的游戏

    翻译自Will McGugan的<Beginning Game Development with Python and Pygame –From Novice to Professional&g ...

  3. python编程制作接金币游戏_pygame学习笔记(6):完成一个简单的游戏

    学了这么长时间的Pygame,一直想写个游戏实战一下.看起来很简单的游戏,写其来怎么这么难.最初想写个俄罗斯方块,想了很长时间如何实现,想来想去,也没写出来,于是干脆下载别人的代码来读.后来,要想写一 ...

  4. Cocos2dx游戏开发系列笔记7:一个简单的跑酷游戏《萝莉快跑》的消化(附下载)

    懒骨头(http://blog.csdn.net/iamlazybone  QQ124774397 青岛 ) 或许有天 我们羡慕和崇拜的人 因为我们的努力 也会来了解我们 说不定 还会成为好友 骨头喜 ...

  5. Cocos2dx游戏开发系列笔记7:一个简单的跑酷游戏《萝莉快跑》的消化(附下载)...

    2019独角兽企业重金招聘Python工程师标准>>> 或许有天 我们羡慕和崇拜的人 因为我们的努力 也会来了解我们 说不定 还会成为好友 骨头喜欢这样与哲哲共勉 多少个夜晚 一张长 ...

  6. 【 Visual C++】游戏开发笔记之二——最简单的DirectX,vc窗口的编写

    笔记一中我们介绍了如何用代码创建空的win32窗口,然而创建空的win32窗口只完成了一半的工作,接下来要做的工作是设置Direct3D,从而可以在屏幕上渲染图形. Direct3D要调用很多函数才能 ...

  7. rust如何在木板上上传图片_通过编写一个简单的游戏来学习 Rust | Linux 中国

    导读:你可以尝试以多种语言编程一个简单的游戏来开始编程之路. 本文字数:4068,阅读时长大约: 5分钟 https://linux.cn/article-12979-1.html 作者:Moshe ...

  8. tensorflow学习笔记二——建立一个简单的神经网络拟合二次函数

    tensorflow学习笔记二--建立一个简单的神经网络 2016-09-23 16:04 2973人阅读 评论(2) 收藏 举报  分类: tensorflow(4)  目录(?)[+] 本笔记目的 ...

  9. 本文将引导你使用XNA Game Studio Express一步一步地创建一个简单的游戏

    本文将引导你使用XNA Game Studio Express一步一步地创建一个简单的游戏 第1步: 安装软件 第2步: 创建新项目 第3步: 查看代码 第4步: 加入一个精灵 第5步: 使精灵可以移 ...

最新文章

  1. 47万实例数据集,智源联合旷视发布2020 CrowdHuman人体检测大赛
  2. LeetCode Surrounded Regions(floodfill算法)
  3. POJ9384 迷宫(基金会BFS)
  4. ACM: 畅通工程-并查集-解题报告
  5. TWaver版3D化学元素周期表
  6. python 求连线相似度_Python分析《都挺好》中的人物关系,苏大强与蔡根花是真爱?...
  7. Python使用数字与字符串的技巧
  8. 移动端不利用HTML5和echarts开发一样可以实现大数据展示及炫酷统计系统(产品技术综合)...
  9. java中输出系统时间
  10. ubuntu 14.04中文显示乱码问题
  11. 编译原理:正规式转变成DFA算法
  12. 内存泄漏以及常见的解决方法
  13. 组合数学 —— 组合数
  14. 114. Flatten Binary Tree to Linked List【Medium】【将给定的二叉树转化为“只有右孩子节点”的链表(树)】...
  15. python trie
  16. UVA11526 H(n)【数学】
  17. 【数据结构】二叉搜索树的python实现
  18. 计划行为理论(TPB,Theory of Planned Behavior)
  19. uniapp开发微信小程序,主包(分包超过限制)
  20. Error 和 Exception 的区别?

热门文章

  1. 基于SSM框架实现的日记管理系统
  2. 游戏公司盯上了区块链:是机会,还只是一场游戏?
  3. 【python】在图片上绘画
  4. Tomcat11——Tomat集群
  5. 苹果HomeKit与谷歌 Home对比:谁是最佳选择?
  6. 华硕服务器系统安装win7系统教程,华硕K751 U盘装系统win7教程
  7. 黑苹果2k显示器开启hidpi_黑苹果开启硬件加速
  8. 网络信息安全——网络阶段笔记总结--jf
  9. R项目:使用R分析人力资源数据
  10. win10系统1903版本设置默认英文输入法