Strafer Liberator - Utilitar - Dolj - Lucrari 2022 Nationala

Informatii generale

Descriere

Strafer Liberator este un joc Open-World action-RPG, in care jucatorul ia rolul unui astronaut care s-a prabusit pe o planeta straina. Pe parcursul jocului, el afla secretele planetei pe care se afla si incearca sa scape din acest loc uitat de lume. Cu ajutorul instrumentelor pe care trebuie sa le obtina, el este fortat sa supravietuiasca atacurilor creaturilor si robotilor.

Tehnologii utilizate:

Limbaje de programare:
-Java
-C++

Framework-uri:
-libGDX
-Greenfoot
-tileson

Aplicatii utilizate in realizarea proiectului:
-Eclipse IDE
-NetBeans IDE
-Visual Studio IDE
-Android Studio IDE
-Greenfoot
-Oxygen XML editor
-JProfiler
-Install4j
-Launch4j
-Tiled
-Aseprite
-Photoshop
-Adobe Audition
-Audacity

Alte tehnologii:
-Git
-Json
-Gradle
-Maven
-Xml
-Gdx-setup
-Regex

Sisteme pe care ruleaza:
-Windows
-Linux(testat pe Ubuntu20, Mint, Manjaro)
-MacOS
-Android

Tehnologii

Aceasta este o descriere in mare pentru caracteristicile importante ale proiectului. Fiecare clasa mentionata este detaliata in documentatia tehnica. De asemenea fiecare procedeu de deploy si build sunt detaliate separat

Generarea proiectelor cu libGDX
FrameWorkul libGDX ofera un setup tool care foloseste Gradle si Maven pentru generarea proiectelor core(fisiere crossplatform) si celor specifice pentru fiecare platforma

Portul din Greenfoot in libGDX
Proiectul a fost la inceput realizat in interfata Greenfoot. Deoarece acesta a devenit prea complex, pentru etapa nationala am decis sa il portam utilizand frameworkul libGDX.
Pentru inceput am portat clasele din API-ul Greenfoot folosind gdx.scene2d. Aceste clase sunt intr-un package separat de restul proiectului si pot fi folosite pentru a face orice proiect Greenfoot backwards-compatible.
LibGDX permite extinderea catre orice platforma care ruleaza JVM, astfel eliminand nevoia unui GUI in care proiectele trebuie rulate( asa cum este Greenfoot) si limitarile tehnice asociate.

AssetManagerul si Grafica:
Asseturile sunt create de noi de la grafica pana la sunet sau sunt fara copyright(in cazul tile-urilor). Aceste asseturi sunt incarcate in joc pe thread-uri diferite pentru a creste performanta. Acest lucru impreuna cu utilizarea JProfiler a imbunatatit numarul de FPS prezent in Greenfoot(in general 45 la rezolutie de 1024x576), putand rula acum constant la refresh rate-ul oricarui display in fullscreen cu vsync.
Rezolutia este setata dinamic in functie de displayul utilizat.

Generarea de mape:
Lumea jocului este formata din mai multe sectiuni memorate sub forma de graf pentru a tine cont de legaturile dintre ele si de pozitiile in intreaga lume a jocului. Atributele acestora (matricea de pathfind si obiectele din lume) sunt incarcate in memorie in functie de ce distanta a parcurs playerul. Deoarece suprafata totala este de peste 400 de milioane de pixeli patrati era imposibil ca obiectele ce exista in fiecare sectiune sa fie adaugate manual(ex pereti, npc uri, iteme), dar simultan ar fi implicat un cost prea mare de timp sa fie citite din fisiere la runtime.Am decis sa scriem o aplicatie auxiliara ce poate scrie automat codul necesar pentru inititalizarea obiectelor pe harta. Folosind aplicatia Tiled, am exportat layerele din fiecare WorldSection in format json, fiind apoi parsate de aplicatia noastra MapGen(scrisa in C++17 cu frameworkul Tileson), care mai apoi poate genera matricele necesare pentru pathfindingul npc-urilor si clasele efective in care sunt definite sectiunile (WorldSection<11-23>).

Scrollerul
Scrollerul este o clasa care comunica simuleaza o camera fixata pe player, oferind un spatiu de joc mai mare decat rezolutia ecranului.

SaveSystemul
In joc exista implementat un sistem de salvari care este legat la meniuri, dialoguri si la sistemul de eventuri. Acesta tine cont de parcursul jucatorului in povestea jocului, de ce iteme obtine, viata acestuia, pozitia, etc. Aceste salvari pot fi transferate si permit continuarea jocului mai tarziu.

Coliziunea
Coliziunea intre actori a fost realizata in maniera AABB(axis aligned bounding box)

Sistemul de paint
Ca fiecare actor sa fie desenat pe ecran in ordinea logica(ex playerul sub meniuri, butoanele peste meniuri etc) am creat o clasa de Paint Utilities ce contine doua Hashmapuri .

Distribuirea aplicatiei
Pe mobile aceasta este instalata cu un fisier APK
Pe Linux/Mac este nevoie de JRE 11 si de JAR ul aplicatiei ce poate fi rulat din terminal
Pe Windows avem un fisier executabil generat cu launch4j distribuit cu un installer care are bundle JRE, construit cu Install4j

Cerinte sistem

Cerinte minime Desktop:
8GB RAM
3GB ROM(repository)
1GB ROM(instalat)
Procesor 2.5GHz

Cerinte minime Mobile:
Android 11+
6GB RAM

A fost testat pe:

Desktop(Windows+Linux):
Procesor AMD Ryzen 5600
Placa Video nVidia RTX 2070super
16GB RAM

Mobile:
Google pixel 6

Realizatori

Mihai-Nicusor Stoica

  • Scoala: Colegiul National “Carol I”
  • Clasa: 11
  • Judet: Dolj
  • Oras: Craiova

Marius-Razvan Tudosie

  • Scoala: Colegiul National “Carol I”
  • Clasa: 11
  • Judet: Dolj
  • Oras: Craiova

Screenshots