前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >100关推箱子游戏

100关推箱子游戏

作者头像
一枚小工
发布2020-03-02 13:42:13
1.2K0
发布2020-03-02 13:42:13
举报
文章被收录于专栏:Cocos Creator开发Cocos Creator开发

实现原理

1.创建游戏场景,通过读取配置文件,取到地图数据并保存,核心逻辑如下:

this.allLevelConfig = {};
cc.loader.loadRes('levelConfig.json', function (err, object) {
    if (err) {
        console.log(err);
        return;
    }
    this.allLevelConfig = object.json.level;
    this.allLevelCount = object.json.levelCount;
    this.loadingTxt.active = false;
    this.startBtn.getComponent(cc.Button).interactable = true;

    //加载完配置后,直接创建关卡元素
    this.createLavelItem();
}.bind(this));

2.地图采用定宽原则,先计算出地图方块的尺寸,再计算每个方块的偏移量就可以设置游戏的每块地图的坐标,核心逻辑如下:

//计算方块大小
this.boxW = this.allWidth / this.allCol;
this.boxH = this.boxW;

//计算起始坐标
let sPosX = -(this.allWidth / 2) + (this.boxW / 2);
let sPosY = (this.allWidth / 2) - (this.boxW / 2);

//计算坐标的偏移量,运算规则(宽铺满,设置高的坐标)
let offset = 0;
if(this.allRow > this.allCol){
    offset = ((this.allRow - this.allCol) * this.boxH) / 2;
}
else{
    offset = ((this.allRow - this.allCol) * this.boxH) / 2;
}

3.人物运动,玩家点哪游戏人物就走到哪,通过递归查找,并保留最短路线,如果目标点不可达,则人物不移动,核心逻辑如下:

//curPos记录当前坐标,step记录步数
getPath : function(curPos, step, result){
    //判断是否到达终点
    if((curPos.row == this.end.row) && (curPos.col == this.end.col)){
        if(step < this.minPath){
            this.bestMap = [];
            for(let i = 0; i < result.length; i++){
                this.bestMap.push(result[i]);
            }
            this.minPath = step; //如果当前抵达步数比最小值小,则修改最小值
            result = [];
        }
    }

    //递归
    for(let i = (curPos.row - 1); i <= (curPos.row + 1); i++){
        for(let j = (curPos.col - 1); j <= (curPos.col + 1); j++){
            //越界跳过
            if((i < 0) || (i >= this.allRow) || (j < 0) || (j >= this.allCol)){
                continue;
            }
            if((i != curPos.row) && (j != curPos.col)){//忽略斜角
                continue;
            }
            else if(this.palace[i][j] && ((this.palace[i][j] == boxType.LAND) || (this.palace[i][j] == boxType.BODY))){
                let tmp = this.palace[i][j];
                this.palace[i][j] = boxType.WALL;  //标记为不可走

                //保存路线
                let r = {};
                r.row = i;
                r.col = j;
                result.push(r);

                this.getPath(r, step + 1, result);
                this.palace[i][j] = tmp;  //尝试结束,取消标记
                result.pop();
            }
        }
    }
},

4.路线计算好后,玩家移动,若玩家点击的是箱子区域,先检测箱子前方是否有障碍物,若没有则推动箱子,通过切换地图的图片和修改位置类型达到推动箱子的效果。

5.游戏结束判定,若达成目标的箱子数量和配置的箱子数量相等,则游戏过关。

以下是游戏中的效果图:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一枚小工 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图数据库 KonisGraph
图数据库 KonisGraph(TencentDB for KonisGraph)是一种云端图数据库服务,基于腾讯在海量图数据上的实践经验,提供一站式海量图数据存储、管理、实时查询、计算、可视化分析能力;KonisGraph 支持属性图模型和 TinkerPop Gremlin 查询语言,能够帮助用户快速完成对图数据的建模、查询和可视化分析。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档