Космическа епопея
In progress!
История:
След като човечеството достигна технологично ниво, което му позволява да изследва космоса, различни корпорации и нации се състезават за ресурсите на отдалечените планети. Вашата задача е да управлявате една от тези мисии и да се превърнете в доминиращата космическа сила.
Правила и Цели:
-
Точки: Играчите натрупват точки чрез:
- Откриване на нови планети и обекти.
- Извличане на ресурси.
- Строене на сгради и кораби.
- Научни открития и технологични напредъци.
-
Космически Обекти:
- Планета: Някои планети имат редки ресурси, които могат да бъдат добивани. Атмосферата и климатът влияят на типа сгради, които можете да построите.
- Звезда: Звездите са източник на енергия и могат да бъдат използвани за захранване на вашите бази.
- Спътник: Изкуствените спътници могат да служат за комуникация или разузнаване.
-
Ресурси: Ресурсите са ключова част от играта. Необходими са за строене, изследвания и поддържане на вашите бази и кораби.
-
Строителство: Сградите ви позволяват да извличате ресурси, изследвате нови технологии, защитавате се и произвеждате кораби.
-
Технология: Технологичните изследвания ви позволяват да отключите нови сгради, кораби и умения.
-
Конфликти: В космоса не сте сами. Можете да се сблъскате с космически пирати или други играчи. Вашият успе х зависи от вашата стратегия и дипломатични умения.
-
Края на играта: Играта приключва, когато един от играчите постигне определен брой точки или след определен брой ходове. Победителят е този с най-много точки.
Космически Мисии: Разширено Задание 🌌🚀
Задача 1: Основни Класове и Обекти
-
Космически Обект (SpaceObject):
- Абстрактен клас.
- Атрибути:
name
,coordinateX
,coordinateY
,coordinateZ
,mass
. - Методи:
displayInfo()
.
-
Подкласове на Космически Обект:
- Всеки подклас наследява
SpaceObject
. - Подкласове включват
OrbitableSpaceObject
,Satellite
. OrbitableSpaceObject
е аб страктен клас (обект), който може да бъде обикалян от други обекти и трябва да има:- Aтрибути:
List<SpaceObject> orbiters
. - Mетоди:
addOrbiter(SpaceObject orbiter)
иList<SpaceObject> getOrbiters()
.
- Aтрибути:
- Всеки подклас наследява
-
Подкласове на OrbitableSpaceObject:
- Всеки подклас наследява
OrbitableSpaceObject
. - Подкласове включват
Star
,Planet
.
- Всеки подклас наследява
Задача 2: Интерфейси и Действия
-
NotValidSpaceObjectException Exception
- Персонализирано изключение, което се хвърля, когато се опитате да извършите действие върху невалиден обект. Представлява клас NotValidSpaceObjectException, който наследява Exception. В конструктора му се подава съобщение за грешка и се извиква конструктора на родителя с подаденото съобщение.
-
Orbiter интерфейс:
- Методи:
orbit(SpaceObject target)
. - Всяка планета може да обикаля около звезда, a спътник около планета. Ако
target
е невалиден, хвърляйте грешкаNotValidSpaceObjectException
.
- Методи:
-
Fly интерфейс:
- Метод:
flyTo(SpaceObject destination)
. - Позволява на космически кораби да пътуват до дадена планета.
- Метод:
Задача 3: Ресурси
-
Базов Ресурс (Resource):
- Атрибути:
amount
,harvestRate
. - Конструктор:
Resource(double amount, double harvestRate)
. - Методи:
harvest()
- Атрибути:
-
Конкретни Ресурси:
- Всяка планета може да съдържа различни комбинации от ресурси като
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
два пъти на ниво.
- Всяка планета може да съдържа различни комбинации от ресурси като
-
Ресурси на Планета:
- В класа
Planet
се дефинират ресурсите, които се съдържат на дадена планета. - Атрибути:
metal
,gas
,crystal
,uranium
. - Методи:
harvestMetal()
,harvestGas()
,harvestCrystal()
,harvestUranium()
,printResources()
.
- В класа
Задача 4: Сгради и Проучвания
-
Базова Сграда (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()
.
- Атрибути:
-
Конкретни Сгради:
- Например:
MetalMine
,CrystalMine
,GasRefinery
иResearchLab
,ShipYard
. MetalMine
иCrystalMine
могат да бъдат построени веднага. Другите сгради имат свои зависимости от ресурси или проучвания.
- Например:
-
Добавяне на Сгради към Планетата:
- В класа
Planet
трябва да се добави механизъм (напр. списък или масив) за съхраняване на построените сгради. - Метод в
Planet
, който позволява добавяне на нова сграда.
- В класа
Задача 5: Космически Кораби и Скаути
- Космически Кораб (SpaceShip):
- Атрибути:
type
,speed
,cargoCapacity
,weaponPower
. - Методи:
travel()
,harvestResource()
,attack()
.
- Атрибути:
- Скаути (Scout):
- Атрибути:
speed
,sensorRange
. - Методи:
explore()
,reportResources()
.
- Атрибути: