<?php
$system_names = array(
'hull', 'engine', 'battery', 'aux_power', 'sensors', 'dc', 'transporters', 'beam_weapon', 'torpedo_weapon', 'crew', 'marines'
);
$defender = array( /* ... */ );
$weapons = array(
'beam' => 10,
'torpedoes' => 12,
'majorLeafletCampaignFollowedUpByASeriesOfCharityDrives' => 100
);
function attack( $defender, $weapons, $system_names )
{
foreach($weapons as $weaponType => $count)
{
echo "Starting attack with $weaponType<br>";
for($i=0;$i<$count;$i++)
{
echo "$weaponType attack #$i<br>";
weaponAttack($defender, $system_names);
}
}
return $defender;
}
function shieldAdjustment( &$defender, $damage)
{
if ($defender['c_shield'] >= $damage)
{
$defender['c_shield'] = $defender['c_shield'] - $damage;
return 0;
}
$damage = $damage - $defender['c_shield'];
$defender['c_shield'] = 0;
return $damage;
}
function hullAdjustment( &$defender, $damage, $system_names )
{
if (($defender['c_hull']/$defender['m_hull']) >= 0.50)
{
if ($defender['c_hull'] >= $damage)
{
$defender['c_hull'] - $damage;
return;
}
}
else
while ($damage > 0)
{
$do_system_damage = $defender[ $system_names[ rand()%11 ] + 17 ];
if ($do_system_damage >= $damage)
{
$do_system_damage = $do_system_damage - $damage;
$damage = 0;
}
else
{
$damage = $damage - $do_system_damage;
$do_system_damage = 0;
}
}
}
function weaponAttack( &$defender, $system_names )
{
$damage = (rand()%5);
$damage = shieldAdjustment($defender, $damage);
if ($damage > 0)
hullAdjustment($defender, $damage, $system_names);
}
?>
This is probably not functional either, but showing some measure of generalization to split the large ball into little simple parts