这篇连连看教程我尝试换一种方式,多讲一些算法思路和编程思想,少贴一些代码。
大家应该都玩过连连看,游戏规则不多说了,我们先看看设计思路。
第一件事要根据游戏玩法确定程序的数据结构,不同的数据结构决定了不同的算法设计,用错了数据结构可能直接让代码复杂好几倍。
连连看中玩家操作的数据是一个个的图片,多个图片组成一个棋盘式的矩阵界面。程序根据玩家的点击位置计算两个图片的连接路线,这要求程序以最快、最简单的方式获得矩阵中每个格子的数据。
用二维数组表示游戏中的矩阵界面比较合适,因为数组可以通过索引快速访问数据,二维数组的两个索引刚好对应矩阵界面的(x, y)坐标。例如:
图中矩阵数据在代码中应该这样表示:
可以用不同的数字代表不同的图片,比如:
那么上面的矩阵绘制的时候就会是这样:
0表示空格,不显示图片。初始化时的空格或消除后的空格,都会被设置为0。
接下来要初始化数据,我打算用8种不一样的图片,每种6张,随机放入矩阵中,矩阵最外一圈是空的。这个算法可以用标准库函数 std::random_shuffle 来完成。std::random_shuffle 用于把容器内的数据随机打乱,因此按顺序把数据放入数组中,然后调用 std::random_shuffle 就可以完成初始化。
断点运行观察数组数据,和我们设计的一样:
贴上图片看起来还不错:
现在来分析游戏玩法。这个游戏的难点是两个图片连接的判定算法,要求连接线只能转折两次。
我的第一反应这是一个寻路算法,要求找到转折两次以下的最短路径。教科书上常见的广度优先搜索、深度优先搜索、DijKstra算法或是游戏中常用的A星算法,稍作修改加上两次转折的限制都能解决这个问题。
但是如果我用这些比较复杂的算法来教新手,显然是在劝退。所以还是考虑找一找连线判定的算法有没有简单的规律。
多玩几次游戏,把不同种类的连线记录下来,总结后可以发现总共有3种连线类型,分别是不转折连接、转折一次和转折两次。
还是从最简单的情况开始考虑。这是解决难题的通用方法:从最简单的情况开始考虑,再逐步增加复杂的条件。
最简单的不转折连接,有两种情况,横向连线和纵向连线:
这两种情况很容易处理,横向、竖向依次检查每个格子是否被阻挡即可。
最后把这两个合并就是不转折的情况下:
转折一次:
转折一次的算法也是比较明显的,像上图中的两种情况,找到绿色点的位置,如果这个点可以不转折连到两个红色的图片,那么这两个红色的图片就可以通过一次转折连接。
绿点的位置是由两个红点决定的,只有上图中的两种可能。
转折两次的情况就多了,下图同样是连接红色图片,要绕过绿色图片。
转折两次的情况很多,这里无法一一列举,但是仔细思考可以发现和转折一次本质上是一样的,就是找到两个点,这两个点可以分别和红色图片无转折连接,并且这两个点也可以无转折连接。
这两个点需要位于经过红色图片的十字线上,并且只要确定一个了其中一个点,就能对应地找到另一个点:
因此只要遍历其中一个图片的两条十字线经过的所有的点,并计算出另一个图片十字线上对应点的位置,检查这两个点和两个红色图片是否可以无转折连接:
代码码完了,添上图片和鼠标检测的代码跑一跑试试。
右边显示临时显示字符用于测试连通性,多次测试没有问题。
最后加上连线,并清除被点击的两个格子,就完成了连连看的核心逻辑。你学会了吗?
本文TAG:经典连连看小游戏
- 上一篇: 天龙八部发布站(免费天龙八部信息发布)
- 下一篇: 传世冰雪打金单职业版_火魔龙窑_GOM引擎
猜你喜欢
- 2022-02-22英雄联盟隐藏分(英雄联盟隐藏分多少算正常)
- 2022-02-22矛盾找出骗子的简单介绍
- 2022-02-21太阁立志传4修改器(太阁立志传4贴吧)
- 2022-02-21儿童小游戏免费下载(儿童小游戏免费马上玩)
- 2022-02-21模拟人生2四季(模拟人生下载)
- 2022-02-20第三人称射击网游(第三人称单机射击游戏下载)
- 最近发表
- 标签列表
-
- 传奇手游私服 (7)
- 新开传奇手游网站 (7)
- 传奇单职业 (2)
- 传奇手游变态版 (1)
- 传奇发布网 (7)
- 传奇sf手游版 (1)
- 新开传奇 (1)
- 传奇私服 (1)
- 拳皇7k7k小游戏 (0)
- nitrome小游戏 (0)
- 最新传奇发布网 (0)
- 每日新开传奇网 (0)
- 找176复古传奇 (0)
- 超级变态热血传奇 (0)
- nba2k11最新名单 (0)
- 王者荣耀更新 (0)
- 王者荣耀体验服申请 (0)
- 英雄联盟出装顺序 (0)
- 三国志单机游戏 (0)
- 王者荣耀宫本武藏符文 (0)
- 梦幻西游109神器任务攻略 (0)
- 下载英雄联盟 (0)
- 机械公敌兰博出装 (0)
- 王者荣耀西施 (0)
- 王者荣耀无限火力 (0)
- 不知火舞王者荣耀 (0)
- 300英雄三笠出装 (0)
- 冒险岛2职业 (0)
- 龙将2官网 (0)
- 热血传奇怀旧版好玩吗 (0)
- 传奇超级 (0)
- 传奇师服 (0)
- 迷失传奇发布网 (0)
- 韩版传奇私服发布网 (0)
- 传世新开 (0)
- 传奇2外挂 (0)
- 传奇复古 (0)
- 单职业变态 (0)
- 传奇sf180 (0)
- 传世sf吧 (0)
- 传奇私服gm命令大全 (0)
- 传奇世界私服刷元宝 (0)
- dnf私服发布网 (0)
- 网页三国游戏排行榜 (0)
- 傲视千雄私服 (0)
- 热血传奇176客户端下载 (0)
- 最新机战私服 (0)
- 传奇吉吉免费版 (0)
- 蜘蛛纸牌游戏 (0)
- 最热门的网游排行榜 (0)
- 2d网游 (0)
- 网游私服排行榜 (0)
- moba网游 (0)
- 439小游戏 (0)
- 飞车小游戏 (0)
- 奥奇传说小游戏 (0)
- 龙斗士小游戏 (0)
- 下载手机游戏 (0)
- 维京神域之战 (0)
- 星际2单机 (0)
- 防守类单机游戏 (0)
- 灰烬攻略 (0)
- 战神3pc版 (0)
- 腐尸之屋 (0)
- 新神奇传说3秘籍 (0)
- 生化危机5怎么存档 (0)
- 三国群英传1单机版下载 (0)
- 捕鱼达人手机版 (0)
- 仙剑奇侠传游戏1 (0)
- 暴力摩托单机版下载 (0)
- fifa12下载 (0)
- 色单机游戏 (0)
- 三国志13修改器 (0)
- 梦幻西游单机版神剑情天3 (0)
- 对打单机游戏 (0)
- 三国群英传7补丁 (0)
- 最好单机游戏下载 (0)
- 流星蝴蝶剑秘籍大全 (0)
- 孢子 (0)
- 梦幻西游赚钱 (0)
- 梦幻西游答题 (0)
- 王者荣耀防沉迷 (0)
- 梦幻西游挖图技巧 (0)
- 梦幻岛游戏 (0)
- 轩辕剑网游官网 (0)
- 梦幻西游手游论坛 (0)
- 极道阴阳师 (0)
- 仙剑奇侠传3下载 (0)
- 七龙珠人物换装2 (0)
- 赛尔号手机版下载 (0)
- lol战队名字 (0)
- 黑湾海盗中文版 (0)
- 超级街霸4街机版 (0)
- 侵略行为 (0)
- 孤岛惊魂3结局 (0)
- 龙珠单机游戏大全 (0)
- 仙剑三游戏下载 (0)
- 策略单机游戏 (0)
- 家园2简体中文版 (0)
- 现代战争2 (0)