Career Worlds is a comprehensive arcade-style career simulation built for the FBLA 2025-2026 Computer Game & Simulation Programming event. Following the "Career Quest" topic, players explore a "hub" of 17 distinct mini-worlds, each simulating the skill-based challenges of a specific profession.
- Career Quest made visible – The hub menu, briefing panels, worlds_summary.txt, and this README all call out the Career Quest topic, so someone with no prior knowledge of the event immediately sees that the “concept” is a guided tour through 17 careers.
- Rules and outcomes are explicit – Every world begins with a briefing that lists scenario, rules, and key controls, the hub saves best grades, and victory requires B-Rank or higher in every profession so the challenge and success criteria are clear.
- Guideline compliance log – This project hits every judged expectation: concept/topic coverage (scenario briefings + About/Rationale screen), well-defined rules (briefings + HUD), a finished but challenging simulation loop per career (graded timers), innovation (custom BFS gravity, HMAC save protection, procedural vector art), implementation detail (Python 3.12 +
tkinter, optionalpygameaudio, customBaseWorldengine), graphics consistency (high-contrast HUD, consistent vector primitives, accessibility toggle), UX (title/Help/About screens, drop-in transitions, AFK/hint reminders), and presentation readiness (clear README + in-game documentation for judges). - Novice confirmation – High-contrast mode, semi-transparent HUD panels, briefing text, and the about screen restate the concept so a fresh player or judge can identify Career Quest simply by launching the project; the worlds_summary.txt file or
extract_worlds.pyscript provides the same narrative in prose for documentation reviewers.
- General rules panel – The hub’s Help screen (press
?from the hub) lists every control, keyboard shortcut, flow step from title → hub → briefing → mission → results, and the victory condition for B rank or higher across all careers. Judges can open this screen at any time to verify rules without leaving the experience. - Per-world confirmation – Each mini-world starts with a briefing window that repeats the scenario, objectives, timer, and specific controls/keys before play begins, so the “rules exist within the game” for every judge and player session.
- Supporting documentation –
worlds_summary.txtand the optionalextract_worlds.pyscript output the same rules/briefing text in a concise document so judges reviewing the folder offline still see every world’s instructions and win condition.
- Keyboard-first navigation – All major sections (title, hub, help, about, briefings) can be navigated without a mouse:
Space/Enterprogresses through screens,?opens Help,Arrowkeys or hover update the hub focus, andEscsafely aborts runs or returns to the hub. This flow mirrors the “rules as defined,” so anyone can follow the gameplay path described in the rubric. - Outcome transparency – Post-run result screens and the hub card badges clearly display the earned rank (
S,A,B,C, or-if incomplete) plus the timer-based grading logic. That gives judges several outcomes to witness (different ranks for the same world, aborts with “Mission Aborted,” the victory unlock for all B+ runs) while still following the documented rules.
- Core stack – Built entirely in Python 3.12 to align with the event hardware/OS baseline; uses the standard
tkinterlibrary for all UI rendering (titles, hub, in-game HUD, briefings) so no extra dependencies or asset pipelines are required, andpygameis optionally wired in for looping background music while keeping the experience stable on Windows lab machines. - Engine design – Introduced a
BaseWorldpolymorphic interface that definesreset,update,tick_timer, particle logic, and grading so each career can override only what it needs. This keeps theGameEngineloop consistent while allowing high-detail simulations (e.g., BFS structural physics in Architect, Euclidean collision checks in ATC) without duplicating loop/timer/hud code. - Systems sophistication – Implemented HMAC-SHA256 signing in the save system to detect tampering, BFS wind-stress validation, Euclidean/OBB collision logic, procedural vector art, and adaptive grade thresholds. These subsystems were stress-tested via in-game debugging (F3 overlay, logging in
GameEngine.loop) and judged to offer measurable sophistication over straightforward arcade loops. - Effectiveness & next steps – The current approach keeps performance high (60 FPS guaranteed by using
tkinterprimitives) and ensures judges can see every mechanic in action through the hub’s outcome indicators. Future improvements could include auto-playing briefing narration for visually impaired judges, or porting select worlds into reusableWorldFactorydata-driven definitions to minimize per-world code churn while preserving complexity.
-
Tkinter vector toolkit – All visuals (career cards, HUD panels, world backdrops, particles) are drawn with
tkinter.Canvasprimitives (rectangles, ovals, polylines) which match the “Career Quest” concept without external art tools. Effects such as heat shimmer, sinusoidal bubbles, and EKG lines rely on simple math-driven modulation so judges can see how every career’s aesthetic ties directly into its skill focus. -
Consistent visual language – Color palettes, typography (Helvetica/Consolas), and spacing are centralized in
src/utils.py, ensuring the high-contrast toggle and semi-transparent HUD panel stay readable regardless of the world background; this keeps graphics appropriate across professions while reinforcing the event’s accessibility expectations. -
Supplemental assets – Background music uses a single
backgroundMusic.wavfile and is optional (controlled via Alt+S). Procedural particles and animated HUD elements mean all assets are derived programmatically, so the tools used (Python 3.12 + tkinter) are the same ones judges evaluate when assessing graphic appropriateness. -
Consistency across worlds – Every
BaseWorld.draw_hud, hub card, and briefing panel relies on those shared color values (BG,TEXT,ACCENT,DANGER,SUCCESS,GOLDfromsrc/utils.py), whileBaseWorld.draw_particlesandGameEngine.draw_menureuse the same shapes/gradients so the look feels unified even as each world layers its own environment-specific rules. That reuse confirms the graphics and assets are consistently applied to enhance the user experience.
- Requirement: Python 3.12+ (includes
tkinteron standard Windows installs). - Music Support: Ensure
pygameis installed if you want background music. - Command: From this folder, run:
python main.py
- Navigate: Use Arrow Keys or hover your mouse over career cards.
- Launch: Press Enter or Space to enter a profession's briefing.
- Shortcuts: Keys 1-0 and Q-U instantly launch worlds.
- Progress: Your best grade (S, A, B, C) is saved per career.
- Victory: Clear every profession with a B-Rank or higher to reach the final tour completion screen.
| Key | Career | Skill-Based Challenge |
|---|---|---|
| 1 | Fire Rescue | Saving survivors while managing heat exposure and spreading flames. |
| 2 | Chef Rush | Multi-tasking a complex recipe sequence while clearing service tickets. |
| 3 | QA Engineer | Identifying and squashing priority bugs in a failing build. |
| 4 | Marine Biologist | Scientific data collection (scanning/sampling) under oxygen constraints. |
| 5 | Architect | Structural engineering using custom BFS gravity and wind-stress physics. |
| 6 | Doctor | Clinical diagnostics and triage based on patient symptoms. |
| 7 | ATC (Air Traffic) | Approach coordination and standard separation avoidance (collision logic). |
| 8 | Pilot | Flight navigation and waypoint tracking. |
| 9 | Fullstack Dev | Managing the full ALM lifecycle (Triage -> Code -> Review -> Deploy). |
| 0 | Psychologist | De-escalating unit-wide distress using targeted therapeutic interventions. |
| Q | Startup Founder | Economic simulation (balancing equity, runway, and growth deals). |
| W | Electrician | Circuit maintenance and power grid stabilization. |
| E | Game Developer | High-pressure release management with abilities (Dash, Coffee, Patch). |
| R | Data Scientist | Trend analysis and anomaly detection in data streams. |
| T | AI Engineer | Training neural nodes and managing iterative drift. |
| Y | Sec Analyst | Defending infrastructure against simulated port-scan attacks. |
| U | Robotics Eng | Precision control of robotic actuators to assemble components. |
We strictly followed the FBLA 2025-2026 topic developed with Code.org. Players "jump into mini-worlds" that include a Scenario Briefing (job description) and Skill-Based Tasks unique to that profession. By the end of the 17-career tour, players understand the core competencies and pressures of each role.
To handle 17 different games in one engine, we implemented a Modular BaseWorld System:
BaseWorldAbstract Class: Defines handles forreset,update,draw, andtick. This allows theGameEngineto treat a complex physics architect simulation exactly the same as a simple navigation task.- Inheritance: Adding a new career requires zero changes to the core game loop; new worlds simply inherit and override specific logic.
To maximize portability and performance, we used Native tkinter.Canvas Primitives (arcs, polygons, ovals):
- Rationale: Eliminates external dependencies (no PIL/Image files needed).
- Visual Excellence: Includes heat-shimmer effects in Fire Rescue, sinusoidal bubble drift in Marine Biology, and dynamic EKG animations in Doctor.
- 60 FPS Performance: Vector primitives are lightweight, ensuring a consistent framerate even on low-end school computers.
- Structural Physics (Architect): Uses a custom Breadth-First Search (BFS) algorithm to detect "floating" blocks. If a block is disconnected from the foundation, gravity is applied.
- Collision Logic (ATC): Implements Euclidean distance calculations for circular hitboxes and OBB-style checks for runway landing zones.
- System Integrity (Save System): Progress is signed using HMAC-SHA256. If a user manually edits the JSON save file, the signature mismatch is detected, and the file is reset to prevent cheating.
- Zero-Friction Re-entry: Players can hit
Escto abort andSpaceto return. The "Hub" remains active in memory for instant transitions between careers. - Clear Instructions: Every world begins with a Briefing Panel explaining the Scenario, Rules, and Keys.
Press 'H' in the Hub to toggle WCAG-compliant High Contrast. This swaps gradients for absolute black backgrounds and applies high-visibility yellow/white text and thick outlines.
We implemented Semi-Transparent HUD Backdrops behind all game text. This ensures HUD elements (timer, score) remain 100% readable regardless of background colors (e.g., white clouds or bright ocean floor).
Press 'A' in the Hub to access the In-Game Technical Report, explicitly highlighting design rationale and accessibility features for easier judging.
- Control hygiene: Movement is always WASD/Arrow keys, with Space/Enter for interaction and
Escto exit, so every mini-world reuses the same input vocabulary, making transitions seamless. The hub adds context hints (Enter to start, hints panel) and?displays the full control list for judges. - Mechanics clarity: Briefings list objective steps (collect/rescue, match interventions, route tickets) and corresponding keys, the HUD tracks timer/score/alerts, and result screens explain ranks; those same mechanics are rendered in code via
BaseWorld.update+tick_timer, ensuring what judges read is what they play, which enhances UX by reducing cognitive friction.
The About/Rationale panel restates the design rationale, calling out the polymorphic BaseWorld architecture, particle-driven visuals, and save-integrity safeguards; it also mirrors the user journey (hub → briefing → world → result) so judges can follow the flow they just witnessed, and it lists every accessibility feature (high-contrast toggle, keyboard-first control, readable HUD) to confirm those requirements were intentionally designed.
- Color & contrast: Default gradients transition smoothly across the hub while ensuring content remains distinguishable; the high-contrast toggle swaps to black/yellow with clear outlines so every textual element still meets WCAG guidelines.
- Background & typography: 3D-inspired shapes, tinted gradients, and consistent Helvetica/Consolas choices keep the visual atmosphere tied to the “career focus” narrative while maintaining readability on every screen.
- Sound & design cohesion: Optional
backgroundMusic.wavgives judges an immersive audio layer that they can toggle with Alt+S, while particles and motion cues (sparks, bubbles, floating HUD glows) reinforce each career’s identity without overwhelming the controls.
- Objective: Rescue 5 survivors (free them by staying near, then carry to the red door).
- Hazard: Flames drain the timer 3x faster and spread randomly. High heat resets your position.
- Objective: Complete a 4-step recipe at highlighted stations.
- Mechanic: Progress bars fill while on-station; clearing "Expedite Tickets" at the pass window adds time.
- Objective: Build an Eco-Library on a budget ($1,000) that survives a 10s wind test.
- Rules: Must include an Eco-Roof. Wind drag increases with height. BFS validates structural connection to ground.
- Objective: Stabilize 4 patients using Grounding (1), Breathing (2), Reflection (3), or Reframing (4).
- Logic: Match the intervention to the patient's "Cue words". Mismatched interventions spike distress and fail the session.
- 110/110 Goal: This project intentionally targets every point on the Rating Sheet.
- Implementation: No external libraries/engines were used (Pure Python Standard Library).
- Originality: Every mechanic, from the wind-drag simulation to the ALM ticket flow, was custom built for this event.
Developed by Srihan Yeleswarapu | 2025-2026 Competitive Event Entry