autojs连连看脚本可视化
牙叔教程 简单易懂
我用autojs写了一个连连看app, 然后我又写了一个连连看脚本,
效果展示
下面来看看连连看脚本的制作思路
采集画面原始信息
- 游戏区域的左上角和右下角坐标
- 游戏的行列的数量
- 格子的原始图片
调整数据结构
我把小小的格子定义为一个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连连看脚本可视化相关推荐
- python可以怎么玩_这波太炸了!Python脚本可视化居然可以这么玩!
如同艺术家们用绘画让人们更贴切的感知世界,数据可视化也能让人们更直观的传递数据所要表达的信息.你知道Python脚本可视化有多好看么?就像下图这样,是不是感觉十分高端大气上档次: 以上示例都是通过Ry ...
- autojs写脚本:天启app脚本源码
autojs写脚本:天启app脚本源码 个人保存而已. 源码中涉及到广告关闭.控件点击等函数.自己使用的. 需要的话需付费.不免费. 如果真有心,想学,源码中的编写脚本的逻辑等完全够用. var 日常 ...
- python分析彩票数据,这波太炸了!Python脚本可视化居然可以这么玩
如同艺术家们用绘画让人们更贴切的感知世界,数据可视化也能让人们更直观的传递数据所要表达的信息.你知道Python脚本可视化有多好看么?就像下图这样,是不是感觉十分高端大气上档次: 以上示例都是通过Ry ...
- Python制作连连看脚本工具,全程自动,不需要你动,简直太爽了
最近女朋友在玩连连看,玩了一个星期了还没通关,真的是菜. 我实在是看不过去了,直接用python写了个脚本代码,一分钟一把游戏. 快是快,就是联网玩容易被骂,嘿嘿~ 直接上代码 模块导入 import ...
- autojs自动化脚本怎么在电脑上开发, 详细的靠谱教程!!!
autojs是安卓上一款类似按键精灵的无障碍服务软件. 手机安装上他后可以在手机上编写自动化脚本,但是手机码字写代码毋庸置疑是 巨慢的, 不过好在有一款vscode插件, 让你可以将电脑写好脚本后直接 ...
- Unity3D脚本:Unity制作连连看脚本
Unity3D教程:Unity制作连连看教程 GameManager.cs 游戏的核心代码,产生图片,判断是否可以销毁等. [color=#008ef1][font=宋体]using UnityEn ...
- [shell脚本]可视化输出表格数据
image.png 最终效果 1. 自定义表格样式 image.png 2. 自定义主题颜色 支持三系普通颜色 支持16色彩虹色 支持单颜色 回顾一下shell语法 1. shell传递参数 我们可以 ...
- android autojs 群控 脚本,autojs开发群控需要用到的服务器通信协议websocket例子
说明 本文提供的代码仅供参考.不建议用于生产环境.可能有些地方在最新版本的Auto.js上面需要做修改,才能运行. Auto.js简介 Auto.js是利用安卓系统的"辅助功能"实 ...
- autojs写脚本:星辰大海脚本源码
个人保存而已. 源码中涉及到广告关闭.控件点击等函数.自己使用的. 需要的话需付费.不免费. 如果真有心,想学,源码中的编写脚本的逻辑等完全够用. while (true) {try {控件点击(id ...
- autojs之悬浮窗按钮暂停脚本~一种很笨的方法,但是可以实现暂停脚本的功能
一种 很简单很笨很低级的 悬浮窗按钮暂停脚本 的方法 文章目录 先看效果 一.悬浮窗 二.代码 1.悬浮窗设置 2.按钮点击 3.脚本暂停运行 控制检测函数 4.主线程 三.完整代码 总结 先看效果 ...
最新文章
- Oracle查看用户权限
- 安卓四大组件之Service
- 项目管理基础培训分享
- Python3 编程示例:斐波纳契数列
- Web框架之Django_04 模板层了解(过滤器、标签、自定义过滤器、标签、inclusion_tag、模板的继承与导入)
- ywy_c_asm题
- 数据挖掘学习指南!!
- android tag 快捷_Android Studio快捷键使用
- mysql数据存储过程详解_mysql数据存储过程参数实例详解
- Halcon PDF文档(hdevelop_users_guide)学习总结之二——创建新算子
- 前端学习白嫖-QQ音乐
- 电视从u盘启动linux系统软件,自己制作从USB启动LINUX系统的方法
- [CF855G]Harry Vs Voldemort
- 基于 NCNN 的 Chinese-Lite 模型测试
- Axure 实现问卷调查(带计时器功能)
- 《NFL橄榄球》:田纳西泰坦·橄榄1号位
- 【Python】Decision on buying cars COROLLA or LEVIN(数据分析技术实现过程之·2 data_analysis①)
- 抓虾 — Bloglines Plus
- IDEA常用操作总结(长期更新)
- python 复制dict_Python高级数据类型之字典、集合【明哥陪你学Python-六】