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 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); }