微信跳一跳php代码实现

下面是对“微信跳一跳php代码实现”攻略的详细讲解。

1. 前言

微信跳一跳是一款非常火的小游戏,它可以很好的展示出微信小程序方便、易用、开发简单的特点。本篇攻略主要是针对使用php实现微信跳一跳的方法,希望对需要接入游戏的开发者有所帮助。

2. 准备工作

在正式编写php代码之前,我们需要先准备好一些必要的文件和环境:

  • PHP 调试工具:XAMPP、WAMP等等
  • 需要安装 curl 扩展:在 PHP 7 中,CURL 可以直接使用,因此我们可以直接使用 CURL 扩展函数库来处理微信接口中的请求。
  • 开发者需要有自己的服务器。自己的服务器可以使用阿里云、腾讯云等等云服务,也可以使用自己的桌面电脑或笔记本电脑搭建虚拟服务器。

3. 编写代码

在开发前,我们需要获得微信跳一跳的API信息,包括本局游戏的分数,跳跃距离等内容。这些信息可以通过设置代理服务器实现。接着,我们可以通过实现自动化的方式来控制小人跳跃,以达到高分的效果。

下面是一个代码示例:

<?php

class MyBot
{
    const BASE_URL = 'https://xiao.gg/api-js/';
    private $bashUrl;

    public function __construct()
    {
        $this->baseUrl = self::BASE_URL;
    }

    public function signature($url, $data, $token)
    {
        ksort($data);

        $tmpArr = array();
        foreach( $data as $key => $v )
        {
            $tmpArr[] = sprintf("%s%s", $key, $v);
        }
        $tmpStr = implode( $tmpArr );

        $string = sprintf("%s%s%s", $url, $tmpStr, $token);

        return sha1( $string );
    }

    public function play()
    {
        $token = '2.7.1';
        $x = 400; // 自动开始游戏 x、y 位置
        $y = 1205;

        $url = 'https://disao.sinaapp.com/jump/';

        while(true) {
            $headers = array(
                'User-Agent: Mozilla/5.0 (Linux; U; Android 4.4.2;) Mobile Safari/534.30',
                'Referer: https://xiao.gg/game/jump_jump/jump_jump.html?v=2.7.1',
                'X-Requested-With: XMLHttpRequest',
            );
            $res = $this->request($url, null, array(
                'x-forwarded-for: '.implode('.', array(rand(1, 255), rand(1, 255), rand(1, 255), rand(1, 255))),
                'referer: https://xiao.gg/game/jump_jump/jump_jump.html?v=2.7.1',
                'User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.132 Mobile Safari/537.36',
            ));
            $json = json_decode($res, true);

            if (empty($json['score']) || empty($json['nx']) || empty($json['nz']) || !empty($json['game_over'])) {
                sleep(2); // 等待开始
                $this->tap_screen($x, $y, 0);

                continue;
            }
            $score = $json['score'];
            $target = $json['nx'];
            $block = $json['nz'];

            $this->jump($target, $block, $score);

        }
    }

    public function jump($x, $y, $score)
    {
        $distance = sqrt(pow($x, 2) + pow($y, 2));
        $rate = 2.58;
        $press_time = round($distance * $rate);
        $this->tap_screen($x, $y, $press_time);

    }

    function tap_screen($x, $y, $time) {
        $time = max($time, 200); // 最小按压时间为 200ms
        $time = $time + 100; // 加上滑屏时间
        $url = 'http://127.0.0.1:5000/api/v1/jump';
        $data = array(
            'x' => $x,
            'y' => $y,
            't' => $time,
        );

        $res = $this->request($url, $data, array(
            'X-Elaine-Token: your-token, if your server needs a token',
        ));
        if (empty($res)) { // 如果返回结果为空,也说明可能需要像微信一样点击按钮并重新开始
            sleep(2);
            $this->tap_screen(400, 1205, 0);
        }

    }

    private function request($url, $data = null, $headers = array(), $type = "GET")
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);

        if (is_array($headers) && !empty($headers)) {
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        }

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        if ($type == "POST") {
            curl_setopt($ch, CURLOPT_POST, true);
            if (is_array($data)) {
                curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
            } else {
                curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            }
        }

        $result = curl_exec($ch);
        curl_close($ch);

        return $result;
    }
}

$my_bot = new MyBot();
$my_bot->play();

以上代码实现了跳一跳的所有核心功能,同时也实现了自动化的操作。

4. 示例说明:

下面我们来看两个示例说明:

示例1:

function jump($distance)
{
    $score = 0;
    $rate = 2.58;
    $press_time = round($distance * $rate);
    if ($press_time > 500) {
        $press_time = 500;
    }
    $url = 'http://127.0.0.1:8080/jump';

    $post_data = array(
        'distance' => $distance,
        'press_time' => $press_time,
        'token' => 'you need to replace your token',
    );
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
    $json = json_decode(curl_exec($ch), true);
    curl_close($ch);
    if (isset($json['success']) && $json['success'] == true) {
        $score = $json['score'];
    }
    return $score;
}

$distance = 419;
$score = jump($distance);
echo $score;

该示例中,我们只需要输入跳跃距离distance,调用 jump 函数就可以实现小人的跳跃,并返回本局的分数。

示例2:

$step = rand(600, 1000);  // 生成目标跳跃距离的随机值
$x = rand(600, 900);  // 生成小人目标跳跃距离的 x 坐标
$y = rand(1500, 1700);  // 生成小人目标跳跃距离的 y 坐标

$score = jump($step);
if ($score > 0) {
    echo "{$step} => {$score}".PHP_EOL;
} else {
    echo "{$step} failed".PHP_EOL;
}

该示例中,我们利用 rand 函数来生成随机值,实现了一个更加有趣的游戏体验。每次执行该代码,都会随机生成目标跳跃的距离与小人的识别坐标,从而让整个游戏更加多样化。

5. 总结

通过本文的讲解,我们不仅了解到了微信跳一跳的实现原理,更重要的是掌握了PHP实现跳一跳的具体技术和实现方法。在实践中,开发者可以根据自己的需求调整代码和加入其他特性,以达到更好的游戏效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信跳一跳php代码实现 - Python技术站

(0)
上一篇 2天前
下一篇 2天前

相关文章

  • 详解PHP字符串替换str_replace()函数四种用法

    下面我来详细讲解一下“详解PHP字符串替换str_replace()函数四种用法”的完整攻略。 一、概述 在PHP程序中,我们经常需要对字符串进行一些替换操作,比如将字符串中的某些字符替换成另外一些字符。在PHP中,可以使用str_replace()函数来实现字符串替换操作。 二、str_replace()函数的基本用法 str_replace()函数的基本…

    PHP 4天前
    00
  • php实现两个数组相加的方法

    下面我将详细讲解如何用PHP实现两个数组相加的方法。 1. 实现方法 实现两个数组相加的方法,可以通过循环数组并将相应位置的元素相加。 具体实现步骤如下:1. 定义两个待相加的数组$arr1和$arr2;2. 定义一个空数组$result作为相加结果的存储数组;3. 遍历数组,计算每个位置上的元素相加,并将相加结果放入$result数组对应位置中;4. 返回…

    PHP 4天前
    00
  • php简单实现查询数据库返回json数据

    下面是详细讲解“php简单实现查询数据库返回json数据”的完整攻略。 第一步:连接数据库 使用PHP进行操作数据库,首先需要连接到数据库上,可以使用PHP内置的PDO扩展或mysqli扩展进行操作。这里以PDO扩展为例,示例代码如下: // 连接数据库 $host = ‘localhost’; // 数据库主机名 $dbname = ‘mydb’; // …

    PHP 3天前
    00
  • PHP数组和explode函数示例总结

    PHP是一种非常流行的服务器端编程语言,它提供了许多有用的工具和函数来处理各种任务。在PHP中,数组和字符串操作是非常常见的任务。本篇攻略将重点介绍PHP数组和explode函数,并提供两个实例来介绍它们的用法。 PHP数组 在PHP中,数组是一组值的集合,每个值都有一个唯一的键。你可以使用键访问数组中的值,也可以循环遍历整个数组。 数组创建和访问 以下是创…

    PHP 4天前
    00
  • Laravel搭建后台登录系统步骤详解

    Laravel是一种流行的PHP框架,被广泛用于开发Web应用。本攻略将介绍如何使用Laravel框架搭建后台登录系统。 步骤1:创建Laravel应用程序 要开始使用Laravel框架,你需要在本地计算机上安装PHP和Composer。然后,使用Composer创建一个新的Laravel项目。 安装Composer后,按照以下命令创建Laravel项目: …

    PHP 6天前
    00
  • php通过数组实现多条件查询实现方法(字符串分割)

    一、介绍 在开发过程中,我们经常会需要根据多个条件来查询数据。如果使用 SQL 语句拼接的方式,会很繁琐,代码难以阅读和维护。而使用 PHP 中的数组,可以很方便地实现多条件查询。本文就将介绍一种使用 PHP 数组进行多条件查询的实现方法 “字符串分割”。 二、实现方法 构造查询条件数组 将需要查询的条件存放在一个数组中,每个元素表示一个条件,例如: $co…

    PHP 4天前
    00
  • php 类自动载入的方法

    PHP类自动载入是指,在使用PHP程序时,当需要调用某个类时,如果该类没有被引入,则会自动执行一个加载该类的函数,从而实现自动载入。常见的PHP类自动载入方法有三种: 1.函数式自动载入方法 这种方法是通过调用一个函数来实现载入类的过程。具体实现代码如下: function autoload($classname){ include($classname ….

    PHP 6天前
    00
  • 使PHP自定义函数返回多个值

    在PHP中,函数通常只能返回一个值,但是我们可以使用一些特殊的技巧来使函数能够返回多个值。 以下是使PHP自定义函数返回多个值的完整攻略: 方法一:返回数组 我们可以在自定义函数中创建一个数组来容纳多个返回值,该数组可以通过函数返回供调用者使用。以下是一个示例: function calculate($a, $b) { $sum = $a + $b; $di…

    PHP 4天前
    00
  • PHP的反射类ReflectionClass、ReflectionMethod使用实例

    下面我将为您详细讲解一下“PHP的反射类ReflectionClass、ReflectionMethod使用实例”的攻略。 一、反射类简介 反射是指在运行时获取一个类的信息,比如类的方法、属性、注释等。在PHP中提供了一个反射API,通过反射类可以方便地获取某个类的各种信息,这个反射API就是反射类。 二、反射类的基本使用 2.1 创建反射类对象 在PHP中…

    PHP 6天前
    00
  • PHP检测字符串是否为UTF8编码的常用方法

    要判断字符串是否为UTF-8编码,可以使用以下两种方法: 方法一:使用mb_detect_encoding函数 mb_detect_encoding函数可以用来判断字符串的字符集类型。 // 判断字符串是否为UTF-8编码 if(mb_detect_encoding($str, ‘UTF-8’, true) === false){ echo ‘不是UTF-8…

    PHP 3天前
    00