[JavaScript] 纯文本查看 复制代码//--------------------------------------------------------------------------------------------

//Ctrl.js 在线帮助:http://ikaiwei.com:8889/ctrljsapi/index.html

//Ctrl.js IDE脚本编写环境:http://ikaiwei.com:8889/ctrljs/#/login

//Ctrl.js 客户端app(开维控制精灵)下载:https://appstore.huawei.com/app/C100728387

//Ctrl.js 使用:登录IDE注册、下载app登录(打开无障碍)、编写代码后‘同步代码’到app、‘执行代码’

// 也可保存代码到云盘,即在‘我的脚本’下新建文件保存,app中查看‘我的代码’运行。

//Ctrl.js 打包:可将代码直接生成apk,点击‘我的打包’中的‘新增’,选择脚本‘保存’等待下载即可

//Ctrl.js 开维云控:远程控制手机:点击‘云控平台’,选择手机后‘打开此设备云控’,‘开始投屏’即可

//--------------------------------------------------------------------------------------------

// 脚本功能:快手小游戏-连连看

// 运行环境:华为手机,安卓9.0以上版本;Ctrl.jsV2.8;快手小游戏版本V3.8.6(版本需一致)

// 注意事项:1.确保‘快手小游戏’登录状态 2.无障碍功能打开

// 3.将kslianliankan目录放到手机SD卡根目录

init(); // 跳转“无障碍”选项,如果没有这个函数则默认不跳转。

var g_width = device.width();

var g_height = device.height();

var dir_name = "/sdcard/kslianliankan/";

function enterMainPage(appName){

if (!app.launchApp(appName))

throw '打开app失败,终止程序。';

sleep(5000);

}

var TAB_MAX_X=7;

var TAB_MAX_Y=10;

var gOffsetX = 48;

var gOffsetY = 667;

var gOneBlockSize = 142;

var gImgCap1;

var CHILD_IMG_NUM_MAX = 8;

var imgChild = new Array(CHILD_IMG_NUM_MAX);

var gMapTable = new Array();

for(i=0;i

gMapTable[i] = new Array(i);

for(var j=0;j

gMapTable[i][j]=0;

}

}

function getAimageValue(bigImg,x,y,w,h){

var i;

var p = null;

for(i=0;i

var rect = image.rect(x,y,w,h);

p = image.findImage(bigImg, imgChild[i], 0.9,rect);

if(p){

var ret = i+1;

return ret;

}else{

}

}

return -1;

}

function initChildImg(imgDir){

for(var i=1;i<=CHILD_IMG_NUM_MAX;i++){

imgChild[i-1] = image.read(imgDir + i + ".png");

if(imgChild[i-1] == null){

toast(imgDir + i + ".png 图片读取失败");

toast("结束");

}

}

}

function getImgTableValue(){

var i;

var j=0;

var x;

var y;

var imgVal = -1;

y = gOffsetY;

for(i=0;i

x = gOffsetX;

for(j=0; j

imgVal = getAimageValue(gImgCap1,x, y,gOneBlockSize,gOneBlockSize);

if(imgVal < 0){

toast("getAimageValue failed");

}

gMapTable[i][j] = imgVal;

x += gOneBlockSize;

}

y += gOneBlockSize;

}

}

function canConnect(x1,y1,x2,y2,r){

//两个方块是否可以连通函数

// 将传入的二维数组赋值给本地全局变量,

//result = r

// 如果有一个为0 直接返回-1;

if ((gMapTable[x1][y1] == 0) || (gMapTable[x2][y2] == 0)){

return -1;

}

if ((x1 == x2) && (y1 == y2) ){

return -1;

}

if (gMapTable[x1][y1] != gMapTable[x2][y2]){

return -1;

}

// 先判断横向可连通

if (horizontalCheck(x1,y1,x2,y2)==0){

return 0;

}

// 在判断纵向可连通

if (verticalCheck(x1,y1,x2,y2)==0){

return 0;

}

// 判断一个拐点的可连通情况

if (turnOnceCheck(x1,y1,x2,y2)==0){

return 0;

}

// 判断两个拐点的可连通情况

if (turnTwiceCheck(x1,y1,x2,y2)==0){

return 0;

}

// 都不可连通,返回-1;

return -1;

}

function horizontalCheck(x1,y1,x2,y2){

if ((x1 == x2) &&( y1 == y2 )){ //判断两个不是同一个方块

return -1;

}

if( x1 != x2){ //判断两个的纵坐标相同

return -1;

}

startY = Math.min(y1, y2);

endY = Math.max(y1, y2);

//判断两个方块是否相邻

if ( (endY - startY) == 1){

// log("horizontalCheck: block is near");

return 0;

}

//判断两个方块通路上是否都是0,有一个不是,就说明不能联通,返回-1

for(var i=startY+1; i

if (gMapTable[x1][i] != 0){

return -1;

}

}

//log("horizontalCheck: block's path is clean");

return 0;

}

function verticalCheck(x1,y1,x2,y2){

//判断垂直方向能否连通

//

//判断不是同一个方块

if ((x1 == x2) && (y1 == y2)){

return -1;

}

//判断两个横坐标相同

if (y1 != y2){

return -1;

}

startX = Math.min(x1, x2);

endX = Math.max(x1, x2);

//判断两个方块是否相邻

if ((endX - startX) == 1){

return 0;

}

//判断两方块儿通路上是否可连。

for(var i=startX+1; i

if (gMapTable[i][y1] != 0){

return -1;

}

}

return 0;

}

function turnOnceCheck(x1,y1,x2,y2){

//判断单拐点情况能否连通

//实现单拐点校验。

if ((x1 == x2) && (y1 == y2)){

return -1;

}

//一个拐点,说明两个方块必须在不同行不同列!

if ((x1 != x2) && (y1 != y2)){

//cx cy dx dy 记录两个拐点的坐标

cx = x1;

cy = y2;

dx = x2;

dy = y1;

//拐点为空,从第一个点到拐点并且从拐点到第二个点可通,则整条路可通。

if (gMapTable[cx][cy] == 0){

if ( (0==horizontalCheck(x1, y1, cx, cy)) && (0==verticalCheck(cx, cy, x2, y2))){

return 0;

}

}

if (gMapTable[dx][dy] == 0){

if ((0==verticalCheck(x1, y1, dx, dy)) && (0==horizontalCheck(dx, dy, x2, y2))){

return 0;

}

}

}

return -1;

}

function turnTwiceCheck(x1,y1,x2,y2){

//两个拐点的情况能否连通

if ((x1 == x2) && (y1 == y2)){

return -1;

}

//遍历整个数组找合适的拐点

for(var i=0; i

for(var j=0; j

//不为空不能作为拐点

if (gMapTable[i][j] != 0){

continue;

}

//不和被选方块在同一行列的

//不能作为拐点

if ( (i != x1) && (i != x2) && (j != y1) && (j != y2)){

continue;

}

//作为交点的部分也要过滤掉

if ((i == x1 && j == y2) || (i == x2 && j == y1)){

continue;

}

if ((0==turnOnceCheck(x1, y1, i, j)) && ((0==horizontalCheck(i, j, x2, y2)) || (0==verticalCheck(i, j, x2, y2)))){

return 0;

}

if ((0==turnOnceCheck(i, j, x2, y2)) && ((0==horizontalCheck(x1, y1, i, j)) || (0==verticalCheck(x1, y1, i, j)))){

return 0;

}

}

}

return -1;

}

var TIME_INTERVAL = 55;

var PRESS_TIME = 2; //80~150

// 自动消除

function autoRelease(game_x,game_y){

for(i=0;i

for(j=0;j

// 以上两个for循环,定位第一个选中点

if (gMapTable[i][j] != 0){

for(var m=0;m

for(var n=0;n

if (gMapTable[m][n] != 0){

// 后两个for循环定位第二个选中点

if (canConnect(i,j,m,n,gMapTable)==0){

// 执行消除算法并返回

//log("可连接点("+i+","+j+") ("+m+","+n+")");

gMapTable[i][j] = 0;

gMapTable[m][n] = 0;

x1 = game_x + j*gOneBlockSize + 15;

y1 = game_y + i*gOneBlockSize+ 18;

x2 = game_x + n*gOneBlockSize + 15;

y2 = game_y + m*gOneBlockSize + 18;

//toast("click"+x1 +"x"+y1);

cs.mousepress(x1, y1,PRESS_TIME);

sleep(TIME_INTERVAL);

//toast("click"+x2 +"x"+y2);

cs.mousepress(x2, y2 ,PRESS_TIME);

sleep(TIME_INTERVAL);

return 0;

}

}

}

}

}

}

}

return -1;

}

function autoRemove(){

for(var i=0;i<40;i++){

autoRelease(gOffsetX,gOffsetY);

}

while(0 != finishCheck()){

autoRelease(gOffsetX,gOffsetY);

}

}

function printTable(){

var tmpStr="\n[";

for(i=0;i

for(j=0;j

tmpStr = tmpStr + gMapTable[i][j] +" ";

}

tmpStr = tmpStr + "]\n["

}

toast(tmpStr+"]");

}

function finishCheck(){

for(i=0;i

for(j=0;j

if(0 != gMapTable[i][j]){

return -1;

}

}

}

return 0;

}

function mainEntrence(){

toast("手机分辨率是" + g_width + "x" + g_height);

autoShotScreen();

sleep(5000);

initChildImg(dir_name);

enterMainPage("快手小游戏");

click("连连看");

sleep(3000);

click("快速匹配");

while (true)

{

if (cs.id("com.kwai.sogame:id/tv_loading").find().size() != 0) {

break;

};

};

sleep(3000);

screenshots(dir_name + "cap1.png");

sleep(2000);

gImgCap1 = image.read(dir_name + "cap1.png");

if(gImgCap1 == null){

toast(dir_name + "cap1.png 读取失败");

};

sleep(2000);

getImgTableValue();

printTable();

toast("终于扫描完了,开始!");

autoRemove();

printTable();

toast("退出脚本");

};

mainEntrence();

多关卡连连看php源码_【Ctrl.js】快手小游戏-连连看源码相关推荐

  1. 开维控制精灵 Ctrl js 快手小游戏 - 自动消砖块

    开维控制精灵 Ctrl.js 快手小游戏 - 自动消砖块 Ctrl.js是基于js语法规则的控制类脚本语言,用于自动化软件测试. Ctrl.js 需要在手机上下载"开维控制精灵", ...

  2. 生鲜配送小程序源码_生鲜果蔬配送小程序开发源码

    生鲜蔬菜配送系统开发(谭可)生鲜蔬菜配送系统软件开发,生鲜蔬菜配送模式开发,生鲜蔬菜配送app开发,生鲜蔬菜配送系统平台开发,生鲜蔬菜配送app开发,生鲜蔬菜配送分销系统开发. 搭建一个生鲜蔬菜配送系 ...

  3. JavaScript | 益智类数字棋牌小游戏,无游戏框架,浏览器直接运行JavaScript(js)小游戏【源码+解析】

    游戏界面 曾几何时想有一款自己编写的游戏,通过不断学习,终于掌握了一点JavaScript基础,捣鼓了一个益智类的数字棋牌游戏,没有使用任何游戏框架,就简单使用HTML做布局,CSS做动画,JavaS ...

  4. 遥控汽车网页小游戏html源码

    这是一个网页小游戏源代码 你可以开着小汽车在整个地图中旅行 可撞墙.可鸣笛.自己发现吧 无聊时可以用它打消下无聊的时间 首页注释挺详细的,可自行修改 运行不成功注意文件引用的路径 路径 路径 快来下载 ...

  5. html实现扫雷小游戏(附源码)

    文章目录 实现功能 1.扫雷设计 1.1 主界面 1.2 扫雷难度 1.3 附带功能 2.效果和源码 2.1 动态效果 2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blo ...

  6. 星益小游戏平台源码 内置80多个在线小游戏

    简介: 星益小游戏平台源码是一款星益在线小游戏可的网站源码,本程序由小星合集整理制作,共计80个小游戏. 内置了80个在线小游戏,直接就能玩耍,上传到空间用! 本程序大部分都是自适应,但是使用电脑端体 ...

  7. 在线MG小游戏html5源码

    介绍: 源码很小,要求主机配置并不高,普通主机就可以搭建 内置 眼力测试,优雅跳一跳,像素小鸟,纸飞机,见缝插针,塔块游戏,都不能死,压扁小鸟,疯狂手指,无聊投篮,夹娃娃源码 拥有十多种种在线小游戏, ...

  8. python小游戏-16行代码实现3D撞球小游戏!-源码下载

    python小游戏-16行代码实现3D撞球小游戏!-源码下载 所属网站分类: 资源下载 > python小游戏 作者:搞笑 链接: http://www.pythonheidong.com/bl ...

  9. 微信网页小游戏网站源码带后台+可后台添加游戏+推荐到微信

    微信网页小游戏网站源码带后台,淘宝上卖的很火的源码,免费公开!

最新文章

  1. ASP.Net中自定义Http处理及应用之HttpModule篇
  2. 整理Silverlight资源列表(四)——Silverlight案例补充
  3. Matlab-重构和重新排列数组
  4. 微服务架构下分布式事务解决方案 —— 阿里GTS
  5. labview叠加白噪声_振荡器的相位噪声模型
  6. junit junit_JUnit理论简介
  7. 深入学习jQuery选择器系列第六篇——过滤选择器之状态选择器
  8. R学习之——R用于文本挖掘(tm包)
  9. 最担心的事情还是发生了!三星折叠屏手机翻车:闪屏、黑屏、“脱皮”
  10. nodejs生成动态网页
  11. windows10怎样关闭,开机启动项中不需要的应用?
  12. 怎么将py文件转成dll_怎样将PDF文件转成CAD图纸?
  13. Python渗透测试之网络嗅探与欺骗
  14. 《极限逃亡》12.3正式上线链游玩家|末日围城、文明重启
  15. 《Adobe Premiere Pro CS6中文版经典教程》——1.3 扩展工作流
  16. js是滚动条滑到固定位置_JavaScript 滚动条定位指定位置
  17. python使用selenium + PhantomJs搭建的简单漫画爬虫工具
  18. poi对word读取(文本和图片)、修改、保存操作及word转换为PDF
  19. python3爬虫系列16之多线程爬取汽车之家批量下载图片
  20. FreeType之字形分析(一)

热门文章

  1. python 中文变量名_大疆机甲大师Python开发: 中文命名变量初尝试
  2. 一般时序电路设计(次态卡诺图化简法)
  3. 教你剪辑调整视频亮度、饱和度,一个视频调整出不同画面颜色
  4. 排序:ORDER BY
  5. 关于构造和二进制,题目:牛牛的DRB迷宫Ⅱ(源自牛客竞赛2020年寒假集训)
  6. 面试-android
  7. 双目立体匹配修炼之路
  8. Python 分批次处理数据示例
  9. 台式计算机无线网络连接打印机,台式机怎么样连接无线打印机
  10. 基于闪存存储原理的U盘数据安全测试和U盘数据保护软件