微信跳一跳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)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 在Linux(Ubuntu)下搭建PHP环境的操作步骤

    下面是在Ubuntu下搭建PHP环境的详细步骤: 1. 安装 PHP 打开终端,输入以下命令: sudo apt-get update sudo apt-get install php 这将会自动安装 PHP 和其它相关组件。安装完成后,可以通过以下命令查看 PHP 版本: php -v 2. 安装 Apache Apache 是一个流行的 Web 服务器,…

    PHP 2023年5月24日
    00
  • 微信小程序获取用户信息并保存登录状态详解

    没问题,请听我详细讲解“微信小程序获取用户信息并保存登录状态详解”。 背景 微信小程序是一种轻量级的应用程序,用户可以通过微信扫描二维码或直接搜索进入小程序。微信小程序集成了丰富的API,给开发者提供了便捷的开发体验。在用户登录小程序之后,会默认持有一个登录态,可以通过该登录态获取用户信息,保持用户状态。 本攻略将详细介绍微信小程序如何获取用户信息并保存登录…

    PHP 2023年5月30日
    00
  • php实现webservice实例

    1. 准备工作 在 php 中实现 webservice,需要先确认以下几点: 确认 php 版本支持 SoapClient 模块。可以通过 phpinfo() 函数检查。 编写 wsdl 文件,定义 webservice 的函数、参数和返回值等信息。 2. 创建 wsdl 文件 创建 webservice 所需的 wsdl 文件需要遵循 WSDL(Web …

    PHP 2023年5月27日
    00
  • PHP正则表达式 /i, /is, /s, /isU等介绍

    下面是 “PHP正则表达式 /i, /is, /s, /isU等介绍” 的详细攻略: 什么是PHP正则表达式 PHP正则表达式是一种广泛用于文本匹配和查找的工具。它是一个特殊的字符串,可以用来描述一些特定的文本模式,以便进行匹配和查找。 正则表达式的语法 正则表达式的基本语法由字符和元字符组成。其中,字符表示字面值,元字符具有特殊含义。常用的元字符包括: .…

    PHP 2023年5月26日
    00
  • php发送post请求函数分享

    在讲解“php发送post请求函数分享”的完整攻略之前,先了解一下HTTP请求的基本知识。 HTTP请求有两种类型,分别是GET和POST,两者的区别如下: GET:通过URL传递数据,用于获取数据,安全性较低。 POST:通过HTTP发送数据,用于提交数据,安全性较高。 而PHP发送POST请求,则需要用到以下函数: // 初始化一个cURL对象 $ch …

    PHP 2023年5月25日
    00
  • 利用PHP将部分内容用星号替换

    针对您的问题,以下是我给出的“利用PHP将部分内容用星号替换”的完整攻略。 第一步:使用str_replace函数 str_replace函数是PHP中常用的替换函数,它可以将指定的字符串或字符替换成另一个字符串,我们可以使用这个函数来实现将部分内容用星号替换的功能。 具体使用方法如下: $str = ‘hello, world’; //待替换的原始字符串 …

    PHP 2023年5月26日
    00
  • php获取随机数组列表的方法

    下面是详细讲解”PHP获取随机数组列表的方法”的完整攻略: 1.使用shuffle()函数 shuffle()函数可以将数组的元素随机排序,从而达到获取随机数组列表的效果。示例代码如下所示: <?php $items = array("apple", "banana", "orange", &…

    PHP 2023年5月26日
    00
  • php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】

    下面我将详细讲解php常用数组array函数实例总结。 1. 数组赋值的常用方式 1.1 直接赋值 通过直接赋值的方式来创建一个数组,包括两种形式: // 键值对数组 $arr1 = [‘name’ => ‘Tom’, ‘age’ => 18, ‘gender’ => ‘male’]; // 索引数组 $arr2 = [‘apple’, ‘…

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部