首页 > 代码库 > 【原创】只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(一)

【原创】只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(一)

先扯几句闲话

 

往往非科班出身的编程爱好者,以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

}

 

(待续)

【原创】只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(一)