微信跳一跳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日

相关文章

  • 微信推送功能实现方式图文详解

    微信推送功能实现方式图文详解 1. 确定推送方式 要实现微信推送功能,需要先确定推送方式,一般可以通过微信公众号、企业微信或小程序进行推送。其中,微信公众号和企业微信需要在微信开放平台进行认证申请,而小程序可以直接在个人开发者账号下创建。 2. 获取接口权限 根据推送的方式,需要获取对应的接口权限,才能够实现推送。具体的获取方式可以参考微信开放平台提供的官方…

    PHP 2023年5月23日
    00
  • php5.2的curl-bug 服务器被php进程卡死问题排查

    下面我将详细讲解“php5.2的curl-bug 服务器被php进程卡死问题排查”的完整攻略。 问题背景 当使用php5.2版本中的curl库进行网络请求时,有可能会出现curl-bug,导致php进程卡死,进而导致服务器崩溃。这是由于curl库在处理某些特殊情况时出现了死锁现象,从而导致进程卡死。 排查过程 要想排查此问题,首先需要了解问题出现的原因。通常…

    PHP 2023年5月27日
    00
  • php输入流php://input使用示例(php发送图片流到服务器)

    下面是“php输入流php://input使用示例(php发送图片流到服务器)”的完整攻略。 什么是php://input php://input是PHP的输入流,我们可以用它来读取HTTP请求的原始数据。在处理POST请求中的文件上传、JSON数据等特殊请求时,使用php://input可以更加灵活地处理请求中的数据。 示例一:接收POST请求JSON数据…

    PHP 2023年5月26日
    00
  • PHP实现采集程序原理和简单示例代码

    下面详细讲解一下“PHP实现采集程序原理和简单示例代码”的完整攻略。 什么是采集程序? 采集程序指的是从互联网上获取特定信息的程序。这些信息可以是图片、文字、视频等等,采集程序可以自动化地从指定的网站或页面抓取这些信息,然后按照指定的方式对其进行存储或处理。 采集程序有很多应用场景,如爬虫、数据分析、SEO优化等等。 PHP实现采集程序的原理 PHP实现采集…

    PHP 2023年5月23日
    00
  • php urlencode()与urldecode()函数字符编码原理详解

    PHP urlencode()与urldecode()函数字符编码原理详解 简介 在使用PHP进行Web开发时,处理URL编码通常是必要的。PHP内置的urlencoce()和urldecode()函数提供了处理URL编码的便利方法。本文将详细介绍urlencode()和urldecode()函数的原理和使用方法。 urlencode() urlencode…

    PHP 2023年5月26日
    00
  • PHP中echo和print的区别

    首先,需要了解echo和print是两个在PHP中用来向浏览器输出文本的语句。它们的最大区别在于print只能输出一个值且返回值为1,而echo可以输出多个值但是返回值为void。 下面我们来看一些示例: 示例一: 代码为: $name = "John"; echo "Hello, " . $name; print &…

    PHP 2023年5月26日
    00
  • php中一个完整表单处理实现代码

    下面是“PHP中一个完整表单处理实现代码”的完整攻略: 表单处理的基本流程 在PHP中,实现表单处理的基本流程如下: 创建HTML表单并设置form的method属性为POST,action属性为处理表单的URL地址。 在处理表单的PHP页面中利用$_POST数组获取表单提交的数据。 对获取的表单数据进行处理(如验证、过滤、存储等)。 根据处理结果,输出相应…

    PHP 2023年5月24日
    00
  • 基于php在各种web服务器的运行模式详解

    基于PHP在各种Web服务器的运行模式详解 什么是Web服务器 Web服务器是一个软件应用程序,它接受来自客户端的HTTP请求,并发送响应回去。Web服务器通常部署在专用硬件中,例如Web服务器,但也可以运行在普通电脑上。Web服务器是创建Web应用程序的基础。 PHP与Web服务器 PHP是一种Web编程语言,它可以与不同的Web服务器协同工作,来创建We…

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