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.

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.