微信小程序:元宵灯笼连连看小游戏

2023-10-13 01:38

本文主要是介绍微信小程序:元宵灯笼连连看小游戏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

20180301 by 慕容秋

写在前面

前些天闲聊中跟家里的领导说,微信也可以做小游戏诶。然后她说,那你做个连连看游戏给我玩玩呗。再然后就有了这几天的摸索和下面的一些小结:

演示效果: http://link.muroqiu.com

源码地址: https://gitee.com/muroqiu/LinkUp


开发工具:

  • Cocos Creator v1.8.1
  • Visual Studio Code 1.20.1
  • Adob illustrator CC 2018
  • 微信开发者工具 1.02.1802270

主要的工作是在Cocos Creator和Visual Studio Code里完成的,illustrator CC 用来资源切图,微信开发者工具是最后打包微信小游戏用到;Cocos Creator对微信小游戏的支持已经很到位了,游戏写好后只要在构建时选择发布平台为Wechat Game就好。

目前微信还未开放小游戏注册与上架,只能用开发者的微信测试体验。好在Cocos Creator跨平台发布很方便,构建了个Web Mobile版本,发布到服务器上,大家有兴趣就一起可以体验咯^_^

主要的逻辑:

A、洗牌 shuffle:遍历图片数组,取1个随机位置的图片和当前位置交换;

B、用一个二维数组(各个方向均比图片数组大1)保存图片的状态值,搜索路径时映射到这个数组搜索;

C、搜索顺序:

  • 1、同一条直线:判断直线间有无图片;
  • 2、有一个拐角:先定位出两个拐角点,若拐角点没有图片,再转换成一条直线的情况继续处理;
  • 3、两个拐角:某个方向移动,若到达点没有图片,再转换成一个拐角的情况继续处理;若到达点有图片,此方向不再继续搜索;
/*** 直连*/matchBlockLine: function (x1, y1, x2, y2) {// cc.warn('matchBlock  ' + x1 + ', ' + y1 + '  : ' + x2 + ', ' + y2); if (x1 != x2 && y1 != y2) {return false;}if (x1 == x2) {// 同一列 if (x1 < 0 || x1 >= this.rows) {return true;}var Ymin = Math.min(y1, y2) + 1;var Ymax = Math.max(y1, y2);for (Ymin; Ymin < Ymax; Ymin++) {if (this._canvasGrids[x1 + 1][Ymin + 1] > this._TYPE_INIT) {return false;}}} else if (y1 == y2) {// 同一行 if (y1 < 0 || y1 >= this.columns) {return true;}var Xmin = Math.min(x1, x2) + 1;var Xmax = Math.max(x1, x2);for (Xmin; Xmin < Xmax; Xmin++) {if (this._canvasGrids[Xmin + 1][y1 + 1] > this._TYPE_INIT) {return false;}}}return true;},


/*** 一个转角* 搜索到路径时,返回转角坐标 x3, y3*/matchBlockCorner: function (x1, y1, x2, y2, isAxis_X) {// cc.warn('matchBlockCorner  ' + x1 + ', ' + y1 + '  : ' + x2 + ', ' + y2); var result;// 直连的返回 if (x1 == x2 || y1 == y2) {return null;}// 转角点1 (x1, y2),Y方向 if (this._canvasGrids[x1 + 1][y2 + 1] <= this._TYPE_INIT && isAxis_X != false) {result = this.matchBlockCorner_point(x1, y1, x2, y2, x1, y2);if (result) {return result;}}// 转角点2 (x2, y1),X方向 if (this._canvasGrids[x2 + 1][y1 + 1] <= this._TYPE_INIT && isAxis_X != true) {result = this.matchBlockCorner_point(x1, y1, x2, y2, x2, y1);if (result) {return result;}}return null;},/*** 转角逻辑*/matchBlockCorner_point: function (x1, y1, x2, y2, x3, y3) {var stMatch = this.matchBlockLine(x1, y1, x3, y3);if (stMatch) {var tdMatch = this.matchBlockLine(x3, y3, x2, y2);if (tdMatch) {return [x3, y3];}}return null;},
/*** 两个转角* 由中心往外展开搜索路径,某个方向当碰到有图片时,这个方向就不再继续搜索* 搜索到路径时,返回两个转角点坐标 x3, y3, x4, y4*/matchBlockUnfold: function (x1, y1, x2, y2) {var result;var x3 = 0;var y3 = 0;var canUp = true;var canDown = true;var canLeft = true;var canRight = true;// cc.warn('matchBlockUnfold  ' + x1 + ', ' + y1 + '  : ' + x2 + ', ' + y2); for (var i = 1; i < this.rows; i++) {// 上x3 = x1;y3 = y1 + i;if (canUp && y3 <= this.columns) {canUp = this._canvasGrids[x3 + 1][y3 + 1] <= this._TYPE_INIT;result = this.matchBlockUnfold_axis(x1, y1, x2, y2, x3, y3, false);if (result) {return result;}}// 下x3 = x1;y3 = y1 - i;if (canDown && y3 >= -1) {canDown = this._canvasGrids[x3 + 1][y3 + 1] <= this._TYPE_INIT;result = this.matchBlockUnfold_axis(x1, y1, x2, y2, x3, y3, false);if (result) {return result;}}// 左x3 = x1 - i;y3 = y1;if (canLeft && x3 >= -1) {canLeft = this._canvasGrids[x3 + 1][y3 + 1] <= this._TYPE_INIT;result = this.matchBlockUnfold_axis(x1, y1, x2, y2, x3, y3, true);if (result) {return result;}}// 右x3 = x1 + i;y3 = y1;if (canRight && x3 <= this.rows) {canRight = this._canvasGrids[x3 + 1][y3 + 1] <= this._TYPE_INIT;result = this.matchBlockUnfold_axis(x1, y1, x2, y2, x3, y3, true);if (result) {return result;}}}return null;},/*** 某个方向上的搜索逻辑*/matchBlockUnfold_axis: function (x1, y1, x2, y2, x3, y3, isAxis_X) {// cc.warn("matchBlockUnfold_axis  " + x3 + ', ' + y3); var tmpXY = [];if (this._canvasGrids[x3 + 1][y3 + 1] <= this._TYPE_INIT) {tmpXY = this.matchBlockCorner(x3, y3, x2, y2, isAxis_X);if (tmpXY) {return [x3, y3].concat(tmpXY);;}}return null;},

参考资料

  • http://blog.csdn.net/artzok/article/details/51622782


作者:汀江秋雨
链接:jianshu.com/p/740603fc6
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
开启赞赏

这篇关于微信小程序:元宵灯笼连连看小游戏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/199850

相关文章

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

python编写朋克风格的天气查询程序

《python编写朋克风格的天气查询程序》这篇文章主要为大家详细介绍了一个基于Python的桌面应用程序,使用了tkinter库来创建图形用户界面并通过requests库调用Open-MeteoAPI... 目录工具介绍工具使用说明python脚本内容如何运行脚本工具介绍这个天气查询工具是一个基于 Pyt

Ubuntu设置程序开机自启动的操作步骤

《Ubuntu设置程序开机自启动的操作步骤》在部署程序到边缘端时,我们总希望可以通电即启动我们写好的程序,本篇博客用以记录如何在ubuntu开机执行某条命令或者某个可执行程序,需要的朋友可以参考下... 目录1、概述2、图形界面设置3、设置为Systemd服务1、概述测试环境:Ubuntu22.04 带图

Python程序打包exe,单文件和多文件方式

《Python程序打包exe,单文件和多文件方式》:本文主要介绍Python程序打包exe,单文件和多文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python 脚本打成exe文件安装Pyinstaller准备一个ico图标打包方式一(适用于文件较少的程

Python程序的文件头部声明小结

《Python程序的文件头部声明小结》在Python文件的顶部声明编码通常是必须的,尤其是在处理非ASCII字符时,下面就来介绍一下两种头部文件声明,具有一定的参考价值,感兴趣的可以了解一下... 目录一、# coding=utf-8二、#!/usr/bin/env python三、运行Python程序四、

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示

Redis迷你版微信抢红包实战

《Redis迷你版微信抢红包实战》本文主要介绍了Redis迷你版微信抢红包实战... 目录1 思路分析1.1hCckRX 流程1.2 注意点①拆红包:二倍均值算法②发红包:list③抢红包&记录:hset2 代码实现2.1 拆红包splitRedPacket2.2 发红包sendRedPacket2.3 抢

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

SpringBoot后端实现小程序微信登录功能实现

《SpringBoot后端实现小程序微信登录功能实现》微信小程序登录是开发者通过微信提供的身份验证机制,获取用户唯一标识(openid)和会话密钥(session_key)的过程,这篇文章给大家介绍S... 目录SpringBoot实现微信小程序登录简介SpringBoot后端实现微信登录SpringBoo

uniapp小程序中实现无缝衔接滚动效果代码示例

《uniapp小程序中实现无缝衔接滚动效果代码示例》:本文主要介绍uniapp小程序中实现无缝衔接滚动效果的相关资料,该方法可以实现滚动内容中字的不同的颜色更改,并且可以根据需要进行艺术化更改和自... 组件滚动通知只能实现简单的滚动效果,不能实现滚动内容中的字进行不同颜色的更改,下面实现一个无缝衔接的滚动