计划赶不上变化,本来想基于OpenGL来先处理这个小游戏,但我发现还有更好的方式来解决这个问题,用先前写的基于D2D的游戏接金币简单修改下来实现,然后把基于D2D的渲染改为OpenGL渲染的实现就可以。

基于D2D开发的效果展示。
简单的记录下,这是游戏地图的数据,这里0,1,2是砖块的类型,0代表无砖块,1代表能打碎的砖块,2代表打不动的砖块。
#define BRICK_COUNT_IN_LINE 20
int naMap[][BRICK_COUNT_IN_LINE] =
{
{ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 },
{ 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 },
{ 0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0 },
{ 0,0,0,0,1,1,2,1,1,2,2,1,1,2,1,1,0,0,0,0 }
};
关于挡板和球的实现代码就不展示了,直接用了先前接金币的goldgetter类,增加了边界处理的内容,最难的部分,碰撞角度变换部分我没有实现。
变更原因
基于我用OpenGL写打砖块的目的,其实不仅仅是实现打砖块,更重要的是要把渲染的部分集成进自己先前开发的游戏里面去,方便使用。所以立即用D2D简单实现了个Demo,另外从程序的角度考虑,D2D和OpenGL只是渲染,程序的实现应该是通用的。用D2D写出个大概后我认为基本就结束了,后续需要把OpenGL合成进先前写的游戏里面去,主要需要完成的任务有:
1.将WinMain替换为main和用glfw的处理方式。
2.将D2D渲染部分替换,这个有点麻烦,主要是变换的方式以及bitmap的处理不一样。
3.将所有的游戏工程转换为控制台应用程序。
简单总结
打砖块如果想做好,需要做很多的东西,目前只是简单展示。在处理的过程中移动挡板到边界需要进行过界判断,而绘制是间隔一定时间的,所以运动物体的坐标必然是不连续的,这就有物体运动出边界的情况,因而在有些情况下,移动到边界后能看到抖动的情况。对于砖块的摆放,开始是顶着顶部放置的,发现返回按钮和分数被遮挡了,就进行了下移,考虑到下移后距离顶部空间较大,就在顶部把所有的砖块都改成了打不动的,总觉得不爽,干脆在顶部直接把砖块拉伸做了一个挡板,这样感觉就可以了。
关于资源,先前从未用过photoshop,虽然只是画几个简单的形状,觉得也是蛮有趣的,有时间可以找个教程看看。
最后谈一下关于打砖块的改进,首先是关于碰撞和角度的变化处理,这个地方需要好好思考,例如静止的挡板和左移右移对球的运动角度变化应该是不一样的。然后是各种效果的处理,例如小球运动时尾部带有火焰,就像FIFA里面的足球的那种效果,砖块被打碎后产生四分五裂的效果等等。最后就是各种道具的设置,道具丰富才会有趣。做个演示很容易,要想做个成品游戏,可真不是简单的事情,就记录这么多吧。