xtodx/mapgenerator

地图生成器

dev-master 2019-01-31 22:44 UTC

This package is auto-updated.

Last update: 2024-09-29 05:02:24 UTC


README

最初生成是这样进行的

function generate()
        {
            $terrainCount = count($this->terrainTypes) - 1;
            for ($i = 0; $i < $this->y; $i++) {
                $this->terrains[] = [];
                $this->units[] = [];
                for ($k = 0; $k < $this->x; $k++) {
                    $this->terrains[$i][] = $this->createTerrain($this->terrainTypes[rand(0, $terrainCount)], $k, $i);
                    $possibleUnits = $this->terrains[$i][$k]->getPossibleUnits();
                    $this->units[$i][$k] = null;
                    if (count($possibleUnits) > 0) {
                        if ($this->distribution() == 0) {
                            $this->totalUnits++;
                            $this->units[$i][$k] = $this->createUnit($possibleUnits[rand(0,
                                count($possibleUnits) - 1)], rand(0, $this->teams - 1));
                            $this->terrains[$i][$k]->setUnit($this->units[$i][$k]);
                        }
                    }
                }
            }

            return $this->terrains;
        }

但首先我们需要生成数据库,否则

  1. 我们可能只能生成较少的数据库
  2. 可能整个可以放置数据库的区域都可能被占用
因此,我们决定牺牲速度来将地形生成和对象生成过程分开

现在工作分为3个阶段

  1. 地形生成
  2. 在地图上生成限制数量的对象(例如基地),数量等于队伍数量
  3. 生成其他对象
为了完善逻辑,我认为需要一些算法和规则,按照这些规则

  1. 开火
  2. 移动单位
  3. 基地能提供什么

安装

composer require xtodx/mapgenerator dev-master