牙叔教程 简单易懂

我用autojs写了一个连连看app, 然后我又写了一个连连看脚本,

效果展示

下面来看看连连看脚本的制作思路

采集画面原始信息

  1. 游戏区域的左上角和右下角坐标
  2. 游戏的行列的数量
  3. 格子的原始图片

调整数据结构

我把小小的格子定义为一个Cell类, 然后所有属性都挂到他上面, 方便调用

function Cell(row, column) {this.row = row;this.column = column;this.state = Cell.state.NORMAL;this.width = 0;this.height = 0;this.centerX = 0;this.centerY = 0;this.left = 0;this.top = 0;this.right = 0;this.bottom = 0;this.canvas = null;this.number = null;this.originalImg = null;this.img = null;this.paint = paint;
}

判断格子是否连通

这个是该教程的重点, 网上已经有很多的方法了, 大家可以博采众长, 然后写出自己的脚本.

下面来看看这个脚本是怎么判断的

连通类别我分为三种

图形化展示三种连通分类

第一种: 两个格子紧挨着

第二种: 一个格子周围的空格和另一个格子周围的空格有交集

第三种:
一个格子周围的空格集合A,

另一个格子周围的空格集合B,

集合B周围的空格集合C,

集合A和集合C有交集

几个小问题

1 怎么判断格子是不是空的

Celll有一个属性originalImg, 保存的是游戏刚开始格子里面的图片,

截图以后, 拿当前的图片和原始图片做对比, 不一样的话, 就是格子就是空的

2 怎么判断两个格子图片是不是一样的

我用的是多点比色, 在一张图中取多个点的颜色数据, 然后去另一张图中找;

能找到符合条件的多个点, 就说明两张图一样.

function isSameTwoImg(img1, img2) {// 在图中间找固定数量的点, 然后去大图里面多点找色let colorDataList = getColorDataList(img1);// [图片与颜色 - Images](https://pro.autojs.org/docs/#/zh-cn/images?id=imagesfindmulticolorsimg-firstcolor-colors-options)let firstColor = colorDataList[0][2];let colors = colorDataList.slice(1);try {let p = images.findMultiColors(img2, firstColor, colors);return p;} catch (error) {log("error", error);}
}
function getColorDataList(img) {let count = 25;let row = Math.sqrt(count);let column = Math.sqrt(count);let padding = 10;let width = img.getWidth();let height = img.getHeight();let contentWidth = width - padding * 2;let contentHeight = height - padding * 2;let unitWidth = contentWidth / (row - 1);let unitHeight = contentHeight / (column - 1);let colorDataList = [];let rowIndex = 0;let columnIndex = 0;let firstPoint;for (let i = 0; i < count; i++) {let x = padding + unitWidth * rowIndex;let y = padding + unitHeight * columnIndex;if (i === 0) {firstPoint = {x: x,y: y,};}let color = images.pixel(img, x, y);let relativeX = x - firstPoint.x;let relativeY = y - firstPoint.y;colorDataList.push([relativeX, relativeY, color]);rowIndex++;if (rowIndex === row) {rowIndex = 0;columnIndex++;}}return colorDataList;
}

3 调试脚本怎样可视化

调试的时候, 我会增加一个悬浮窗, 在符合条件的格子上方涂上颜色

Cell.prototype.renderDebug = function (color) {color = color || "#33f44336";paint.setColor(colors.parseColor(color));paint.setStrokeWidth(1);// paint.setStyle(Paint.Style.STROKE);paint.setStyle(Paint.Style.FILL);paint.setXfermode(null);let left = this.left;let top = this.top;let right = this.right;let bottom = this.bottom;let rect = new RectF(left, top, right, bottom);this.canvas.drawRect(rect, paint);// this.canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
};
function renderTwoCell(emptyCell, currentCell, cellList) {let emptyCellRow = emptyCell.row;let emptyCellColumn = emptyCell.column;let currentCellRow = currentCell.row;let currentCellColumn = currentCell.column;if (emptyCellRow === currentCellRow) {if (emptyCellColumn < currentCellColumn) {let len = currentCellColumn - emptyCellColumn;for (let i = 0; i < len; i++) {let cell = cellList[emptyCellRow][emptyCellColumn + i];cell.renderDebug();}} else {let len = emptyCellColumn - currentCellColumn;for (let i = 0; i < len; i++) {let cell = cellList[emptyCellRow][emptyCellColumn - i];cell.renderDebug();}}} else if (emptyCellColumn === currentCellColumn) {if (emptyCellRow < currentCellRow) {let len = currentCellRow - emptyCellRow;for (let i = 0; i < len; i++) {let cell = cellList[emptyCellRow + i][emptyCellColumn];cell.renderDebug();}} else {let len = emptyCellRow - currentCellRow;for (let i = 0; i < len; i++) {let cell = cellList[emptyCellRow - i][emptyCellColumn];cell.renderDebug();}}}
}

也可以打印格子的状态

function printCellData(cellList) {let str = "";for (var i = 0; i < cellList.length; i++) {let cellRow = cellList[i];for (var j = 0; j < cellRow.length; j++) {let cell = cellRow[j];str += cell.isEmpty() ? "X" : "O";}str += "\n";}
}
XOOOOXOX
XOOOOXOX
XOOOOXXX
XOOOOXXX
XOOOOOOX
XOOOOOOX
XXXXXXXX

4 autojs8和9模块导出格式不一样

autojs8

module.exports = {viewImg: viewImg,isSameTwoImg: isSameTwoImg,
};

autojs9

module.exports = {viewImg,isSameTwoImg,
};

备注

如果你要使用脚本的话, 你要修改config.js里面的

left, top, right, bottom

因为手机不一样, 游戏的显示区域就不一样

环境

手机: Mi 11 Pro

Android版本: 12

Autojs版本: 9.1.3

名人名言

思路是最重要的, 其他的百度, bing, stackoverflow, github, 安卓文档, autojs文档, 最后才是群里问问
— 牙叔教程

声明

部分内容来自网络
本教程仅用于学习, 禁止用于其他用途

bilibili

牙叔教程

微信公众号 牙叔教程

QQ群

747748653

完整源码

autojs连连看脚本可视化相关推荐

  1. python可以怎么玩_这波太炸了!Python脚本可视化居然可以这么玩!

    如同艺术家们用绘画让人们更贴切的感知世界,数据可视化也能让人们更直观的传递数据所要表达的信息.你知道Python脚本可视化有多好看么?就像下图这样,是不是感觉十分高端大气上档次: 以上示例都是通过Ry ...

  2. autojs写脚本:天启app脚本源码

    autojs写脚本:天启app脚本源码 个人保存而已. 源码中涉及到广告关闭.控件点击等函数.自己使用的. 需要的话需付费.不免费. 如果真有心,想学,源码中的编写脚本的逻辑等完全够用. var 日常 ...

  3. python分析彩票数据,这波太炸了!Python脚本可视化居然可以这么玩

    如同艺术家们用绘画让人们更贴切的感知世界,数据可视化也能让人们更直观的传递数据所要表达的信息.你知道Python脚本可视化有多好看么?就像下图这样,是不是感觉十分高端大气上档次: 以上示例都是通过Ry ...

  4. Python制作连连看脚本工具,全程自动,不需要你动,简直太爽了

    最近女朋友在玩连连看,玩了一个星期了还没通关,真的是菜. 我实在是看不过去了,直接用python写了个脚本代码,一分钟一把游戏. 快是快,就是联网玩容易被骂,嘿嘿~ 直接上代码 模块导入 import ...

  5. autojs自动化脚本怎么在电脑上开发, 详细的靠谱教程!!!

    autojs是安卓上一款类似按键精灵的无障碍服务软件. 手机安装上他后可以在手机上编写自动化脚本,但是手机码字写代码毋庸置疑是 巨慢的, 不过好在有一款vscode插件, 让你可以将电脑写好脚本后直接 ...

  6. Unity3D脚本:Unity制作连连看脚本

    Unity3D教程:Unity制作连连看教程 GameManager.cs  游戏的核心代码,产生图片,判断是否可以销毁等. [color=#008ef1][font=宋体]using UnityEn ...

  7. [shell脚本]可视化输出表格数据

    image.png 最终效果 1. 自定义表格样式 image.png 2. 自定义主题颜色 支持三系普通颜色 支持16色彩虹色 支持单颜色 回顾一下shell语法 1. shell传递参数 我们可以 ...

  8. android autojs 群控 脚本,autojs开发群控需要用到的服务器通信协议websocket例子

    说明 本文提供的代码仅供参考.不建议用于生产环境.可能有些地方在最新版本的Auto.js上面需要做修改,才能运行. Auto.js简介 Auto.js是利用安卓系统的"辅助功能"实 ...

  9. autojs写脚本:星辰大海脚本源码

    个人保存而已. 源码中涉及到广告关闭.控件点击等函数.自己使用的. 需要的话需付费.不免费. 如果真有心,想学,源码中的编写脚本的逻辑等完全够用. while (true) {try {控件点击(id ...

  10. autojs之悬浮窗按钮暂停脚本~一种很笨的方法,但是可以实现暂停脚本的功能

    一种 很简单很笨很低级的 悬浮窗按钮暂停脚本 的方法 文章目录 先看效果 一.悬浮窗 二.代码 1.悬浮窗设置 2.按钮点击 3.脚本暂停运行 控制检测函数 4.主线程 三.完整代码 总结 先看效果 ...

最新文章

  1. Oracle查看用户权限
  2. 安卓四大组件之Service
  3. 项目管理基础培训分享
  4. Python3 编程示例:斐波纳契数列
  5. Web框架之Django_04 模板层了解(过滤器、标签、自定义过滤器、标签、inclusion_tag、模板的继承与导入)
  6. ywy_c_asm题
  7. 数据挖掘学习指南!!
  8. android tag 快捷_Android Studio快捷键使用
  9. mysql数据存储过程详解_mysql数据存储过程参数实例详解
  10. Halcon PDF文档(hdevelop_users_guide)学习总结之二——创建新算子
  11. 前端学习白嫖-QQ音乐
  12. 电视从u盘启动linux系统软件,自己制作从USB启动LINUX系统的方法
  13. [CF855G]Harry Vs Voldemort
  14. 基于 NCNN 的 Chinese-Lite 模型测试
  15. Axure 实现问卷调查(带计时器功能)
  16. 《NFL橄榄球》:田纳西泰坦·橄榄1号位
  17. 【Python】Decision on buying cars COROLLA or LEVIN(数据分析技术实现过程之·2 data_analysis①)
  18. 抓虾 — Bloglines Plus
  19. IDEA常用操作总结(长期更新)
  20. python 复制dict_Python高级数据类型之字典、集合【明哥陪你学Python-六】

热门文章

  1. QCC3040---Media Player module
  2. 位置不可用无法访问介质受写入保护怎样解决?
  3. 蔬菜出口流程 |外贸流程
  4. Oracle以甲乙丙丁来排列
  5. OneHotEncoder简单用法
  6. on one's own用法
  7. matlab的omega0是什么,ABO设定中,A具体是怎么标记O的?
  8. win8计算机无法安装打印机驱动,如果Win8计算机打印机驱动程序安装失败,该怎么办...
  9. 手机图片转换成文字怎么办
  10. 如何免费的把 PDF 转换为 Word文档?