"Save the words" aka "Falling words" is a small language learning game for Android. As soon as the game starts, an English word will be shown at the bottom of the screen. A word from another language (For ex: Spanish) falls down from the top. The player should tap the green correct button if the falling word is a correct translation of the English word or the red wrong button if the falling word is an incorrect translation of the English word.
The fun part is that the speed of the falling words will increase dynamically through the game as the player scores more points. In a gaming session, the player will be given a maximum of 3 lives. The game ends when all the lives are exhausted or when all the words are exhausted.
The UI of the app is not polished. I'm still working on it.
- 3 hours
- Game Screen Development
- UI logic including Animations
- ViewModel logic
- Live Score & Life(s) updates
- 1 hour
- Setting up DI
- Setting up Retrofit
- Refactoring modules
- Refactoring packages
- 1 hour
- Writing Data layer code(Repository)
- Writing Domain layer(Use case)
- 1 hour
- Writing unit tests
- Writing UI tests
- 30 minutes
- Creating welcome screen
- Creating game result screen
- 30 minutes
- Resource refactoring - Using standard styles
- Optimizing layout code
- 30 minutes
- Troubleshooting issues
- Fixing bugs found during self-testing
- I would improve the UI of the app. Currently, it's just a skeleton of the UI.
- Complete the TODOs I added in the codebase - Error handling, Add more test cases.
- Improve the visual feedback - Subtle animations, Material effects.
- Improve the UX of the app - Adding transitions between screens.
- Add support for more languages.
- Add persistent storage(Ex: Room DB) support to record high scores, store the words locally.
- Add notifications to encourage users to play regularly.
- Add audio feedback to the game.
- Coroutines - Performing asynchronous code with sequential manner.
- Hilt - The DI framework.
- Flow - Reactive streams.
- Fragment - The UI host.
- Lifecycle - Android's component lifecycle teams up with coroutines.
- View Binding - Providing safe access to view.
- Data Binding - Enables binding UI components in layouts to data sources using a declarative format.
- ViewModel - Presenter with its semi data persistence behavior and consisting of UI logic.
- Retrofit - A type-safe HTTP client for making network calls.
- Espresso - Android UI testing framework.