今天把pvz的收尾工作完成了,增加了开头巡场,阳光限制种植等功能,今后考虑加入更多的僵尸和植物。
下一步的目标是默写一遍代码,缕清思路。
回顾这么多天的学习过程,我将总结制作一款小型游戏的基本框架和使用技巧。
第一部分:基础框架
step1:
确定游戏玩法。
创建窗口。初始化游戏参数,包括创建对象结构体,初始化结构体,导入图片,配置随机种子等
step2:
处理游戏事件,包括碰撞检测,随机事件的发生,设置胜利与失败条件及其判断等
step3:
模块化所有函数,将生成、更新、渲染分开
step4:
找bug。
技巧:
遇到动画帧数播放过快的情况,可以采用静态变量计时器来降低频率,具体操作为
static int count=0;
if(++count>5){
count=0;
(statement);
}
这样可以实现每经过六次执行一次的效果。
针对对象处理的池的创建,具体操作为
int k;
for(k = 0; k < Max && figure[k].used; k++);
if(k < Max){
(statement);
}
其中figure是池里包含的对象,Max是池的大小,used是对象的属性,代表该对象是否在池里。
图片组的导入。利用sprintf函数多次对name赋值,再以name为地址导入图片,用于一系列动画。具体操作为
for(int i=0 ;i < Max;i++){
sprintf(name,"./%d.png");
loadimage(&img[i], name);
}
按钮的高亮设计。比较简单的一个方法如下
loadimage(x ,y ,flag?img1:img2);
flag是由用户交互模块所控制的,通过鼠标消息的不同点击状态来控制flag是否为真。
遇到需要控制变量从0到某个值循环变化的时候,可以采取如下写法:
index = (index + 1) % Max;
可以用于字母的后移加密,如将字母后移4位可以写成:
letter = (letter + 4 - 'a' + 1) % 26 -'a' + 1;