Coding Mania is a group project for Introduction to Software
Engineering CMPT276 course at Simon Fraser University. This project is a 2D
arcade-style game where the main character, a programmer, needs to
gather all the code snippets (regular rewards) before running the
code (endpoint). The game is set on a board where the character
navigates while avoiding errors (punishments) which decrease the
code quality (score). Bugs are present on the board, and an encounter
between the character and a bug leads to an immediate loss. The game
also features energy drinks (bonus rewards) that appear on the board
to enhance the player's score.
The game was developed using an object-oriented approach (OOP) with a focus
on the Entity-Component-System model. Classes were created for the
entities, game states, and user inputs, while also implementing manager
classes for handling entities and game states. Entities included the player
character, enemies, and various rewards. External libraries such as
AWT (Abstract Window Toolkit) and IO were utilized for rendering
graphics and handling user inputs.
The game code went through a series of modifications for efficiency
and better user experience, with changes in the implementation of
certain methods, inclusion of additional features, and reworking
of some initial designs. For example, we added threading to create
a tick timer to indicate when each entity should move and update,
added a render method for better graphics, and implemented various
updates in entity management.
Thorough unit and integration tests were conducted to ensure the
functionality of all game features. These tests covered constructor
methods, value manipulations, interactions between entities, and
responses to user inputs. These tests helped identify bugs and led
to the modification of certain production codes to enhance the game's
performance and user experience. Automated testing was used alongside
manual functional and UI testing.
Overall, the development of "Coding Mania" involved effective teamwork,
efficient task division, continuous learning, and a shared commitment
to enhancing product quality.