1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 多关卡连连看php源码_【Ctrl.js】快手小游戏-连连看源码

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

时间:2018-07-28 05:54:31

相关推荐

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

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

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

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

//Ctrl.js 客户端app(开维控制精灵)下载:/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();

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。