先扯几句闲话
往往非科班出身的编程爱好者,以C作为入门语言时,往往会问:“我学了这个XX,能做些什么?”
其实,配合Google,基本上啥都能做了。
你甚至连链表都不需要,就可以写一个贪食蛇小游戏 :)
本系列将分4个部分,让任何一个仅仅会二维数组合结构体的初学者写出自己的贪食蛇
进入正题。我们先分析一下问题,确定下四个部分。
0、分析游戏的本质以及在控制台中的表现形式
1、分析贪食蛇游戏的基本结构
2、确定实现方案
3、全部源代码
一、游戏,或者视频游戏的本质是什么?
0、游戏的本质是程序
对于游戏而言,需要获取用户输入,并针对输入做出处理,然后反馈输出
简单的说,类似如下转换:
获取用户输入 ---> 根据用户输入处理各种数据 ---> 根据新数据绘出新的图像(输出)
虽然这一条有点像废话,但这对我们接下来分析贪食蛇的基本结构很有好处。
1、游戏的本质是帧和帧之间变化规则的集合
所谓帧,可以简单理解为(时刻,图片)的二元组,特定的帧有着相对于程序启动时而言确定的时刻以及图片。程序位于某个帧时,将根据当前帧所处时刻接受的用户的输入,来决定下一个单位时刻中,帧的图片内容。
举个例子,我们控制一个不动的人物前进了一格,这期间就发生了两个帧的转化:(时刻1,人物位于当前格的图像) --- > (时刻2,人物位于后一格的图像),而前述关系就可以理解为帧之间的变化规则。接受相应的操作、或者基于特定的条件,就会激活某个帧之间的变化规则,表现出来就是人物的移动、攻击以及得分等等。
2、游戏需要暂停来让用户感受到环境的变化
程序是很快的。
假设在一个游戏中,游戏人物走1步需要1次帧的转化,那么走10步,就需要10次帧的转化。但是,由于程序运行的速度很快,1次帧的转化和10次帧的转化,这之间的时间间隔普通人很难感受出来,跟人的感觉都是“嗖”的一声就过去了
因此,为了让用户能够感受出不同帧数之间的变化,我们需要【暂停】程序的运行。什么意思呢?也就是说,我们每完成一次帧的转换,我们就停止运行程序一段时间,等过了这段时间,再进行下一个帧转换。用伪代码表示一下:
while (1)
{
game.getUserInput();
game.drawPic();
game.sleep(1000); // 单位是ms
}
(待续)