Team project for university course.
Online multiplayer game for Android.
Players are spawned in a maze-like map generated on the fly. Before each round of game, one bullet is given to a random player (the rest have 0 bullets), and nobody knows who posesses the bullet. The round ends either when that single bullet hits somebody (in which case the player with the bullet gains points, and the dead player loses points) or when the round timer expires (in which case the player with the bullet loses points). Players can use mics in order to develop more elaborate strategies to the game.
The game consists of Android client and authoritative Java server, both built with Gradle. Client utilizes Android Studio, Java and LibGDX library for game front-end. Server utilized Amazon Web Services during the development (obviously, one can host the server on any machine). GRPC framework was exploited to communicate between clients and server.
Features:
- 3 different map generation algorithms (RANDOM, CAVES and DUNGEON)
- Server-side physics (for limiting cheating attempts)
- Client-side prediction, Server reconciliation and Entity interpolation (for smooth and ping-robust user experience)
- Manually implemented collision detection algorithms (circle-circle, circle-walls)
- Voice Chat (based on small library by EpicGuru: VoiceChat)
- Paste server machine IP address into "host" field in server.properties
- Modify "port-main" and "port-voice" fields in server.properties if the default ports (50051 and 50052) are in use by other processes.
- In server machine command-line:
./gradlew :run:server
- In Android Studio install the app on the physical device or emulator (or bundle an apk executable)