WIP: перед введенимем класса Fighter.php
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
<?php
|
||||
|
||||
namespace Battle\Priem;
|
||||
|
||||
abstract class AbstractPriem implements PriemInterface
|
||||
{
|
||||
protected int $caster;
|
||||
protected string $name;
|
||||
protected string $icon;
|
||||
|
||||
protected int $power;
|
||||
|
||||
/**
|
||||
* На кого применяем приём. Например:
|
||||
* self, static_friend, static_enemy, random_friend, random_enemy, random_friend_group, random_enemy_group,
|
||||
* all_friend, all_enemy, all,...
|
||||
* @var int
|
||||
*/
|
||||
protected int $targetType;
|
||||
|
||||
/**
|
||||
* Массив id союзников
|
||||
* @var array
|
||||
*/
|
||||
protected array $friendTeam;
|
||||
|
||||
/** Массив id противников
|
||||
* @var array
|
||||
*/
|
||||
protected array $enemyTeam;
|
||||
|
||||
public function __construct(
|
||||
int $caster,
|
||||
array $friendTeam,
|
||||
array $enemyTeam,
|
||||
int $targetType,
|
||||
string $name,
|
||||
string $icon = '',
|
||||
) {
|
||||
$this->caster = $caster;
|
||||
$this->friendTeam = $friendTeam;
|
||||
$this->enemyTeam = $enemyTeam;
|
||||
$this->targetType = $targetType;
|
||||
$this->icon = $icon;
|
||||
$this->name = $name;
|
||||
}
|
||||
|
||||
protected function getTarget(): array
|
||||
{
|
||||
$targets = [];
|
||||
$allExceptCaster = array_merge($this->friendTeam, $this->enemyTeam);
|
||||
switch ($this->targetType) {
|
||||
case self::TAGRET_SELF:
|
||||
$targets[] = $this->caster;
|
||||
break;
|
||||
case self::TARGET_RANDOM_ENEMY:
|
||||
shuffle($this->enemyTeam);
|
||||
$targets[] = end($this->enemyTeam);
|
||||
break;
|
||||
case self::TARGET_RANDOM_FRIEND:
|
||||
shuffle($this->friendTeam);
|
||||
$targets[] = end($this->friendTeam);
|
||||
break;
|
||||
case self::TARGET_RANDOM:
|
||||
shuffle($allExceptCaster);
|
||||
$targets[] = end($allExceptCaster);
|
||||
break;
|
||||
case self::TARGET_RANDOM_ENEMIES:
|
||||
for ($i = 1; $i <= count($this->enemyTeam); $i++) {
|
||||
if ($i > 1 && mt_rand(1,2) === 1) {
|
||||
continue;
|
||||
}
|
||||
shuffle($this->enemyTeam);
|
||||
$targets[] = array_shift($this->enemyTeam);
|
||||
}
|
||||
break;
|
||||
case self::TARGET_RANDOM_FRIENDS:
|
||||
for ($i = 1; $i <= count($this->friendTeam); $i++) {
|
||||
if ($i > 1 && mt_rand(1,2) === 1) {
|
||||
continue;
|
||||
}
|
||||
shuffle($this->friendTeam);
|
||||
$targets[] = array_shift($this->friendTeam);
|
||||
}
|
||||
break;
|
||||
case self::TARGET_RANDOMS:
|
||||
for ($i = 1; $i <= count($allExceptCaster); $i++) {
|
||||
if ($i > 1 && mt_rand(1,2) === 1) {
|
||||
continue;
|
||||
}
|
||||
shuffle($allExceptCaster);
|
||||
$targets[] = array_shift($allExceptCaster);
|
||||
}
|
||||
break;
|
||||
case self::TARGET_ALL_ENEMIES:
|
||||
$targets = $this->enemyTeam;
|
||||
break;
|
||||
case self::TARGET_ALL_FRIENDS:
|
||||
$targets = $this->friendTeam;
|
||||
break;
|
||||
case self::TARGET_ALL:
|
||||
$targets = $allExceptCaster;
|
||||
$targets[] = $this->caster;
|
||||
break;
|
||||
}
|
||||
return $targets;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает иконку приёма. В текущей реализации у каждого приёма должна быть иконка.
|
||||
* @return string
|
||||
*/
|
||||
abstract public function getIcon(): string;
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
<?php
|
||||
|
||||
namespace Battle\Priem;
|
||||
|
||||
class Priem extends AbstractPriem
|
||||
{
|
||||
|
||||
/*
|
||||
|
||||
id, name, image,
|
||||
damage_type_value: static, +value,
|
||||
damage_time: now, next_turn, x_turns,
|
||||
target: self, static_friend, static_enemy, random_friend, random_enemy, random_friend_group, random_enemy_group, all_friend, all_enemy, all,
|
||||
damage_type: physical (колка, рубка, резка, дробка), magical (water, air, earth, fire,)
|
||||
|
||||
physical: {
|
||||
type: [static, +value,]
|
||||
time: [now, next_turn, x_turns,]
|
||||
target: [static_enemy,]
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
protected int $power;
|
||||
private array $targets;
|
||||
|
||||
/**
|
||||
* @param int $caster
|
||||
* @param array $friendTeam
|
||||
* @param array $enemyTeam
|
||||
* @param int $targetType
|
||||
* @param int $power
|
||||
* @param int $powerType static, +value,
|
||||
* @param string $name
|
||||
* @param int $activeTurns количество ходов которое будет применяться приём. 0 - выполнить в текущий ход.
|
||||
* @param string $icon
|
||||
*/
|
||||
public function __construct(
|
||||
int $caster,
|
||||
array $friendTeam,
|
||||
array $enemyTeam,
|
||||
int $targetType,
|
||||
int $power,
|
||||
int $powerType,
|
||||
string $name,
|
||||
int $activeTurns = 1,
|
||||
string $icon = '',
|
||||
) {
|
||||
parent::__construct($caster, $friendTeam, $enemyTeam, $targetType, $name, $icon);
|
||||
$this->power = $power;
|
||||
$this->targets = $this->getTarget();
|
||||
|
||||
}
|
||||
|
||||
public function getIcon(): string
|
||||
{
|
||||
return $this->icon;
|
||||
}
|
||||
|
||||
public function getTargetType(): int
|
||||
{
|
||||
return $this->targetType;
|
||||
}
|
||||
|
||||
public function getTarget(): array
|
||||
{
|
||||
return $this->targets;
|
||||
}
|
||||
|
||||
public function getPower(): int
|
||||
{
|
||||
return $this->power;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//$pr = new Priem(45,[1,2,3],[4,5,6],5,44,'Kaboom!', 'kaboom.gif');
|
||||
//$pr->
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace Battle\Priem;
|
||||
|
||||
interface PriemInterface
|
||||
{
|
||||
public const DAMAGE = 1;
|
||||
public const HEAL = 2;
|
||||
|
||||
public const TAGRET_SELF = 1; //Приём на себя
|
||||
public const TARGET_CUSTOM = 2; //Приём на конкретного персонажа
|
||||
public const TARGET_RANDOM_ENEMY = 3; //Приём на случайного врага
|
||||
public const TARGET_RANDOM_FRIEND = 4; //Приём на случайного друга
|
||||
public const TARGET_RANDOM = 5; //Приём на случайного персонажа
|
||||
public const TARGET_RANDOM_ENEMIES = 6; //Приём на случайных врагов
|
||||
public const TARGET_RANDOM_FRIENDS = 7; //Приём на случайных друзей
|
||||
public const TARGET_RANDOMS = 8; //Приём на случайных персонажей
|
||||
public const TARGET_ALL_ENEMIES = 9; //Приём на всех врагов
|
||||
public const TARGET_ALL_FRIENDS = 10; //Приём на всех друзей
|
||||
public const TARGET_ALL = 11; //Приём на всех персонажей
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Возвращает тип цели к которым применяется приём.
|
||||
* @return int
|
||||
*/
|
||||
public function getTargetType(): int;
|
||||
|
||||
/**
|
||||
* Возвращает силу действия приёма. Параметр на который изменится та или иная характеристика. Урон для боевых,
|
||||
* количество восстановленого здоровья для лечения, количество процентов для процентных значений.
|
||||
* @return int
|
||||
*/
|
||||
public function getPower(): int;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace Battle\Priem;
|
||||
|
||||
class UsePriem
|
||||
{
|
||||
|
||||
public function __construct(Priem $priem) {
|
||||
$damage = $priem->getPower();
|
||||
$targets = $priem->getTarget();
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user