专栏首页Creator星球游戏开发社区KUOKUO的趣味教程 | 小怪物也思考(3)

KUOKUO的趣味教程 | 小怪物也思考(3)

EEA阔宝:专注 CocosCreator 引擎小游戏开发两年

开发微信小游戏5款

H5 小游戏多款

CSDN 博客: KUOKUO 众享

本篇承接上一集故事

KUOKUO的趣味教程 | 小怪物的视野(2)

KUOKUO的趣味教程 | 进击的小怪诞生(1)

看一个小怪物是如何自我进化的!

第三章:小怪物也思考

在上一篇文章中,小怪采用了用脸摩擦墙的方法,成功越过障碍,抓到玩家。目的是实现了,但是小怪认为,这是及其不雅观的。
于是小怪物在夜黑风高之时,偷偷的勘探了地形。

上面是人类创造的地形,小怪物看不懂,在小怪物眼中只能看到0或者1。

// 地图数据,0是地板,1是墙
this.map = [
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
];

小怪物知道0可以走1不可以,因为它当前就站在一个0的位置。

现在有了地图,小怪就可以先寻找到障碍物的边界,然后绕过去。

小怪物一天天在进化,一次可以多思考点事情了

think () {
    // 取最小值大些,取最大值小些,好比较
    let minX = 99;
    let minY = 99;
    let maxX = -1;
    let maxY = -1;
    // 寻找障碍物的最大包围圈,遍历
    for (let i = 0; i < this.map.length; i++) {
        let m = this.map[i];
        for (let j = 0; j < m.length; j++) {
            if (m[j] == 1) {
                if (i < minX) {
                    minX = i;
                }
                if (i > maxX) {
                    maxX = i;
                }
                if (j < minY) {
                    minY = j;
                }
                if (j > maxY) {
                    maxY = j;
                }
            }
        }
    }
    // 打印观察下
    console.log(minX,minY,maxX,maxY);
}

小怪物知道地图的边界,它是不会把玩家跟丢的!

小怪决定绕过这个障碍,它选择先向上或者向下到没障碍的位置,然后一口气过去。

也就是说只要知道上面图中的1号、2号两个点位,小怪物又开始努力思考

let dis1 = Math.abs(this.mIndex.x - maxX);
let dis2 = Math.abs(this.mIndex.x - minX);
// 取小的
if (dis1 < dis2) {
    this.point1 = cc.v2(maxX + 1, this.mIndex.y);
} else {
    this.point1 = cc.v2(minX - 1, this.mIndex.y);
}
console.log(this.point1);
// 然后取第二个点
this.point2 = cc.v2(this.point1.x, this.pIndex.y);
console.log(this.point2);

一不小心成功了,两个关键点找到了!

然后只要走过去就好了

goAim () {
    // 计算下时间

        let time1 = 0.5 * Math.abs(this.mIndex.x - this.point1.x);    let time2 = 0.5 * Math.abs(this.pIndex.y - this.point1.y);
    let time3 = 0.5 * Math.abs(this.pIndex.x - this.point2.x);
    let m1 = cc.moveTo(time1,this.convertToPoints(this.point1.x, this.point1.y));
    let m2 = cc.moveTo(time2,this.convertToPoints(this.point2.x, this.point2.y));
    let m3 = cc.moveTo(time3,this.convertToPoints(this.pIndex.x, this.pIndex.y));
    this.me.runAction(cc.sequence(m1,m2,m3));
},

// 转化坐标
convertToPoints (dx, dy) {
    let y = 300 - 100 * dx;
    let x = 100 * dy - 450;
    return cc.v2(x, y);
}

亲!我来了,嘎嘎嘎!!

换个位置试试呢?

只能用一个字形容,完美!

哇咔咔,再也不用用脸蹭墙啦!O(∩_∩)O~~

未完待续...

本文分享自微信公众号 - Creator星球游戏开发社区(creator-star)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

推荐阅读

  • 如何将设计思维应用到精益初创公司的软件开发

    我们所说的设计思维,是指由 IDEO 公司的 Tim Brown 提出,并且正在改变全世界组织的设计思维,简称 DT。(译者注:IDDO,当代最具影响力的设计公司之一)

    Aceyclee
    Serverless无服务器云函数
  • InnoDB 事务加锁分析

    一般大家对数据库事务的了解可能停留在事务的ACID特性以及事务4种不同的隔离级别层面上,而对于事务 4 种不同隔离级别如何实现了解相对较少。

    2020labs小助手
    MySQLSQL数据库MVCMVCC
  • FutureTask 核心源码解析

    研究源码,一般我们都从整体以及实例先入手,再研究细节,不至于一开始就“深陷其中而"当局者迷".

    JavaEdge
    HTTPJava
  • 200行代码落地人脸识别开锁应用

    2019年国庆,帮朋友实现了一个人脸识别进行开锁的功能,用在他的真人实景游戏业务中。几个月来运行稳定,体验良好,借着这个春节宅家的时间,整理一下这个应用的实现过程。

    高树磊
    人脸识别图像处理
  • 滑动验证码攻防对抗

        在业务安全领域,滑动验证码已经是国内继,传统字符型验证码之后的标配。众所周知,打码平台和机器学习这两种绕过验证码的方式,已经是攻击者很主流的思路,不再阐述。冷渗透介绍的是一个冷门的绕过思路和防御方案。这些积累,均来自于实战之中,希望有用。

    周俊辉
    HTTP网络安全安全网站
  • 程序员进阶必读,万字总结Mysql优化精华篇

    price decimal(8,2)有2位小数的定点数,定点数支持很大的数(甚至是超过int,bigint存储范围的数)

    程序员内点事
    全文检索缓存SQL数据库Python
  • 运维转型 | 运维人不再只是“救火英雄”

    各行各业都开启了数字化转型的进程,运维团队在这种时代的浪潮中又该何去何从?我在帮助一些企业落地了运维技术平台之后,开始反思这个问题,并将所思所想整理成本篇文章。

    嘉为科技
    企业运维自动化云计算
  • WEB开发常见的安全漏洞和解决思路

    SQL注入时web开发中最常见也是危害性最大的安全漏洞,SQL注入攻击可能会导致 服务器故障,数据泄漏,数据被恶意删除等等严重后果。

    windwei
    SQLHTTPhttps安全漏洞PHP
  • 详解Winograd变换矩阵生成原理

    文本首发知乎:https://zhuanlan.zhihu.com/p/87516875

    Ldpe2G
    编程算法
  • Linux网络性能优化相关策略

    1. rx-checksumming:校验接收报文的checksum。

    glinuxer
    Linux

扫码关注云+社区

领取腾讯云代金券