本文实例为大家分享了php微信跳一跳的具体代码,供大家参考,具体内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
<?php require 'config.php' ; function similar( $rgb1 , $rgb2 ) { $r1 = ( $rgb1 >> 16) & 0xFF; $g1 = ( $rgb1 >> 8) & 0xFF; $b1 = $rgb1 & 0xFF; $r2 = ( $rgb2 >> 16) & 0xFF; $g2 = ( $rgb2 >> 8) & 0xFF; $b2 = $rgb2 & 0xFF; return abs ( $r1 - $r2 ) < 10 && abs ( $b1 - $b2 ) < 10 && abs ( $g1 - $g2 ) < 10; } function getStart() { global $image ; $width = imagesx( $image ); $height = imagesy( $image ); for ( $i = $height / 3; $i < $height / 3 * 2; $i ++) { for ( $j = 0; $j < $width - 75; $j ++) { if (checkStart( $i , $j )) { $x = $i ; $y = $j + 37; } } } return array ( $x , $y ); } function getEnd() { global $image ; global $sx , $sy ; $l_r = 0; $cnt = 0; $width = imagesx( $image ); $height = imagesy( $image ); for ( $i = $height / 3; $i < $sx ; $i ++) { $demo = imagecolorat( $image , 0, $i ); for ( $l = 0; $l < $width ; $l ++) { $c = imagecolorat( $image , $l , $i ); if (!similar( $c , $demo )) { $r = $l ; while ( $r +1 < $width && !similar(imagecolorat( $image , $r +1, $i ), $demo )){ $r ++; } if ( abs (( $l + $r ) / 2 - $sy ) > 20) { if (!isset( $mid )) $mid = ( $l + $r ) / 2; if ( $r - $l > BODY_WIDTH * 1.1){ if ( $r <= $l_r ) { $cnt ++; if ( $cnt == 3) { return [ $i , round ( $mid )]; } } else { $cnt = 0; } $l_r = $r ; } } $l = $r ; } } } return [ $sx - round ( abs ( $mid - $sy )/sqrt(3)), round ( $mid )];; } $cheet = [ 2829129, 2829129, 2829129, 2829129, 2829387, 2960716, 2960461, 2960463, 3026256, 3026256, 3092563, 3092563, 3158614, 3158615, 3224408, 3290202, 3356252, 3356252, 3356252, 3356767, 3357024, 3553376, 3618913, 3618913, 3553891, 3684707, 3750243, 3684706, 3684707, 3684707, 3684707, 3750243, 3618914, 3618913, 3684450, 3750243, 3750243, 3750243, 3750243, 3750243, 3684706, 3618913, 3618913, 3618913, 3684450, 3684706, 3684706, 3684450, 3684450, 3750243, 3750243, 3684450, 3684706, 3750243, 3618913, 3618913, 3618913, 3684448, 3749727, 3749727, 3749727, 3749727, 3749727, 3749470, 3749469, 3749469, 3749721, 3749720, 3749720, 3814998, 3814997, 3880534, 3880533, 3946835, 3881042 ]; function checkStart( $sx , $sy ) { global $cheet ; global $image ; for ( $i = 0; $i < 75; $i ++) { $rgb = imagecolorat( $image , $sy + $i , $sx ); if (!similar( $rgb , $cheet [ $i ])) { return false; } } return true; } function screencap() { ob_start(); system( 'adb shell screencap -p /sdcard/screen.png' ); system( 'adb pull /sdcard/screen.png .' ); ob_end_clean(); } function press( $time ) { system( 'adb shell input swipe 500 1600 500 1601 ' . $time ); } for ( $id = 0; ; $id ++) { echo sprintf( "#%05d: " , $id ); // 截图 screencap(); // 获取坐标 $image = imagecreatefrompng( 'screen.png' ); list( $sx , $sy ) = getStart(); list( $tx , $ty ) = getEnd(); if ( $sx == 0) break ; echo sprintf( "(%d, %d) -> (%d, %d) " , $sx , $sy , $tx , $ty ); // 图像描点 imagefilledellipse( $image , $sy , $sx , 10, 10, 0xFF0000); imagefilledellipse( $image , $ty , $tx , 10, 10, 0xFF0000); imagepng( $image , sprintf( "screen/%05d.png" , $id )); // 计算按压时间 $time = pow(pow( $tx - $sx , 2) + pow( $ty - $sy , 2), 0.425) * PRESS_TIME; $time = round ( $time ); echo sprintf( "time: %f\n" , $time ); press( $time ); // 等待下一次截图 sleep(SLEEP_TIME); } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<?php /** * 按压力度参数,根据实际表现进行调节 * 如果跳远了就调低点 */ //define('PRESS_TIME', 3.752); define( 'PRESS_TIME' , 3.452); /** * 睡眠时间 */ define( 'SLEEP_TIME' , 2); /** * 角色宽度,不需要调节 */ define( 'BODY_WIDTH' , 75); |
###################我是分割线######################
另一种方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
function jump() { sleep(2.5); //延迟 2.5 秒,音乐盒、便利店、井盖等站 2 秒加分 $screenShell = "cd D:\&adb shell /system/bin/screencap -p /sdcard/screenshot.png&adb pull /sdcard/screenshot.png d:jumper/screenshot.png" ; exec ( $screenShell ); //截图 $i =imagecreatefrompng( "d:jumper/screenshot.png" ); //读取图片 $point = array (); for ( $y =400; $y <imagesy( $i ); $y ++) { //从第 400 行开始,避开上部内容 for ( $x =0; $x <imagesx( $i ); $x ++) { //横向扫描 $rgb = imagecolorat( $i , $x , $y ); //取得颜色 $point [ "now" ][ "r" ] = ( $rgb >>16) & 0xFF; $point [ "now" ][ "g" ] = ( $rgb >>8) & 0xFF; $point [ "now" ][ "b" ] = $rgb & 0xFF; if (isset( $point [ "last" ][ "r" ])){ if (!isset( $point [ "x" ][ "a" ])){ if ( abs ( $point [ "now" ][ "r" ]- $point [ "last" ][ "r" ])>1 or abs ( $point [ "now" ][ "g" ]- $point [ "last" ][ "g" ])>1 or abs ( $point [ "now" ][ "b" ]- $point [ "last" ][ "b" ])>1 ){ $point [ "x" ][ "a" ]= $x ; if (imagesx( $i )/2> $x ){ $point [ "direction" ]= "left" ; } else { $point [ "direction" ]= "right" ; } $point [ "a" ]= $point [ "last" ]; } } else { if ( $point [ "now" ]== $point [ "a" ]){ $point [ "x" ][ "b" ]= $x -1; break ; } } } $point [ "last" ]= $point [ "now" ]; } if (isset( $point [ "x" ])){ break ; } } $param [ "left" ] = 3750; $param [ "right" ] = 3100; $time = pow(( abs (imagesx( $i )/2-( $point [ "x" ][ "a" ]+ $point [ "x" ][ "a" ])/2)/imagesx( $i )),1)* $param [ $point [ "direction" ]]; if ( $time <400){ $time +=( $param [ $point [ "direction" ]]/300); } $time = round ( $time ,0); echo "direction:" . $point [ "direction" ]; echo "\nx.a:" . $point [ "x" ][ "a" ]; echo "\nx.b:" . $point [ "x" ][ "b" ]; echo "\ntime:" . $time . "\n" ; $touchShell = "cd D:\&adb shell input swipe 50 250 250 250 " . $time ; exec ( $touchShell ); imagedestroy( $i ); jump(); } jump(); |
更多内容大家可以参考专题《微信跳一跳》进行学习。
原文链接:http://blog.csdn.net/qq_33382313/article/details/78950246
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容