/**
  * @param CombatReport $combatreport
  * @param integer $startRound
  * @param integer $endRound
  * @throws Exception
  * @return CombatParty[]
  */
 public static function calculate($combatreport, $startRound, $endRound)
 {
     //TODO:: Throw decent exeption
     if ($endRound < $startRound) {
         throw new Exception('CombatReport_Result: Your starting round should be greater than your ending round.');
     }
     if ($endRound > 6) {
         throw new Exception('CombatReport_Result: OGame has a maximum of 6 rounds.');
     }
     if ($startRound === 0) {
         $startAttackers = $combatreport->getAttackerParty()->getPlayers();
         $startDefenders = $combatreport->getDefenderParty()->getPlayers();
     } else {
         $startAttackers = $combatreport->getRound($startRound)->getAttackersDetails();
         $startDefenders = $combatreport->getRound($startRound)->getDefendersDetails();
     }
     if ($endRound === 0) {
         $endAttackers = $combatreport->getAttackerParty()->getPlayers();
         $endDefenders = $combatreport->getDefenderParty()->getPlayers();
     } else {
         $endAttackers = $combatreport->getRound($endRound)->getAttackersDetails();
         $endDefenders = $combatreport->getRound($endRound)->getDefendersDetails();
     }
     $self = new self();
     $self->setAttackers(self::getFleetDifferences($startAttackers, $endAttackers, clone $combatreport->getAttackerParty()));
     $self->setDefenders(self::getFleetDifferences($startDefenders, $endDefenders, clone $combatreport->getDefenderParty()));
     return $self;
 }