Hoops is a real-time, networked multiplayer basketball game built with a custom client–server architecture. The game supports multiple concurrent players, authoritative server-side state, and real-time synchronization of player movement and ball physics across clients.
This project was developed over an entire semester as a large-scale implementation based on an original design document.
Current Server: http://localhost:4041
From the repo root you have two projects:
Hoops→ LibGDX desktop clientHOOPS_Server→ Netty/JavaFX backend
-
Backend:
- Server
- Netty
transporthandlercodeccodec-httpbuffer
- Netty
- Database
- PostgreSQL JDBC Driver
- Security
- JBCrypt
- Environment Config
- java-dotenv
- Json
- GSON (Java)
- UI
- JavaFX 21
- Testing
- JUnit 5
- Server
-
Frontend:
- Game
- LibGDX
com.badlogicgames.gdx:gdxgdx-backend-lwjgl3gdx-platform:natives-desktopgdx-freetypegdx-freetype-platform:natives-desktop
- VisUI
- LibGDX
- Client
- Netty
transporthandlercodeccodec-httpbuffer
- Netty
- Json
- GSON (Java)
- Testing
- JUnit 5
- Game
- Make sure in the root of both Client + Server code
| Client Root (Hoops/) | Server Root (HOOPS_Server/) |
|---|---|
aryanrogye@[master]: Hoops/
⮕ ls
bin
build
gradle
src
build.gradle.kts
gradlew
gradlew.bat
Makefile // what we want
README.md
settings.gradle.kts |
aryanrogye@[master]: HOOPS_Server/
⮕ ls
${workspaceFolder}
bin
build
gradle
src
target
build.gradle.kts
gradlew
gradlew.bat
GUI_README.md
Makefile // what we want
settings.gradle.kts |
.env (values shown are placeholders)
HOST=aws-......
PORT=someport
DATABASE=postgres
DB_USER=postgres.some_numbers
POOL_MODE=session
DATABASE_PASSWORDA=db_password
# FOR TESTS THIS WOULD BE CONFIGURED WITH USERS DB VALUES
# SEE "./HOOPS_Server/src/test/java/com/hoops/db/DatabaseManagerTest.java"
TEST_EXISTING_EMAIL=aryan.rogye@gmail.com
TEST_EXISTING_USERNAME=aryan_rogye
TEST_EXISTING_PASSWORD=hoops_password
TEST_EXISTING_TOKEN=4a870bdb-e1c8-4676-bdf4-33bd8387920a
TEST_EXISTING_ID=194fdbf0-e5d8-4230-95bb-282891e9cebeNote for Graders / Reviewers:
The project requires a valid.envfile with real database credentials to fully run the backend tests.
For security reasons these values are not included in the repository.
If you need a working.envto run or verify the project, email me at arogy2@uic.edu and I will provide it.
-
make runTo run each projectEach project has a makefile which is only running
./gradlew runin both roots -
To run multiple clients, go to the repo root (the folder that has both
Hoops/andHOOPS_Server/):
aryanrogye@[master]: Hoops/
⮕ ls
...
..
Hoops
HOOPS_Server
run4Clients.py
...
..-
./run4Clients.pyRuns 4 clients at a time -
Release Jars:
Temporarily not working, Built Jar keeps crashing
- From the repo root run
./build_release.sh releaseto build the client (overlay disabled) and server jars in one shot. Artifacts land inbuild/client/HoopsClient-release.jarandbuild/server/HoopsServer.jar. - Use
./build_release.sh debugwhen you want a client jar with the DebugOverlay enabled for internal testing (build/client/HoopsClient-debug.jar). - You can still run each project directly:
cd Hoops && GRADLE_USER_HOME=.gradle ./gradlew shadowJar -PdebugOverlayEnabled=falsefor the client andcd HOOPS_Server && GRADLE_USER_HOME=.gradle ./gradlew shadowJarfor the server.
- From the repo root run
- For Lan IP Sharing + Testing, some basic permission setup:
chmod +x ip_logger.py chmod +x ip_dispatcher.py
- Testing LocalHost is fine, the client knows about this
- While Testing Server on LAN with multiple users, we came up with a fast way, if and only if, the user is in the git repo
./ip_logger.py
- This fills in the
ip_config.jsonin the root, and it asks if the user wants to push the changes to git - Any other user can run:
./ip_dispatcher.py
- This will look for a Client.java file and updated the ip line with correct information