Ответов: 6 Просмотров: 313
|
Здравтсвуйте.
Подскажите (желательно наглядно), как организовать в коде сражение двух армий.
Что-то я никак не соображу, может Вы чем поможете уважаемые знатоки.
Ситуация: нападает первая армия
если атакующая сила 1-й армии больше, чем защита одгого из юнитов в другой армии, то юнит из второй армии удаляется
далее атакует 2-я армия, ситуация таже, и так до конца, пока одна из армий не победит окончательно.
Подскажите реализацию в коде, допустим класс назевем Battle
Спасибо.
Приведу все классы для наглядности...
PHP:
скопировать код в буфер обмена
abstract class Unit { function addUnit() { echo get_class($this).' относиться к листьям'; } function removeUnit() { echo get_class($this).' относиться к листьям'; } abstract function bombardStrength(); abstract function defensiveStrenth(); } class Human extends Unit { function bombardStrength() { return 2; } function defensiveStrenth() { return 2; } } class GunCannon extends Unit { function bombardStrength() { return 5; } function defensiveStrenth() { return 5; } } class Army extends Unit { private $units = array(); function addUnit(Unit $unit) { if (in_array($unit, $this->units, true)) { return; } $this->units[] = $unit; } /* //5.3 function removeUnit() { $this->units = array_udiff($this->units, array($unit), function($a, $b) { return ($a === $b) ?0:1; } ); } */ //5.2 function removeUnit() { } function bombardStrength() { $ret = 0; foreach ($this->units as $unit) { $ret +=$unit->bombardStrength(); } return $ret; } function defensiveStrenth() { $ret = 0; foreach ($this->units as $unit) { $ret +=$unit->defensiveStrenth(); } return $ret; } }
Ну и соответственно создание и сражение
PHP:
скопировать код в буфер обмена
$Army1 = new Army(); $Army1->addUnit(new Human()); $Army1->addUnit(new Human()); $Army2 = new Army(); $Army2->addUnit(new GunCannon()); $Army2->addUnit(new Human()); $battle = new Battle(); $battle->execute($Army1, $Army2);
|