写在开年

传统意义上的新的一年已经开始了,再过几个月我也将要步入婚姻的殿堂,并且也将进入而立之年。年龄虽然大了,但是技术还得锤炼。早年不好好学习落下的东西,就得现在自己利用业余时间恶补了。所以也是有些疲倦并且没有章法的,万幸我的性格还是不错的,就是不怕慢,一切都可以慢慢来,我坚信我会追上的。

然后今年依然要努力工作,不能太浮躁了。加油吧

升级 homestead 小记录

又是一个周末,自觉状态调整的不错了,于是就像弄点东西玩,然后,就想到了升级相关版本,vagrant 和 virtual box 都升级完了,然后我又升级了 homestea 的脚本,并且切换到了最新的 release tag 上,最后执行 vagrant box update,会提示 ==> homestead-7: Box 'laravel/homestead' not installed, can't check for updates. 这个么个东西,在网上简单的看了一下也没发现什么

最后灵机一动,切换会原来的 tag,然后再升级 box 再换到最新的 tag 就 ok 了。

哈哈,太机智了,记录一下顺序吧,以后就不会出问题了,先升级 box,然后升级 homestead 脚本,最后切换到脚本最新的 release 的 tag 就大功告成了,继续写代码

对了,升级以后还得重新配置一下 composer 中国镜像

中午来碎碎念

自从搬家以后,状态一直起伏,工作状态保持的还可以,业余时间就有些问题了,需要调整,后来想想,可能是自己听歌的风格不对,刚才找了个歌单,听了一下,感觉好多了。果然还是听一些能让自己舒爽的歌是好事,qq 音乐的推荐太渣了,没有网易的好。不能光靠推荐,还得自己自己翻歌单。

最近,学习状态逐渐也在提升,php 在看,go 也准备写点小东西了。

碎碎念到此结束,开始干活了。和媳妇生活也越来越有起色,磕磕绊绊是难免的,互相谅解吧。18年依然奋斗,结婚,赚钱,一切都会好起来的,干就完了

用 php 来实现微信跳一跳 (适用于安卓手机)

作为一个程序员,当微信出了跳一跳后,排行榜的前三名就没有低于 1k 分的,我甚是伤心,所以 php 也要来跳一跳,今天发出来的版本貌似已经是第五版了,每天晚上都回家写一个方法,分数越来越高,到了现在,运行速度和分数都已经让我满意了。刚才打的最高分。

github 地址: https://github.com/crazyhl/php_jump_auto

分数

下面说一下实现的思路,先用 adb 截图,然后再这个截图上寻找小人的位置,以及需要跳跃到的方块的位置,最后再利用 adb 模拟长按跳过去就行了。

分开说下,如何找小人。利用先确认一个小人身上的色块的色值,然后在再整图上找这个色值区间值的一个范围。

如下图 图片alt

再调整色块值之后,我觉得这个范围比较合适,所以我就定了下来,然后再计算这个范围的中心点,当做小人的中心点。

然后再去寻找需要需要跳跃的目标,这里有个优化后的方法,首先我们确认了小人的位置,然后就搜索半张图就可以了,然后寻找两个点,跟标准值差异的最高点以及最右的一个点,为什么不寻找左侧点,是因为有阴影会影响搜索的。

等找到最高点和最右点之后,取两个点的交点就确认跳跃的目标点了。

这样人物点位和目标点都确认好了,然后利用勾股定理就可以计算出来距离了。这个距离跟最终的长按时间是有一个比例了,这个比例自己测一测就能大概找出来了。

这样,一个跟 php 没有太大关系的辅助就成了,最后,铺天盖地求 star

dijkstra算法 PHP 实现

20171119 利用周末优化了一下代码。这次完全默写了出来。感觉好多了

这个是根据算法图解自己写的,理解的不是很好,注释都在代码里面,过几天再默写一下,好好理解一下

<?php

// 构造图
$graphs = [];
$graphs['start'] = [];
$graphs['start']['a'] = 5;
$graphs['start']['b'] = 2;

$graphs['a'] = [];
$graphs['a']['c'] = 4;
$graphs['a']['d'] = 2;

$graphs['b'] = [];
$graphs['b']['a'] = 8;
$graphs['b']['d'] = 7;

$graphs['c'] = [];
$graphs['c']['d'] = 6;
$graphs['c']['fin'] = 3;

$graphs['d'] = [];
$graphs['d']['fin'] = 1;

$graphs['fin'] = [];

// 处理过的节点
$processed = [];
// 所有节点的消费
$costs = [];
// 所有节点的父节点
$parents = [];

function getNodeCost($graphs, $nodeName = 'start', $isStartNode = false)
{
    if (empty($graphs)) {
        return [];
    }
    $costs = [];
    foreach ($graphs[$nodeName] as $name => $length) {
        if ($isStartNode) {
            $costs[$name] = $length;
        } else {
            $costs[$name] = INF;
        }
        $costs += getNodeCost($graphs, $name);
    }

    return $costs;
}

$costs = getNodeCost($graphs, 'start', true);

function getNodeParents($graphs, $nodeName = 'start', $isStartNode = false)
{
    if (empty($graphs)) {
        return [];
    }
    $parents = [];
    foreach ($graphs[$nodeName] as $name => $length) {
        if ($isStartNode) {
            $parents[$name] = $nodeName;
        } else {
            $parents[$name] = null;
        }
        $parents += getNodeParents($graphs, $name);
    }

    return $parents;
}

$parents = getNodeParents($graphs, 'start', true);

function findLowestCostNode($costs, $processed)
{
    $lowestNodeLength = INF;
    $lowestNOdeName = '';
    foreach ($costs as $name => $length) {
        if ($length < $lowestNodeLength && !in_array($name, $processed)) {
            $lowestNodeLength = $length;
            $lowestNOdeName = $name;
        }
    }

    return $lowestNOdeName;
}

$nodeName = findLowestCostNode($costs, $processed);
while ($nodeName) {
    $currentNodeCost = $costs[$nodeName];
    foreach ($graphs[$nodeName] as $name => $length) {
        if ($currentNodeCost + $length < $costs[$name]) {
            $costs[$name] = $currentNodeCost + $length;
            $parents[$name] = $nodeName;
        }
    }
    $processed[] = $nodeName;
    $nodeName = findLowestCostNode($costs, $processed);
}

var_dump($costs);
var_dump($parents);