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

相关文章

  • php读取目录及子目录下所有文件名的方法

    首先,我们可以使用opendir()函数打开一个目录,接着使用readdir()函数读取该目录下的所有文件和子目录的文件名,再使用递归进行遍历子目录中的所有文件。下面是完整的代码示例: function read_directory($dir) { $files = array(); if(is_dir($dir)) { $handle = opendir(…

    PHP 2023年5月26日
    00
  • PHP简单实现单点登录功能示例

    下面是详细的“PHP简单实现单点登录功能示例”的攻略,希望对你有所帮助。 什么是单点登录? 单点登录(Single Sign-On,简称SSO)是一种身份认证技术,允许用户只需一次登录即可在不同的系统中访问多个应用程序。在传统的身份验证方案中,用户必须在每个应用程序中分别登录,这既费时又不便。使用单点登录,用户无需频繁输入用户名和密码,而且可以更轻松地访问多…

    PHP 2023年5月24日
    00
  • php 执行系统命令的方法

    PHP提供了多种方法执行操作系统的命令,常用的有以下几种: shell_exec() shell_exec() 函数执行命令并将结果作为字符串返回,其语法如下: shell_exec ( string $command ) $command 参数是要执行的命令,函数返回命令执行结果。如果命令执行失败或没有输出结果,则返回NULL。示例如下: // 执行 ls…

    PHP 2023年5月30日
    00
  • PHP mkdir创建文件夹实现方法解析

    PHP mkdir创建文件夹实现方法解析 简介 在Web开发中,有时我们需要动态创建文件夹以便存放用户上传的文件或其他一些数据。PHP提供了简单易用的函数来实现这一功能。本文将详细介绍 PHP mkdir 函数的使用方法和注意事项。 PHP mkdir函数 PHP mkdir 函数用于创建目录,其语法如下: bool mkdir ( string $dire…

    PHP 2023年5月26日
    00
  • 微信小程序如何添加使用? 微信小程序添加使用方法详情介绍

    微信小程序如何添加使用?——微信小程序添加使用方法详解 微信小程序是微信生态圈中的一种应用程序,它具有轻便、便捷、快速等特点,可以在不下载安装的情况下直接使用。下面是添加和使用微信小程序的详细步骤: 1. 如何添加微信小程序 步骤一:打开微信并进入”发现“页面 在微信的底部导航栏中找到”发现“并点击进入。 步骤二:进入”小程序“页面 在”发现“页面中,点击顶…

    PHP 2023年5月23日
    00
  • PHP异步调用socket实现代码

    PHP异步调用socket实现是一种提高代码性能的方法,能够同时处理多个客户端请求,提高服务器的吞吐量。下面是实现这种方式的完整攻略: 一、安装需要的扩展 安装swoole扩展 pecl install swoole 安装event扩展 pecl install event 二、实现异步socket服务端 在服务端代码中,需要使用swoole与event两个…

    PHP 2023年5月23日
    00
  • PHP获取数组的键与值方法小结

    当我们在 PHP 中处理数组时,通常需要获取其中的键和对应的值。下面是几种获取数组键与值的方法小结。 使用foreach循环 使用 foreach 循环遍历数组,通过两个变量来获取键和值。 $fruits = array(‘apple’ => ‘苹果’, ‘banana’ => ‘香蕉’, ‘orange’ => ‘橙子’); foreac…

    PHP 2023年5月26日
    00
  • win2003 安装软件之PHP5 图文安装教程

    Win2003 安装软件之 PHP5 图文安装教程 本教程介绍如何在Windows Server 2003操作系统上安装PHP5以及配置IIS服务器来支持PHP。本教程面向初学者,所以会尽可能详细地解释每一步。 准备工作 下载PHP5的Windows二进制包 下载Microsoft Visual C++ 2008 Redistributable Packag…

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