A Monsters, Inc.-themed board game built with JavaFX, made for our Computer Programming Lab course (Team 169) at GUC.
Two scarers — sorry, two monsters — race around a 100-cell board, rolling dice, dodging traps, stealing energy, and triggering power-ups, all set in the halls of Monsters Inc. First monster to reach the final cell with 1000+ energy wins.
-
Pick a side. Each game randomly assigns you a monster from the Scarer or Laugher role, with a random opponent from the other role.
-
Roll and move. Each turn rolls a die and advances your monster around the board.
-
Land on something interesting. The board is full of special cells:
- 🃏 Card cells — draw a card that can swap positions, shield you, steal energy, send someone back to start, or confuse both monsters (which secretly swaps their roles for a few turns).
- 👹 Monster cells — station monsters guard these tiles. Land on one that shares your role and you get to trigger your power-up for free.
- 🧦 Contamination Sock and 🎢 Conveyor Belt cells — board hazards that mess with your position.
- 🚪 Door cells — Monsters Inc. doors with their own activation logic.
-
Spend energy on power-ups. Every monster type has a unique ability:
Monster Power-up Passive trait Dasher Momentum Rush — 3x speed for 3 turns Always moves at 2x speed otherwise Dynamo Freezes the opponent for a turn Energy gains/losses are doubled MultiTasker Focus Mode — move at normal speed for 2 turns Normally moves at half speed, but gets a flat energy bonus on every gain Schemer Chain Attack — steals energy from the opponent and every stationed monster on the board Skims a little extra energy off every gain -
Win condition. Reach cell 99 with at least 1000 energy before your opponent does.
The codebase follows an MVC-style split:
src/
├── controller/ # Mediates between the game engine and the JavaFX views
│ └── interfaces/ # GameController, GameEventListener, CanisterModifier
├── model/game/engine/
│ ├── Game.java # Core game loop: turns, dice, win condition
│ ├── Board.java # Board layout, cell placement, card deck
│ ├── Constants.java # Board size, special cell indices, energy thresholds
│ ├── monsters/ # Monster (abstract) + Dasher, Dynamo, MultiTasker, Schemer
│ ├── cards/ # Card (abstract) + Swapper, Shield, EnergySteal, StartOver, Confusion
│ ├── cells/ # Cell (base) + CardCell, MonsterCell, DoorCell, ConveyorBelt, ContaminationSock, TransportCell
│ ├── dataloader/ # Reads monsters/cards/cells in from CSV
│ └── exceptions/ # Custom exceptions (invalid move, out of energy, bad CSV, ...)
└── view/ # JavaFX UI: StartScreen, GameBoard, CardPopup, DiceDisplay, TurnTracker, ...
Monster types, cards, and board layout aren't hardcoded — they're loaded at runtime from monsters.csv, cards.csv, and cells.csv, so the cast and board can be tweaked without touching the Java code.
- Java + JavaFX for the UI and game loop
- Custom OOP design: abstract
MonsterandCardbase classes with role-specific polymorphic behavior, aBoard/Cellhierarchy for tile effects, and a dedicated exception hierarchy for game-rule violations - CSV-driven data loading for monsters, cards, and board layout
This was built as an Eclipse project, so the easiest way to run it is:
- Clone the repo and import it into Eclipse (or your IDE of choice) as an existing Java project.
- Make sure a JavaFX SDK is configured for your JDK (JavaFX isn't bundled with the JDK from Java 11 onward) and add it to the module path / VM arguments.
- Run
src/view/App.java.
Make sure cards.csv, cells.csv, and monsters.csv stay in the project's working directory — the game reads them on launch.
Built by Team 169: