zoukankan      html  css  js  c++  java
  • 连连看 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也不会,所以这个游戏只能做到这了,虽然很简陋,但是也算对得起一下午+一晚上的努力了。

  • 相关阅读:
    CPDA之时间序列
    CSS clear
    27 款经典的CSS 框架
    IT人必读:请不要做浮躁的IT人
    23个Javascript弹出窗口特效
    三种东西永远不要放到数据库里
    jquery 插件 thickbox窗口 第一个控件获得焦点(解决第二次弹出窗口,文本不能输入数据)
    enum总结
    vs版本的选择
    iPhone iPad 各种控件默认高度
  • 原文地址:https://www.cnblogs.com/lvpengms/p/1690156.html
Copyright © 2011-2022 走看看