C++ Feature Prototype for The Sims
This multi‑part project was completed as part of the Electronic Arts Software Engineering Virtual Experience Program. It involved designing and implementing a C++ system based on a proposed gameplay feature, while practicing object‑oriented design, UML modeling, debugging, and structured software planning. The work followed an industry‑style workflow, beginning with a feature proposal and progressing through architecture design, class implementation, and code refactoring.
Core Skills Demonstrated:
I applied object‑oriented design principles such as encapsulation, abstraction, and modular class structure.
I created UML diagrams to plan system architecture before implementation.
I designed and documented C++ header files that reflected the planned class relationships.
I debugged and refactored existing code to improve reliability and maintainability.
I used smart pointers and modern C++ memory‑management practices.
I translated written feature requirements into clean, maintainable code structures.
Goal: Develop a written proposal outlining the concept and gameplay structure for the Community Challenge Voting feature.
Highlights:
The following document presents a complete feature overview, describing how players participate in prediction‑based challenges within the game world.
It defines the core gameplay loop, including how events are surfaced, how predictions are made, and how rewards are granted.
It explains the value of the feature from a player‑engagement perspective and outlines how it integrates with existing game systems.
The proposal establishes the conceptual foundation that guided the later UML class design and C++ implementation work.
Goal: Translate the feature proposal into an object‑oriented class structure.
The attached UML diagram defines the major components of the Community Challenge Voting system and shows how they interact. It models the lifecycle of a challenge, the flow of player predictions, and the logic for evaluating outcomes and tracking performance.
Highlights:
The CommunityChallenge class includes attributes such as name, type, start date, and end date, and transitions through states like open voting, closed voting, and an evaluation phase for the results of the voting.
EventOutcome captures the results of a challenge, including notifications, rewards, and challenge‑type details.
VotingSession manages player votes, participating Sims, and the actions associated with casting predictions.
A Leaderboard class tracks top predictors and supports long‑term engagement.
Goal: Convert the UML class structure into modular, well‑organized C++ header files.
The following header file defines the full set of classes required for the Community Challenge Voting system. Each class includes clear public and private members, descriptive comments, and method signatures that reflect the relationships outlined in the UML diagram. The structure emphasizes encapsulation, readability, and maintainability.
Highlights:
Implemented core classes such as CommunityChallenge, VotingSession, EventOutcome, Player, Sim, and Reward, each with clearly separated responsibilities.
Used encapsulation through private data members and public getters/setters to maintain clean interfaces.
Added descriptive comments and consistent naming conventions to improve clarity and support future implementation.
Organized the system into modular components that align with object‑oriented design principles and support scalable gameplay logic.
Goal: Debug and refactor an inventory management system to improve reliability, memory safety, and overall code quality.
The following source file contains a corrected and refactored version of the inventory system. The fixes address structural issues in the original implementation, including unsafe memory handling, rigid data structures, and missing cleanup logic. The updated version uses modern C++ practices to ensure safer item management and more predictable behavior during add, sell, and list operations.
Highlights:
Replaced the fixed‑size array with a std::vector<Item*> to remove the 20‑item limit and allow dynamic storage.
Added proper memory management, including deleting removed items and implementing a destructor to prevent leaks.
Refactored item‑removal logic to correctly handle selling items and erasing entries when quantities reach zero.
Improved input handling and system feedback to make the inventory more robust and user‑friendly.
Simplified internal operations by using vector methods like push_back and erase, reducing manual bookkeeping.
Awarded upon completion of the EA Software Engineering Virtual Experience Program on Forage.