潮玩宇宙里的像素人挖宝石游戏玩法开发成品源码搭建嵌入
玩法:
消耗电石购买的方块兽,可以派出进入宝石矿洞为你采矿。派出的方块兽越多,等级越高,挖宝石速度越快。
-在第5矿洞可解锁自动挖。-派出尽可能多的方块兽,不断合成升级你的方块兽等级越高,挖宝石的速度越快。相同等级的方块兽才可合体升级,不同等级的方块兽之间禁止合体。-不需要的像素人可以拖动至回收站,获得电石。
protected function configure()
{
$this->setName('game:cave')
->setDescription('生成洞穴')
->addOption('cell',null,Option::VALUE_REQUIRED,"障碍占格子总数。此数量可影响洞穴中的障碍数量")
->addOption('stone',null,Option::VALUE_REQUIRED,"挖出总宝石数量")
->addOption('electric_stone',null,Option::VALUE_REQUIRED,"挖出总电石数量")
->addOption('stone_p',null,Option::VALUE_REQUIRED,"宝石矿石数量占比。最大值1,即100%;剩下则是电石矿石数量占比",0.3);
}
protected function execute(Input $input, Output $output)
{
$cell = $input->getOption("cell");
if(!$cell) {
$output->error("请输入障碍占格子总数-》cell");
return;
}
$maxCell = ceil((self::x_total * (self::y_total - 2)) / 2);
if($cell > $maxCell) {
$output->error("障碍占格子总数不能超过{$maxCell}-》cell");
return;
}
$stone = $input->getOption("stone");
if(!$stone) {
$output->error("请输入挖出总宝石数量-》stone");
return;
}
$electricStone = $input->getOption("electric_stone");
if(!$electricStone) {
$output->error("请输入挖出总电石数量-》electric_stone");
return;
}
$stonePercent = $input->getOption("stone_p");
if($stonePercent < 0 || $stonePercent > 1) {
$output->error("宝石矿石数量占比必须在0-1之前-》stone_p");
return;
}
if($stonePercent == 0 && $stone > 0) {
$output->error("设置的宝石矿石数量占比无法分配{$stone}的宝石-》stone,stone_p");
return;
}
if($stone == 0 && $stonePercent > 0) {
$output->error("设置的宝石矿石数量占比无法分配{$stone}的宝石-》stone,stone_p");
return;
}
if($stonePercent == 1 && $electricStone > 0) {
$output->error("设置的宝石矿石数量占比无法分配{$electricStone}的电石-》electric_stone,stone_p");
return;
}
if($electricStone == 1 && $stonePercent > 0) {
$output->error("设置的宝石矿石数量占比无法分配{$electricStone}的电石-》electric_stone,stone_p");
return;
}
$output->info("开始创建洞穴");
// 当前生成障碍已占用总格数
$hasCell = 0;
// 障碍数据
$obstacle = [];
// 已占用的最标点x,y
$isUsed = [];
$output->info("开始生成障碍数据");
while ($hasCell < $cell) {
// 随机x轴
$x_num = mt_rand(1,self::x_total);
// 随机y轴。y轴共12行,需留两行的空间用于派出miner占位
$y_num = mt_rand(1,self::y_total - 2);
$output->info("已获得障碍起点位置x:{$x_num},y:{$y_num}");
// 判断当前位置xy是否已被占用
if($isUsed && in_array("{$x_num},{$y_num}",$isUsed)) {
$output->info("障碍起点位置已被占用");
$output->info("已生成障碍占总格数{$hasCell}/{$cell}");
$output->info("重新获取");