Skip to main content

Космическа епопея - Изключения в Java

Splash

In progress!

История:

След като човечеството достигна технологично ниво, което му позволява да изследва космоса, различни корпорации и нации се състезават за ресурсите на отдалечените планети. Вашата задача е да управлявате една от тези мисии и да се превърнете в доминиращата космическа сила.

Правила и Цели:

  1. Точки: Играчите натрупват точки чрез:

    • Откриване на нови планети и обекти.
    • Извличане на ресурси.
    • Строене на сгради и кораби.
    • Научни открития и технологични напредъци.
  2. Космически Обекти:

    • Планета: Някои планети имат редки ресурси, които могат да бъдат добивани. Атмосферата и климатът влияят на типа сгради, които можете да построите.
    • Звезда: Звездите са източник на енергия и могат да бъдат използвани за захранване на вашите бази.
    • Спътник: Изкуствените спътници могат да служат за комуникация или разузнаване.
  3. Ресурси: Ресурсите са ключова част от играта. Необходими са за строене, изследвания и поддържане на вашите бази и кораби.

  4. Строителство: Сградите ви позволяват да извличате ресурси, изследвате нови технологии, защитавате се и произвеждате кораби.

  5. Технология: Технологичните изследвания ви позволяват да отключите нови сгради, кораби и умения.

  6. Конфликти: В космоса не сте сами. Можете да се сблъскате с космически пирати или други играчи. Вашият успех зависи от вашата стратегия и дипломатични умения.

  7. Края на играта: Играта приключва, когато един от играчите постигне определен брой точки или след определен брой ходове. Победителят е този с най-много точки.

Космически Мисии: Разширено Задание 🌌🚀

Задача 1: Основни Класове и Обекти

  1. Космически Обект (SpaceObject):

    • Абстрактен клас.
    • Атрибути: name, coordinateX, coordinateY, coordinateZ, mass.
    • Методи: displayInfo().
  2. Подкласове на Космически Обект:

    • Всеки подклас наследява SpaceObject.
    • Подкласове включват OrbitableSpaceObject, Satellite.
    • OrbitableSpaceObject е абстрактен клас (обект), който може да бъде обикалян от други обекти и трябва да има:
      • Aтрибути: List<SpaceObject> orbiters.
      • Mетоди: addOrbiter(SpaceObject orbiter) и List<SpaceObject> getOrbiters().
  3. Подкласове на OrbitableSpaceObject:

    • Всеки подклас наследява OrbitableSpaceObject.
    • Подкласове включват Star, Planet.

Задача 2: Интерфейси и Действия

  1. NotValidSpaceObjectException Exception

    • Персонализирано изключение, което се хвърля, когато се опитате да извършите действие върху невалиден обект. Представлява клас NotValidSpaceObjectException, който наследява Exception. В конструктора му се подава съобщение за грешка и се извиква конструктора на родителя с подаденото съобщение.
  2. Orbiter интерфейс:

    • Методи: orbit(SpaceObject target).
    • Всяка планета може да обикаля около звезда, a спътник около планета. Ако target е невалиден, хвърляйте грешка NotValidSpaceObjectException.
  3. Fly интерфейс:

    • Метод: flyTo(SpaceObject destination).
    • Позволява на космически кораби да пътуват до дадена планета.

Задача 3: Ресурси

  1. Базов Ресурс (Resource):

    • Атрибути: amount, harvestRate.
    • Конструктор: Resource(double amount, double harvestRate).
    • Методи: harvest()
  2. Конкретни Ресурси:

    • Всяка планета може да съдържа различни комбинации от ресурси като Metal, Gas, Crystal, и Uranium. Всеки ресурс има различни характеристики, като harvestRate е стандартната скорост на добиване на ресурса със стойност 1.0. Например, Metal има harvestRate 1.0, Gas има harvestRate 0.5, Crystal има harvestRate 0.2, и Uranium има harvestRate 0.1. Скоростта на добив може да бъде увеличена чрез изследвания и сгради, за да се увеличи harvestRate на даден ресурс. Например, за да се увеличи harvestRate на Metal, трябва да се построи Metal Mine, като всяко ниво увеличава добива два пъти. Аналогично, Gas Refinery увеличава harvestRate на Gas два пъти на ниво, Crystal Mine увеличава harvestRate на Crystal два пъти на ниво, и Uranium Mine увеличава harvestRate на Uranium два пъти на ниво.
  3. Ресурси на Планета:

    • В класа Planet се дефинират ресурсите, които се съдържат на дадена планета.
    • Атрибути: metal, gas, crystal, uranium.
    • Методи: harvestMetal(), harvestGas(), harvestCrystal(), harvestUranium(), printResources().

Задача 4: Сгради и Проучвания

  1. Базова Сграда (BaseBuilding):

    • Атрибути: name, level, constructionTime, {metal,crystal,gas,uranium}Required.
    • Getters за всички атрибути.
    • Конструктор: BaseBuilding(String name, int level, int constructionTime, double metalRequired, double crystalRequired, double gasRequired, double uraniumRequired).
    • Методи: construct(Planet target), upgrade(), applyEffect().
  2. Конкретни Сгради:

    • Например: MetalMine, CrystalMine, GasRefinery и ResearchLab, ShipYard.
    • MetalMine и CrystalMine могат да бъдат построени веднага. Другите сгради имат свои зависимости от ресурси или проучвания.
  3. Добавяне на Сгради към Планетата:

    • В класа Planet трябва да се добави механизъм (напр. списък или масив) за съхраняване на построените сгради.
    • Метод в Planet, който позволява добавяне на нова сграда.

Задача 5: Космически Кораби и Скаути

  1. Космически Кораб (SpaceShip):
    • Атрибути: type, speed, cargoCapacity, weaponPower.
    • Методи: travel(), harvestResource(), attack().
  2. Скаути (Scout):
    • Атрибути: speed, sensorRange.
    • Методи: explore(), reportResources().