Portfolio Home
Hi! My name is Chetan Tiduwar, and I strive towards becoming a skilled computer scientist, building games, tools, and experiences through code.
Development Environment
Coding starts with tools, explore these tools and procedures with a click.
My Lessons
Foundations in Tech are essential, click to see some of my lesson creations.
Class Progress
Here is my game progress through coding, click to see these in the browser.
My Projects
Here are some tools and apps I built, click to try them!
About GateGame 🗼
GateGame is a multi-level platformer game built with JavaScript using an object-oriented game engine. I contributed by building the Maze of Shadows sublevel, which demonstrates core CS 111 concepts throughout.
Object-Oriented Programming: The level is structured as a class GameLevelMazeSub with a constructor that takes a gameEnv parameter and instantiates all game objects. Characters like Player, Npc, and SplineBarrier are imported and extended from base classes, forming a multi-level inheritance chain (e.g., GameObject → Character → Player).
// Inheritance and instantiation — Player extends a base Character class
{ class: Player, data: sprite_data_octopus },
{ class: Npc, data: sprite_data_shadow },
{ class: SplineBarrier, data: seg1 },
Methods & Parameters: NPCs use methods like interact() and reaction() with custom dialogue logic. The spline() helper function takes an id and points array, maps relative coordinates to pixel values, and returns a barrier config object.
// Method with parameters — converts relative coords to pixel values
function spline(id, points) {
return {
id,
splinePoints: points.map(([px, py]) => ({
x: Math.round(px * width),
y: Math.round(py * height)
})),
lineWidth: 22,
};
}
Control Structures & Data Types: The level uses arrays to store spline path segments and NPC configurations, booleans to control dialogue state (isDialogueOpen()), and strings for sprite paths and character greetings.
// Array of objects used to define the winding maze path
const seg1 = spline('seg1', [
[0.03, 0.945],
[0.09, 0.940],
[0.20, 0.920],
[0.28, 0.895],
]);
Input/Output & Async: The player is controlled via WASD keyboard input configured through event listeners. The Exit Warden NPC triggers a fade transition using requestAnimationFrame and setTimeout for async sequencing, then loads the next level via topGame.transitionToLevel().
// Async transition to next level on player choice
requestAnimationFrame(() => {
fade.style.opacity = '1';
setTimeout(() => {
topGame.transitionToLevel();
}, 800);
});
CS 111 Learning Objectives, Evidence & Assessment
Eight categories of learning objectives, each item showing the project evidence required and the assessment method used to verify it. Click any card to open a dedicated page with code examples and walkthroughs.
🏛️ Object-Oriented Programming
Building reusable, modular game components through classes, inheritance, and method overriding — the architectural backbone of every entity in the game.
collisionHandler(other, direction)).update(), draw(), handleCollision()).super() to chain constructors and forward initialization data.🔁 Control Structures
Loops and conditionals that drive the game loop — animating frames, detecting collisions, and reacting to player state.
🧮 Data Types
The values that move, name, flag, and configure everything in the game world.
➕ Operators
Math operators move the world, boolean operators gate every choice, string operators build the text the player sees.
🎮 Input / Output
The bridge between the player and the game world — and between the game and external services like the leaderboard and NPC AI.
📝 Documentation
JSDoc comments, mini-lessons, and code highlights that turn code that works into code that teaches.
🐛 Debugging
Using Chrome DevTools across the full stack — from console logs in the game loop to network errors in the leaderboard API.
✅ Testing & Verification
Proving the level is playable and the integrations actually work — through gameplay, end-to-end API tests, and resilient error handling.
CS 111 Required Evidence Checklist
The high-level rubric all 35 learning objectives above roll up into. Each item below must be demonstrably present in the project for college credit.
- ✅ 2+ custom character classes extending base classes (Character, Enemy, or NPC)
- ✅ 5+ methods with parameters and return values (override
update(),draw(),handleCollision(), etc.) - ✅ GameLevel configuration using Object Literals to instantiate game objects
- ✅ JSDoc comments on custom classes and methods (>10% comment density)
- ✅ API Integration: Leaderboard (POST/GET scores) + NPC AI interaction with error handling
- ✅ Debugging competency: Use DevTools (Console, Network, Application, Sources) to debug game logic, APIs, and login/state
- ✅ Mini-lesson documentation in personal portfolio (comic/visual style with embedded runtime demo)
- ✅ Code highlights showing OOP hierarchy, API calls, collision logic, and state management
- ✅ Complete, playable custom level tested in GameBuilder and team repository
JavaScript is approved as a substitute for Java for CS 111 credit at Mira Costa College. See the CS 111 Course Info and the Math & CS Pathway.