Skip to content

MariaFudulia/JAVA-TerraBot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

50 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Acest proiect implementeaza un simulator al unui ecosistem pe care TerraBot il descopera. Acest simulator contine o harta(Grid) alcatuita din mai multe celule(Cells) pe care se afla diferite entitati(Air, Soil, Animal, Plant and Water).

Designul proiectului se bazeaza pe distribuirea responsabilitatilor intre straturile de logica.

Pachetul 'entities': Acest strat foloseste principiile POO de mostenire si polimorfism pentru a defini comportamentul unic al fiecarui tip de entitate.

Pachetul 'entities.air' contine clasa abstracta de baza 'Air' care este extinsa de toate celelalte subclase care reprezinta diferite tipuri de aer. Clasa 'Air' contine atributele generale precum umiditate, nivelul de oxigen, etc. si metodele abstracte airQuality() si airToxicity().

Pachetele 'entities.soil', 'entities.animal' si 'entites.plants' aplica o logica asemanatoare cu 'entities.air'. Clasele Animal, Soil si Plant sunt extinse de subclasele care implementeaza comportamentul specific fiecarui subtip de entitate. Clasa Soil contine metodele abstracte soilQuality() si stuckSoilProbability(), bazate pe variabile specifice(ex: Salinity in Desert). Clasa Animal foloseste polimorfismul pentru a defini posibilitatea de atac a unui animal, bazandu-se pe tipul acestuia: getAnimalPossibilityToAttack(). Clasa Plant contine metodele abstracte getOxigenLevel() si getStuckProbability(). Nivelul de oxigen emanat de o planta variaza in functie de nivelul ei de maturitate.

Pachetul 'entities.water' contine o singura clasa 'Water', deoarece diferitele subtipuri de apa nu sunt relevante pentru implementarea ecosistemului.

Pachetul 'grid': Acest strat gestioneaza harta bidimeansionala a simularii si este esentiala pentru a controla localizarea si accesul la entitatile din ecosistem. Matricea Grid este implementata ca o matrice de obiecte de tip Cell care stocheaza starea intregii simulari. Metoda loadMap este responsabila de initializarea fiecarei celule din Grid cu tipurile de entitati primite la input. Grid ofera si metoda getCell care este punctul de acces pentru toate celelalte clase la harta.

Pachetul 'commands': Acest strat asigura coerenta simularii si separa logica de executie.

Clasa CommandProcessor gestioneaza logica de intrare/iesire si asigura secventialitatea simularilor. Este folosit un index intern 'simIndex' care ajuta maparea comezilor startSimulation la simularea curenta corespunzatoare. Metoda processCommand imparte responsabilitatea de executie catre metode ajutatoare(ex: manageStartSimulation, manageScanObject, etc.), aceasta implementare facilitand lizibilitatea codului si ajutand la modularizare.

Clasa Simulation stocheaza starea globala a simularii(harta Grid, robotul Robot si mediul Environment) si contine metodele specifice simularii: startSimulation endSimulation, printEnvConditions si printMap.

Clasa Environment implementeaza logica de actualizare a mediului si cea de schimbare a vremii prin metodele applyAutomaticUpdates si changeWeatherConditions. Metoda applyAutomaticUpdates este declansata la fiecare unitate de timp, inainte de a se executa comanda pentru simulare. Aceasta gestioneaza salturile in timp, verificand daca intervalul timestamp - lastTimestamp este mai mare decat 1. In caz afirmativ se foloseste o bucla interna pentru a simula fiecare actualizare automata pentru toti pasii de timp lipsa. Daca o schimbare de vreme este in desfasurare, singura actualizare permisa pentru aer este gestionata de metoda updateAirWeatherChange.

Pachetul 'commands.robot' contine clasele Robot, Inventory(inventarul robotului) si Databse(baza de date a robotului). Clasa Robot este agentul principal de interactiune si descoperire din simulare, functionand ca o interfata intre comenzi si actiuni. Mecanismul de miscare al robotului este gestionat de metoda moveRobot care foloseste metoda getBestCell pentru a identifica celula adiacenta cu cel mai mic scor de calitate. Energia consumata de aceasta comanda este egala cu scorul de calitate al celulei pe care se va muta.

Metoda learnFact consuma 2 puncte de energie si are conditia ca obiectul la care se refera sa fi fost deja scanat si adaugat in inventar. Se stocheaza o legatura subiect - component in database.facts, construind astfel baza de cunostinte a robotului.

Metoda improveEnvironment consuma 10 puncte de energie si ii permite robotului sa modifice parametrii celulei curente in functie de tipul de imbunatatire care se doreste a fi aplicat. Actiunea este permisa doar daca obiectul se afla deja in baza de date(a fost scanat la un pas anterior, database.hasBeenScanned) si faptul corespunzator imbunatatirii a fost invatat anterior(database.hasFact).

Metoda rechargeBattery seteaza campul isCharging = true si calculeaza timpul de incarcare, setand variabila timestampAtWhichIsCharged = currentTimestamp + energyPoints. Robotul va ramane pe loc si nu se vor mai putea aplica alte comenzi pana la incarcarea sa.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages