前言

上文中我们实现了炸弹人与墙的碰撞检测,以及设置移动步长来解决发现的问题。本文会加入1个AI敌人,敌人使用A*算法追踪炸弹人。

加入敌人,追踪炸弹人

本文主要内容

回顾上文更新后的领域模型

炸弹人游戏开发系列(7):加入敌人,使用A*算法寻路

查看大图

开发策略

首先实现“加入敌人”功能。通过参考“炸弹人游戏开发系列(4):炸弹人显示与移动“中的实现,可以初步分析出需要加入敌人图片、敌人帧数据和精灵数据、敌人精灵类EnemySprite、敌人层EnemyLayer和敌人层管理类EnemyLayerManager。

然后实现“追踪炸弹人”功能。需要新建一个算法类FindPath,负责使用A*算法计算并返回路径数据。

敌人精灵类与算法类的交互关系:

炸弹人游戏开发系列(7):加入敌人,使用A*算法寻路

并行开发

可以并行开发“加入敌人”和“追踪炸弹人”。

先定义一个FindPath类的的接口,指定findPath方法输入参数和返回参数的格式。

实现“加入敌人”功能时,可以按照接口指定的格式使用假的路径数据来测试EnemySprite类;实现“追踪炸弹人”功能时,按照接口指定格式使用假的坐标数据来测试FindPath类。

在EnemySprit和FindPath都实现后,再集成在一起测试。因为两者接口一致,因此集成时不会有什么困难。

加入敌人

扩大地图

现在地图大小为4*4,太小了。

加入一个敌人后:

  • 可玩性太低
    很快游戏就结束了;玩家操作炸弹人躲避敌人的空间太小了。
  • 不方便演示和测试游戏
    由于游戏很快就结束,因此不方便演示和测试游戏。

因此,将地图扩大为20*20。

要实现这个功能,只需要修改MapData和TerrainData即可。

相关代码

MapData

//地图数据
(function () {
    var ground = bomberConfig.map.type.GROUND,
        wall = bomberConfig.map.type.WALL;

    var mapData = [
        [
            wall, ground, ground, ground, ground,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground
        ],
        [
            wall, ground, wall, wall, wall,
            wall, wall, wall, ground, ground,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground
        ],
        [
            wall, ground, ground, ground, wall,
            ground, ground, wall, wall, ground,
            ground, ground, ground, wall, ground,
            ground, ground, ground, ground, ground
        ],
        [
            wall, ground, ground, ground, wall,
            ground, ground, wall, wall, wall,
            ground, wall, ground, wall, ground,
            ground, ground, ground, ground, ground
        ],
        [
            wall, ground, ground, ground, wall,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground
        ],



        [
            wall, ground, wall, ground, ground,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground
        ],
        [
            wall, ground, ground, ground, wall,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground
        ],
        [
            wall, ground, ground, ground, wall,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground
        ],
        [
            wall, ground, ground, ground, wall,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground
        ],
        [
            wall, ground, ground, ground, wall,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground
        ],

        [
            wall, ground, ground, ground, wall,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground
        ],
        [
            wall, ground, ground, ground, wall,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground
        ],
        [
            wall, ground, ground, ground, wall,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground
        ],
        [
            wall, ground, ground, ground, wall,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground
        ],
        [
            wall, ground, ground, ground, wall,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground
        ],


        [
            wall, ground, ground, ground, wall,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground
        ],
        [
            wall, ground, ground, ground, wall,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground
        ],
        [
            wall, ground, ground, ground, wall,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground
        ],
        [
            wall, ground, ground, ground, wall,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground
        ],
        [
            wall, ground, ground, ground, wall,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground,
            ground, ground, ground, ground, ground
        ]
    ];

    window.mapData = mapData;
}());
View Code

相关文章:

  • 2022-12-23
  • 2021-09-02
  • 2022-12-23
  • 2021-10-24
  • 2021-07-21
  • 2021-12-05
  • 2021-09-16
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-02
  • 2021-12-21
  • 2022-12-23
相关资源
相似解决方案