/** * Match constructor. * @param Turn $turn1 * @param Turn $turn2 */ public function __construct($turn1, $turn2) { $this->turn1 = $turn1; $this->turn2 = $turn2; $this->player1 = $turn1->getPlayer()->getPlayerID(); $this->player2 = $turn2->getPlayer()->getPlayerID(); if ($this->player1 == $this->player2) { throw new MatchException('Must use two different players'); } return $this; }
public function start() { $players = $this->Players; while (!$this->isOnePlayerLost()) { $turn = new Turn($players); $turn->start(); $winner = $players[0]; $players = array_reverse($players); // Because there is only 2 Players } $this->setWinner($winner); }
function fromMode($id, &$hako) { global $init; if ($id) { $num = $hako->idToNumber[$id]; if ($hako->islands[$num]['isBF']) { $hako->islands[$num]['isBF'] = 0; $hako->islandNumberBF--; require_once APPPATH . '/model/hako-turn.php'; Turn::islandSort($hako); $hako->writeIslandsFile(); } } }
static function estimate($hako, &$island) { global $init; $land = $island['land']; $landValue = $island['landValue']; $area = 0; $pop = 0; $farm = 0; $factory = 0; $commerce = 0; $mountain = 0; $hatuden = 0; $home = 0; $monster = 0; $port = 0; $oil = 0; $soccer = 0; $park = 0; $stat = 0; $train = 0; $bank = 0; $m23 = 0; $fire = $rena = $base = 0; // 数える for ($y = 0; $y < $init->islandSize; $y++) { for ($x = 0; $x < $init->islandSize; $x++) { $kind = $land[$x][$y]; $value = $landValue[$x][$y]; if ($kind == $init->landShip) { $ship = Util::navyUnpack($value); if ($ship[0] != 0) { $tn = $hako->idToNumber[$ship[0]]; $tIsland =& $hako->islands[$tn]; $tIsland['ship'][$ship[1]]++; } else { $island['ship'][$ship[1]]++; } } if ($kind == $init->landOil) { $oil++; } if ($kind == $init->landSbase) { $base += 3; $fire += Util::expToLevel($kind, $value); } if ($kind == $init->landSdefence) { $base += $value; } if ($kind != $init->landSea && $kind != $init->landShip && $kind != $init->landSbase && $kind != $init->landSdefence && $kind != $init->landSsyoubou && $kind != $init->landOil) { if ($kind != $init->landNursery && $kind != $init->landSeaCity && $kind != $init->landFroCity && $kind != $init->landSfarm && $kind != $init->landZorasu) { $area++; } switch ($kind) { case $init->landTown: case $init->landSeaCity: case $init->landFroCity: case $init->landProcity: // 町 $base++; $pop += $value; break; case $init->landNewtown: // ニュータウン $pop += $value; $nwork = (int) ($value / 15); $commerce += $nwork; break; case $init->landBigtown: // 現代都市 $pop += $value; $mwork = (int) ($value / 20); $lwork = (int) ($value / 30); $farm += $mwork; $commerce += $lwork; break; case $init->landFarm: // 農場 if (Turn::countAround($land, $x, $y, 19, array($init->landFusya))) { // 周囲2へクスに風車があれば2倍の規模に $farm += $value * 2; } else { $farm += $value; } break; case $init->landSfarm: // 海底農場 $farm += $value; break; case $init->landNursery: // 養殖場 $farm += $value; break; case $init->landFactory: // 工場 $factory += $value; break; case $init->landCommerce: // 商業 $commerce += $value; break; case $init->landMountain: // 山 $mountain += $value; break; case $init->landHatuden: // 発電所 if ($island['zin'][4] == 1) { // ルナ所持 $hatuden += $value * 2; } else { $hatuden += $value; } break; case $init->landBase: // ミサイル $base += 2; $fire += Util::expToLevel($kind, $value); break; case $init->landMonster: case $init->landSleeper: // 怪獣 $monster++; break; case $init->landZorasu: // ぞらす $hatuden += $value; break; case $init->landPort: // 港 $port++; break; case $init->landStat: // 駅 $stat++; break; case $init->landTrain: // 電車 $train++; break; case $init->landSoccer: // スタジアム $soccer++; break; case $init->landPark: // 遊園地 $park++; break; case $init->landBank: // 銀行 $bank++; break; case $init->landMonument: // 記念碑 if ($value == 23) { $m23++; } break; case $init->landMyhome: // マイホーム $home++; break; } } } } // 代入 $island['pop'] = $pop; $island['area'] = $area; $island['farm'] = $farm; $island['factory'] = $factory; $island['commerce'] = $commerce; $island['mountain'] = $mountain; $island['hatuden'] = $hatuden; $island['home'] = $home; $island['oil'] = $oil; $island['monster'] = $monster; $island['port'] = $port; $island['stat'] = $stat; $island['train'] = $train; $island['soccer'] = $soccer; $island['park'] = $park; $island['bank'] = $bank; $island['m23'] = $m23; $island['fire'] = $fire; $island['rena'] = $fire + $base; // 電力消費量 if ($island['pop'] - $island['farm'] <= 0 || $island['factory'] + $island['commerce'] + $island['mountain'] <= 0) { $island['enesyouhi'] = 0; } elseif ($island['factory'] + $island['commerce'] + $island['mountain'] > 0) { $island['enesyouhi'] = min(round($island['pop'] - $island['farm']), $island['factory'] * 2 / 3 + $island['commerce'] * 1 / 3 + $island['mountain'] * 1 / 4); } // 電力過不足量 $island['enehusoku'] = $island['hatuden'] - $island['enesyouhi']; if ($island['soccer'] == 0) { $island['kachi'] = $island['make'] = $island['hikiwake'] = $island['kougeki'] = $island['bougyo'] = $island['tokuten'] = $island['shitten'] = 0; } $island['team'] = $island['kachi'] * 2 - $island['make'] * 2 + $island['hikiwake'] + $island['kougeki'] + $island['bougyo'] + $island['tokuten'] - $island['shitten']; if ($island['pop'] == 0) { $island['point'] = 0; } else { if ($island['isBF'] == 1) { $island['point'] = 100; } else { $island['point'] = ($island['pop'] * 15 + $island['money'] + $island['food'] + $island['farm'] * 2 + $island['factory'] + $island['commerce'] * 1.2 + $island['mountain'] * 2 + $island['hatuden'] * 3 + $island['team'] + $island['area'] * 5 + $island['taiji'] * 5 + $island['fire'] * 10 + $island['monster'] * 5) * 10; } } $island['seichi'] = 0; }
function execute() { $hako = new Hako(); $cgi = new Cgi(); $cgi->parseInputData(); $cgi->getCookies(); $fp = ""; if (!$hako->readIslands($cgi)) { HTML::header(); HakoError::noDataFile(); HTML::footer(); Util::unlock($lock); exit; } $lock = Util::lock($fp); if (FALSE == $lock) { exit; } $cgi->setCookies(); $_developmode = isset($cgi->dataSet['DEVELOPEMODE']) ? $cgi->dataSet['DEVELOPEMODE'] : ""; if (mb_strtolower($_developmode) == "javascript") { $html = new HtmlMapJS(); $com = new MakeJS(); } else { $html = new HtmlMap(); $com = new Make(); } switch ($cgi->mode) { case "turn": $turn = new Turn(); $html = new HtmlTop(); $html->header(); $turn->turnMain($hako, $cgi->dataSet); $html->main($hako, $cgi->dataSet); // ターン処理後、TOPページopen $html->footer(); break; case "owner": $html->header(); $html->owner($hako, $cgi->dataSet); $html->footer(); break; case "command": $html->header(); $com->commandMain($hako, $cgi->dataSet); $html->footer(); break; case "new": $html->header(); $com->newIsland($hako, $cgi->dataSet); $html->footer(); break; case "comment": $html->header(); $com->commentMain($hako, $cgi->dataSet); $html->footer(); break; case "print": $html->header(); $html->visitor($hako, $cgi->dataSet); $html->footer(); break; case "targetView": $html->head(); $html->printTarget($hako, $cgi->dataSet); //$html->footer(); break; case "change": $html->header(); $com->changeMain($hako, $cgi->dataSet); $html->footer(); break; case "ChangeOwnerName": $html->header(); $com->changeOwnerName($hako, $cgi->dataSet); $html->footer(); break; case "conf": $html = new HtmlTop(); $html->header(); $html->register($hako, $cgi->dataSet); $html->footer(); break; case "log": $html = new HtmlTop(); $html->header(); $html->log(); $html->footer(); break; default: $html = new HtmlTop(); $html->header(); $html->main($hako, $cgi->dataSet); $html->footer(); } Util::unlock($lock); exit; }
private function describeSpecialSkill(Turn $turn) { $retaliation = $turn->getAttack()->getRetaliation(); $this->displayTemplate(['attacker' => $turn->getAttacker()->getName(), 'defender' => $turn->getDefender()->getName(), 'health' => $turn->getAttacker()->getHealth(), 'damage' => isset($retaliation) ? $retaliation->getStrength() : false, 'luckyStrike' => $turn->getAttack()->isLucky(), 'stunningBlow' => $turn->getAttack()->isStunning(), 'counterAttack' => isset($retaliation)], self::SPECIAL_SKILL_TPL); }
function deleteIsland($hako, $data) { global $init; $log = new Log(); $id = $data['ISLANDID']; $num = $hako->idToNumber[$id]; $island = $hako->islands[$num]; // 島テーブルの操作 $island['point'] = 0; $island['pop'] = 0; $island['dead'] = 1; $tmpid = $island['id']; $log->deleteIsland($tmpid, $island['name']); if (is_file("{$init->dirName}/island.{$tmpid}")) { unlink("{$init->dirName}/island.{$tmpid}"); } // メインデータの操作 $hako->islands[$num] = $island; Turn::islandSort($hako); // 削除する島を最下位に移動 $hako->islandNumber -= 1; // 最下位削除 // データ書き出し $hako->writeIslandsFile($id); }
public function isEqual(Turn $other) { return $this->getNumber() === $other->getNumber() && $this->getPlayerNumber() === $other->getPlayerNumber(); }