예제 #1
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;
 }
예제 #2
0
 function makeNewIsland()
 {
     global $init;
     $command = array();
     // 初期コマンド生成
     for ($i = 0; $i < $init->commandMax; $i++) {
         $command[$i] = array('kind' => $init->comDoNothing, 'target' => 0, 'x' => 0, 'y' => 0, 'arg' => 0);
     }
     $land = array();
     $landValue = array();
     if ($init->initialLand) {
         // 初期島データファイル使用モード
         // 基本形を作成
         $fp_i = fopen($init->initialLand, "r");
         $offset = 7;
         // 一対のデータが何文字か
         for ($y = 0; $y < $init->islandSize; $y++) {
             $line = chop(fgets($fp_i, READ_LINE));
             for ($x = 0; $x < $init->islandSize; $x++) {
                 $l = substr($line, $x * $offset, 2);
                 $v = substr($line, $x * $offset + 2, 5);
                 $land[$x][$y] = hexdec($l);
                 $landValue[$x][$y] = hexdec($v);
             }
         }
         fclose($fp_i);
     } else {
         if ($init->initialSize) {
             // 初期面積統一モード
             // 基本形を作成
             for ($y = 0; $y < $init->islandSize; $y++) {
                 for ($x = 0; $x < $init->islandSize; $x++) {
                     $land[$x][$y] = $init->landSea;
                     $landValue[$x][$y] = 0;
                 }
             }
             // 4*4に荒地を配置
             $center = $init->islandSize / 2 - 1;
             for ($y = $center - 1; $y < $center + 3; $y++) {
                 for ($x = $center - 1; $x < $center + 3; $x++) {
                     $land[$x][$y] = $init->landWaste;
                 }
             }
             // 島発見時の面積固定
             $size = 16;
             // 8*8範囲内に陸地を増殖
             while ($size < $init->initialSize) {
                 $x = Util::random(8) + $center - 3;
                 $y = Util::random(8) + $center - 3;
                 if (Turn::countAround($land, $x, $y, 7, array($init->landSea)) != 7) {
                     // 周りに陸地がある場合、浅瀬にする
                     // 浅瀬は荒地にする
                     // 荒地は平地にする
                     if ($land[$x][$y] == $init->landSea) {
                         if ($landValue[$x][$y] == 1) {
                             $land[$x][$y] = $init->landPlains;
                             $landValue[$x][$y] = 0;
                             $size++;
                         } else {
                             if ($land[$x][$y] == $init->landWaste) {
                                 $land[$x][$y] = $init->landPlains;
                                 $landValue[$x][$y] = 0;
                             } else {
                                 if ($landValue[$x][$y] == 1) {
                                     $land[$x][$y] = $init->landWaste;
                                     $landValue[$x][$y] = 0;
                                 } else {
                                     $landValue[$x][$y] = 1;
                                 }
                             }
                         }
                     }
                 }
             }
             // 森を作る
             $count = 0;
             while ($count < 4) {
                 // ランダム座標
                 $x = Util::random(4) + $center - 1;
                 $y = Util::random(4) + $center - 1;
                 // そこがすでに森でなければ、森を作る
                 if ($land[$x][$y] != $init->landForest) {
                     $land[$x][$y] = $init->landForest;
                     $landValue[$x][$y] = 5;
                     // 最初は500本
                     $count++;
                 }
             }
             $count = 0;
             while ($count < 2) {
                 // ランダム座標
                 $x = Util::random(4) + $center - 1;
                 $y = Util::random(4) + $center - 1;
                 // そこが森か町でなければ、町を作る
                 if ($land[$x][$y] != $init->landTown && $land[$x][$y] != $init->landForest) {
                     $land[$x][$y] = $init->landTown;
                     $landValue[$x][$y] = 5;
                     // 最初は500人
                     $count++;
                 }
             }
             // 山を作る
             $count = 0;
             while ($count < 1) {
                 // ランダム座標
                 $x = Util::random(4) + $center - 1;
                 $y = Util::random(4) + $center - 1;
                 // そこが森か町でなければ、町を作る
                 if ($land[$x][$y] != $init->landTown && $land[$x][$y] != $init->landForest) {
                     $land[$x][$y] = $init->landMountain;
                     $landValue[$x][$y] = 0;
                     // 最初は採掘場なし
                     $count++;
                 }
             }
             // 基地を作る
             $count = 0;
             while ($count < 1) {
                 // ランダム座標
                 $x = Util::random(4) + $center - 1;
                 $y = Util::random(4) + $center - 1;
                 // そこが森か町か山でなければ、基地
                 if ($land[$x][$y] != $init->landTown && $land[$x][$y] != $init->landForest && $land[$x][$y] != $init->landMountain) {
                     $land[$x][$y] = $init->landBase;
                     $landValue[$x][$y] = 0;
                     $count++;
                 }
             }
         } else {
             // 通常モード
             // 基本形を作成
             for ($y = 0; $y < $init->islandSize; $y++) {
                 for ($x = 0; $x < $init->islandSize; $x++) {
                     $land[$x][$y] = $init->landSea;
                     $landValue[$x][$y] = 0;
                 }
             }
             // 4*4に荒地を配置
             $center = $init->islandSize / 2 - 1;
             for ($y = $center - 1; $y < $center + 3; $y++) {
                 for ($x = $center - 1; $x < $center + 3; $x++) {
                     $land[$x][$y] = $init->landWaste;
                 }
             }
             // 8*8範囲内に陸地を増殖
             for ($i = 0; $i < 120; $i++) {
                 $x = Util::random(8) + $center - 3;
                 $y = Util::random(8) + $center - 3;
                 if (Turn::countAround($land, $x, $y, 7, array($init->landSea)) != 7) {
                     // 周りに陸地がある場合、浅瀬にする
                     // 浅瀬は荒地にする
                     // 荒地は平地にする
                     if ($land[$x][$y] == $init->landWaste) {
                         $land[$x][$y] = $init->landPlains;
                         $landValue[$x][$y] = 0;
                     } else {
                         if ($landValue[$x][$y] == 1) {
                             $land[$x][$y] = $init->landWaste;
                             $landValue[$x][$y] = 0;
                         } else {
                             $landValue[$x][$y] = 1;
                         }
                     }
                 }
             }
             // 森を作る
             $count = 0;
             while ($count < 4) {
                 // ランダム座標
                 $x = Util::random(4) + $center - 1;
                 $y = Util::random(4) + $center - 1;
                 // そこがすでに森でなければ、森を作る
                 if ($land[$x][$y] != $init->landForest) {
                     $land[$x][$y] = $init->landForest;
                     $landValue[$x][$y] = 5;
                     // 最初は500本
                     $count++;
                 }
             }
             $count = 0;
             while ($count < 2) {
                 // ランダム座標
                 $x = Util::random(4) + $center - 1;
                 $y = Util::random(4) + $center - 1;
                 // そこが森か町でなければ、町を作る
                 if ($land[$x][$y] != $init->landTown && $land[$x][$y] != $init->landForest) {
                     $land[$x][$y] = $init->landTown;
                     $landValue[$x][$y] = 5;
                     // 最初は500人
                     $count++;
                 }
             }
             // 山を作る
             $count = 0;
             while ($count < 1) {
                 // ランダム座標
                 $x = Util::random(4) + $center - 1;
                 $y = Util::random(4) + $center - 1;
                 // そこが森か町でなければ、町を作る
                 if ($land[$x][$y] != $init->landTown && $land[$x][$y] != $init->landForest) {
                     $land[$x][$y] = $init->landMountain;
                     $landValue[$x][$y] = 0;
                     // 最初は採掘場なし
                     $count++;
                 }
             }
             // 基地を作る
             $count = 0;
             while ($count < 1) {
                 // ランダム座標
                 $x = Util::random(4) + $center - 1;
                 $y = Util::random(4) + $center - 1;
                 // そこが森か町か山でなければ、基地
                 if ($land[$x][$y] != $init->landTown && $land[$x][$y] != $init->landForest && $land[$x][$y] != $init->landMountain) {
                     $land[$x][$y] = $init->landBase;
                     $landValue[$x][$y] = 0;
                     $count++;
                 }
             }
         }
     }
     return array('money' => $init->initialMoney, 'food' => $init->initialFood, 'land' => $land, 'landValue' => $landValue, 'command' => $command, 'prize' => '0,0,', 'taiji' => 0);
 }