java exercise and need support to help me learn.
Final Project: Revamping the Snake Game
In this assignment, you will be tasked with refactoring and redesigning the Snake game in Chapter 17 to improve its structure, readability, and maintainability. The goal is to separate different functions into their own classes and apply design patterns where appropriate. You will also need to enhance the gameplay by introducing new features and challenges. You can work in groups of up to 4 people. Use everything you’ve learned so far to upgrade Snake to the next level!
**Task 1: Code Refactoring and Class Separation** (Must create new classes / interfaces / etc.):
– Review the existing Snake game codebase provided to you.
– Identify areas where code can be refactored to improve readability and reduce redundancy.
– Separate different functions into their own classes to increase modularity and maintainability.
– Refactor code with Refactoring techniques.
**Task 2: Design Pattern Implementation** (Must choose 3):
– Identify opportunities to apply design patterns within the codebase.
– Implement the Strategy Pattern to separate audio-related functionality into the `Audio` and `AudioContext` classes.
– Implement the Builder Pattern to create `Apple` objects with different properties based on their type (good or bad).
– Attempt to implement the Composite Pattern for the `Snake` class (Note: If you encounter issues, document them).
** These are recommended design patterns; you may use any which are applicable. **
**Task 3: Gameplay Enhancements** (Must choose 6)
Introduce randomness to assign scores to good apples and bad apples.
Power-Ups: Introduce power-up items that the snake can collect. These power-ups can have various effects, such as increasing the snake’s speed, making it invulnerable for a short time, or allowing it to eat bad apples without penalties.
Obstacles: Add obstacles on the game board that the snake needs to avoid. Colliding with an obstacle could result in a penalty, such as a decrease in the snake’s length or speed.
High Scores and Leaderboards: Implement a high score system that keeps track of the best scores achieved by players. Display the current game score as well while the game is running.
Sound Effects and Music: Enhance the audio experience with background music and different sound effects for various in-game actions.
Progressive Difficulty: Make the game progressively harder as the player advances, with faster apples spawning, more obstacles, or additional challenges. This keeps the game interesting for longer periods.
Game Over Screen: After a game over, show the player’s final score and provide options to restart the game or return to the start screen.
Pause and Resume: Include the option to pause the game and resume it later. This is a useful feature for players who may need to temporarily leave the game.
If you have other ideas, run them by me first, but be creative. These features are just suggestions.
Your game needs to have a “wow” factor. This could include lots of extra features, how well designed (and fun) the game is, or just good old-‐fashioned polish—anything that will make your game really stand out!
If you encounter difficulties with any part of the assignment, document your efforts and any issues faced. The goal is not just to implement design patterns but also to learn from the challenges you encounter during the refactoring process. I do expect tangible improvements to the Snake Game that are more than just a few new classes. Try your best to improve this game according to the assignment’s requirements.
Reports and Progress Tracking: We will have three progress reports, scheduled every two weeks throughout the assignment. These reports are essential for tracking your progress and assessing your work. They should include the following:
Also, include these in your Report:
Names of everyone involved and the work they contributed to.
b. A detailed description of the changes you have made since the last report.
c. A list of Git logs showing commits, including commit messages, commit authors, and commit timestamps. This will help us understand the evolution of your project over time.
Submit these reports on time. Only one group member should submit the assignment. The reports will ensure that all group members are actively contributing to the project.