Peng Lv

毋意,毋必,毋固,毋我。 言必行,行必果。

导航

连连看 C++源代码 LinkingGame

上周六没事干,忽然想写个连连看游戏,虽然自己没玩过连连看,但多少也了解一些,于是奋战了一下午,一晚上,基本上差不多了,有想要程序或源码的朋友可以给我发邮件。

NOTE:更新,程序和源码可以从这个地址下载:下载连连看程序及源码

===========================================================

游戏思路很简单,用一个数组来存贮各个图片,arrGame[][],每次单击一个图片后,就去查找是否相连。

1.生成地图。开始初始化时,要生成一个地图,这个地图中每个元素的个数必须是偶数,这个功能是用GenerateMap()来执行的,这样可以保证每个元素都有偶数个,元素的放置是随机的。

2.查找路径。当用户单击一个元素时,就会执行FindPath(),这个函数用来查找两个元素是否连通。如果连通,那么返回true,并连接两个元素。

3.查找路径算法。开始想用dfs或bfs来实现,但是路径的拐角不能超过2,那么bfs,dfs可能就不好控制了,所以我选择了如下的方法:把两个点分别做xy轴的平行线,那么我们模拟另一个线来在平行线上移动。如图:


我们只要找到一条路径,使这条路径上的点都没有元素,那么这条路径就是符合条件的,同时,我们可以在这条”红线“向上或向下移动时,去剪掉很多没用的情况,所以复杂度还是很低的。


4.图像处理。游戏初始化时,使用CreateCompatibleDC()来创建nBitmap个hdcMem,每个hdcMem是分别存放着不同图片的相关内存hdc设备,当对应位置有元素时,便发生StretchBlt()行为,这个函数将源图像拷贝到窗口的对应位置。

5.资源。资源就是用的魔兽争霸中Dota的物品,天然的图片资源。
游戏截图如下:


PS:由于自己的windows编程不是很好,DirectX也不会,所以这个游戏只能做到这了,虽然很简陋,但是也算对得起一下午+一晚上的努力了。

posted on 2010-03-19 22:02  Lvpengms  阅读(10909)  评论(1编辑  收藏