Falling Words is a small language game. The player will see a word in language one" on the screen. While this word is displayed, a word in language two will fall down on the screen. The player will have to choose if the falling word is the correct or incorrect translation. A timer counts as the word falls to the bottom of the screen, before which the player should have given an answer. The player needs to answer, before the word reaches the bottom of the screen. The Game is build with modern Android tech-stacks and MVVM architecture. Fetching data from the local json via repository pattern.
Go to the Download Link to download the latest APK.
- Minimum SDK level 23
- 100% Kotlin based + Coroutines + Flow for asynchronous.
- Google Material Design
- Hilt for dependency injection.
- JetPack
- Lifecycle - dispose observing data when lifecycle state changes.
- ViewModel - UI related data holder, lifecycle aware.
- Architecture
- MVVM Architecture (View - ViewModel - Model)
- Repository pattern
-
The app developed using Clean MVVM architecture combined with Repository and Domains pattern to limit coupling between application layers and components which provides a better codebase to be more testable, maintainable and also scalable for new features and updates.
-
GameViewModel contains the game logic and stores the data to survive the configuration changes so user can continue the game smoothly. Also fetching words list from the repository using Kotlin Coroutines and flows.
-
For now app is created for the portrait mode with Adaptive UI, for that I used SP and DP Libray.
-
App Contains Two Fragments
- StartGameFragment: Which shows the game instructions and Start Game Button
- FallingGameFragment: Shows the Game UI and Controls.
- I've spent about 7-8 hours on the app.
- 1 hour for planning the game concept, base architecture with Dagger Hit setup.
- 1:30 hour for building views and game UI controls.
- 2:30 hour for developing game logic and the data layer.
- 1:30 hour for writing tests both unit-testing and UI-testing.
- 30 minutes for documentation.
- 1 hour for Dev Testing.
Due to time constraints, I wish I could improve the app with the following:
- Introduce different levels of difficulty with easy, medicum and hard to speedup the falling word.
- Creating background service to sync new words from the server to the app’s local database.
- Improve user experience for better interaction by adding sounds and vibration effects, with correction if the chosen word is wrong.
- Add a user dictionary where all the correct words saved, so users can get back to them any time.
- Improve the scrore board screen and show the words with translations that played out during the session so.