多关卡连连看php源码_【Ctrl.js】快手小游戏-连连看源码
[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】快手小游戏-连连看源码相关推荐
- 开维控制精灵 Ctrl js 快手小游戏 - 自动消砖块
开维控制精灵 Ctrl.js 快手小游戏 - 自动消砖块 Ctrl.js是基于js语法规则的控制类脚本语言,用于自动化软件测试. Ctrl.js 需要在手机上下载"开维控制精灵", ...
- 生鲜配送小程序源码_生鲜果蔬配送小程序开发源码
生鲜蔬菜配送系统开发(谭可)生鲜蔬菜配送系统软件开发,生鲜蔬菜配送模式开发,生鲜蔬菜配送app开发,生鲜蔬菜配送系统平台开发,生鲜蔬菜配送app开发,生鲜蔬菜配送分销系统开发. 搭建一个生鲜蔬菜配送系 ...
- JavaScript | 益智类数字棋牌小游戏,无游戏框架,浏览器直接运行JavaScript(js)小游戏【源码+解析】
游戏界面 曾几何时想有一款自己编写的游戏,通过不断学习,终于掌握了一点JavaScript基础,捣鼓了一个益智类的数字棋牌游戏,没有使用任何游戏框架,就简单使用HTML做布局,CSS做动画,JavaS ...
- 遥控汽车网页小游戏html源码
这是一个网页小游戏源代码 你可以开着小汽车在整个地图中旅行 可撞墙.可鸣笛.自己发现吧 无聊时可以用它打消下无聊的时间 首页注释挺详细的,可自行修改 运行不成功注意文件引用的路径 路径 路径 快来下载 ...
- html实现扫雷小游戏(附源码)
文章目录 实现功能 1.扫雷设计 1.1 主界面 1.2 扫雷难度 1.3 附带功能 2.效果和源码 2.1 动态效果 2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blo ...
- 星益小游戏平台源码 内置80多个在线小游戏
简介: 星益小游戏平台源码是一款星益在线小游戏可的网站源码,本程序由小星合集整理制作,共计80个小游戏. 内置了80个在线小游戏,直接就能玩耍,上传到空间用! 本程序大部分都是自适应,但是使用电脑端体 ...
- 在线MG小游戏html5源码
介绍: 源码很小,要求主机配置并不高,普通主机就可以搭建 内置 眼力测试,优雅跳一跳,像素小鸟,纸飞机,见缝插针,塔块游戏,都不能死,压扁小鸟,疯狂手指,无聊投篮,夹娃娃源码 拥有十多种种在线小游戏, ...
- python小游戏-16行代码实现3D撞球小游戏!-源码下载
python小游戏-16行代码实现3D撞球小游戏!-源码下载 所属网站分类: 资源下载 > python小游戏 作者:搞笑 链接: http://www.pythonheidong.com/bl ...
- 微信网页小游戏网站源码带后台+可后台添加游戏+推荐到微信
微信网页小游戏网站源码带后台,淘宝上卖的很火的源码,免费公开!
最新文章
- ASP.Net中自定义Http处理及应用之HttpModule篇
- 整理Silverlight资源列表(四)——Silverlight案例补充
- Matlab-重构和重新排列数组
- 微服务架构下分布式事务解决方案 —— 阿里GTS
- labview叠加白噪声_振荡器的相位噪声模型
- junit junit_JUnit理论简介
- 深入学习jQuery选择器系列第六篇——过滤选择器之状态选择器
- R学习之——R用于文本挖掘(tm包)
- 最担心的事情还是发生了!三星折叠屏手机翻车:闪屏、黑屏、“脱皮”
- nodejs生成动态网页
- windows10怎样关闭,开机启动项中不需要的应用?
- 怎么将py文件转成dll_怎样将PDF文件转成CAD图纸?
- Python渗透测试之网络嗅探与欺骗
- 《极限逃亡》12.3正式上线链游玩家|末日围城、文明重启
- 《Adobe Premiere Pro CS6中文版经典教程》——1.3 扩展工作流
- js是滚动条滑到固定位置_JavaScript 滚动条定位指定位置
- python使用selenium + PhantomJs搭建的简单漫画爬虫工具
- poi对word读取(文本和图片)、修改、保存操作及word转换为PDF
- python3爬虫系列16之多线程爬取汽车之家批量下载图片
- FreeType之字形分析(一)