예제 #1
0
파일: Match.php 프로젝트: CyphriX/RPSLS
 /**
  * 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;
 }
예제 #2
0
 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);
 }
예제 #3
0
파일: bf.php 프로젝트: hiro0218/hakoniwa
 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();
         }
     }
 }
예제 #4
0
 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;
 }
예제 #5
0
파일: main.php 프로젝트: hiro0218/hakoniwa
 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;
 }
예제 #6
0
 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);
 }
예제 #7
0
 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);
 }
예제 #8
0
 public function isEqual(Turn $other)
 {
     return $this->getNumber() === $other->getNumber() && $this->getPlayerNumber() === $other->getPlayerNumber();
 }