微信跳一跳php代码实现

yizhihongxing

下面是对“微信跳一跳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日

相关文章

  • 浅谈PHP设计模式的模板方法模式

    简介: 模板方法模式,是行为型的设计模式。定义一个操作中的算法的骨架,而将一些步骤延迟到子类当中,使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。通俗讲,模板方法模式是偏向继承的设计模式,当子类有重复的动作时候,可将他们提取出来,放在父类进行处理。 适用场景: 算法结构相同但是算法不同的场景下使用,父类控制整体,子类具体实现。 优点: 体现…

    PHP 2023年4月18日
    00
  • 微信小程序-消息提示框实例

    微信小程序-消息提示框实例 微信小程序提供了一种基于轻量级框架的应用开发模式,它专注于解决特定的问题,如快速构建具有相对简单UI的应用程序。在小程序的开发中,我们会频繁地使用消息提示框(Toast)来提醒用户。本文将向大家介绍开发微信小程序中消息提示框的实现方法,帮助初学者更好地了解和掌握。 1. 引用官方API 消息提示框是微信小程序官方API中的一项功能…

    PHP 2023年5月30日
    00
  • PHP实现通过二维数组键值获取一维键名操作示例

    下面是详细讲解“PHP实现通过二维数组键值获取一维键名操作示例”的完整攻略: 前置知识 在了解如何通过二维数组键值获取一维键名之前,需要首先掌握以下知识: PHP中的数组(Array):数组是一种用于存储数据的变量类型,常用于存储一组有序的数据。 数组的键和值:在PHP中,数组的每个元素都有一个键和一个值,其中键用于访问数组中的元素,值则是存储在数组中的数据…

    PHP 2023年5月26日
    00
  • PHP中流的定义及作用详解

    以下是“PHP中流的定义及作用详解”的完整使用攻略,包括流的基本概念、常见类型和示例说明等内容。 流的基本概念 流是指在程序中对数据进行输入和输出的一种机制。在PHP中,流可以用于读取和写入文件、网络通信、数据压缩等操作。 常见类型 以下是PHP中常见的流类型: 1. 文件流 文件流指对文件进行读取和写入的一种流类型。在PHP中,可以使用fopen函数打开文…

    PHP 2023年5月12日
    00
  • 微信小程序图片选择、上传到服务器、预览(PHP)实现实例

    下面就是关于“微信小程序图片选择、上传到服务器、预览 (PHP)实现实例”的完整攻略。 1. 微信小程序图片选择 在微信小程序中,我们可以使用chooseImage接口上传图片。该接口会调起用户的相册,并允许用户在相册中选择一张或者多张图片。具体的调用方式如下: wx.chooseImage({ count: 1, // 最多选择一张图片 success: …

    PHP 2023年5月23日
    00
  • PHP基于工厂模式实现的计算器实例

    让我来详细讲解一下“PHP基于工厂模式实现的计算器实例”的完整攻略。 1. 工厂模式简介 工厂模式是一种非常常用的设计模式,它可以根据不同的条件来创建不同的对象,从而实现对对象的管理和抽象化。在实际开发中,我们经常会使用工厂模式来创建对象,从而降低系统耦合度,提高代码的可复用性。 2. 计算器实例 基于工厂模式的计算器实例,是一种非常经典的应用场景。在计算器…

    PHP 2023年5月27日
    00
  • php/JS实现的生成随机密码(验证码)功能示例

    生成随机密码或验证码是一个常见的应用需求。在PHP和JS中,实现该功能最常用的方法是通过利用随机数函数和一些字符串函数来生成随机字符串。 以下是关于如何使用PHP和JS生成随机密码和验证码的详细攻略: 使用PHP生成随机密码 步骤一:设置基础字符串 首先,我们需要设置一个基础字符串,该字符串包含数字和字母,可以包含特殊字符。 示例代码: $chars = &…

    PHP 2023年5月26日
    00
  • 将PHP作为Shell脚本语言使用

    将PHP作为Shell脚本语言使用,主要是针对那些在执行Shell命令时需要进行复杂操作的情况,例如在Shell脚本中需要针对某些文本进行替换、处理等。以下是完整的攻略: 1. 安装PHP解释器 由于我们需要将PHP作为Shell脚本语言使用,因此需要安装PHP解释器,同时还需要将其添加到环境变量中。在Linux系统中,可以通过以下命令安装PHP: sudo…

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