/** * @inheritDoc */ public static function create($components) { // set timeout $moves = new self(); // no moves? if (count($components) == 1) { return $moves; } for ($i = 1; $i < count($components);) { switch ($components[$i + 1]) { case 'place_armies': $placeArmiesMove = new \Mastercoding\Conquest\Move\PlaceArmies(); $placeArmiesMove->setPlayerName($components[$i]); $placeArmiesMove->addPlaceArmies($components[$i + 2], $components[$i + 3]); $moves->addMove($placeArmiesMove); $i += 4; break; case 'attack/transfer': $attackTransferMove = new \Mastercoding\Conquest\Move\AttackTransfer(); $attackTransferMove->setPlayerName($components[$i]); $attackTransferMove->addAttackTransfer($components[$i + 2], $components[$i + 3], $components[$i + 4]); $moves->addMove($attackTransferMove); $i += 5; break; default: throw new \Mastercoding\Conquest\Command\Parser\GenericException('Invalid opponent moves'); } } return $moves; }
public function testAttackTransfer() { $move = new \Mastercoding\Conquest\Move\AttackTransfer(); $move->setPlayerName('test'); $move->addAttackTransfer(1, 3, 3); $move->addAttackTransfer(1, 4, 2); // output $this->assertEquals('test attack/transfer 1 3 3,test attack/transfer 1 4 2', $move->toString()); }
/** * @inheritDoc */ public function attackTransfer(\Mastercoding\Conquest\Command\Go\AttackTransfer $attackTransferCommand) { // move, move and amount left $move = new \Mastercoding\Conquest\Move\AttackTransfer(); $move->setPlayerName($this->getMap()->getYou()->getName()); // do all attack moves foreach ($this->attackTransferStrategies as $strategy) { // move $move = $strategy->attack($this, $move, $attackTransferCommand); // no move, overwrite if ($move instanceof \Mastercoding\Conquest\Move\NoMove) { break; } } // do transfers if (!$move instanceof \Mastercoding\Conquest\Move\NoMove) { // only one region picker can pick foreach ($this->attackTransferStrategies as $strategy) { // move $move = $strategy->transfer($this, $move, $attackTransferCommand); // no move if ($move instanceof \Mastercoding\Conquest\Move\NoMove) { break; } } } // no moves if (count($move->getAttackTransfer()) == 0) { $move = new \Mastercoding\Conquest\Move\NoMove(); } // return move return $move; }