MapMystery is a Geoguessr-like game designed to test your geographical knowledge and observational skills. The goal of this project is to create an engaging and educational experience that allows users to guess locations based on images provided by the Google API. This project is developed using Java with Springboot for the backend and React for the frontend.
- Java with Springboot: Backend development
- Websockets: Real-time communication
- Spring Boot Starter Mail, JavaMailAPI: Email service
- JPA (Java Persistence API): Database management
- Google API: Image gathering for the game
- JUnit: Testing
- Spring Security: Password Management
- SonarQube: Static code analysis
- UserController: link: Manages endpoints for creating users, managing friend request and settings
- LobbyController link: Main game logic for initalising games both public and private, tracking scoring
- LobbyService link:
- "putToSomeLobby" - Logic for a public player joining any lobby
- "joinLobby" - Logic for joining a specific Lobby can be private just requires authentication parameter
- "kickOutInactivePlayers" - Logic for removing players who have left the lobby
- "createAndSendLeaderBoard" - tallying points and returing to the client side interface.
- StreetViewService: link: Managing API calls to google, has exposed API_KEY
To get started with MapMystery, follow these steps:
- Clone the Repository:
git clone <repository_url>
You can use the local Gradle Wrapper to build the application.
- macOS:
./gradlew
- Linux:
./gradlew
- Windows:
./gradlew.bat
More Information about Gradle Wrapper and Gradle.
./gradlew build
./gradlew bootRun
You can verify that the server is running by visiting localhost:8080
in your browser.
./gradlew test
You can start the backend in development mode, this will automatically trigger a new build and reload the application once the content of a file has been changed.
Start two terminal windows and run:
./gradlew build --continuous
and in the other one:
./gradlew bootRun
If you want to avoid running all tests with every change, use the following command instead:
./gradlew build --continuous -xtest
We recommend using Postman to test your API Endpoints.
Future enhancements and features for MapMystery:
- Better management of exposed API_KEYS and EMAIL information
- Addition of different rounds for main gamemode Globe Guesser - A countries based point system (in the same country = max points) - Head to head battle with depleting score - Custom maps with only certain locations
- Improvement of chat functionality to allow individual chats between players
- Implementation of tip system for developers
- Sam Wallace: backend developer
- David Sanchez backend developer
- Nils Jacobi: frontend developer
- Tim: frontend developer
- Joshua Winterflood frontend/backend developer
Special thanks to all contributors and testers.
This project is licensed under the MIT License - see the LICENSE.md file for details.