Portfolio Home
Hey, I’m Kashyap (Kash) Tubati. I work toward becoming a thoughtful software engineer by shipping games, utilities, and small experiments in code.
Development Environment
Every project begins with the tooling — these are the platforms I rely on day to day.
My Lessons
A few of the teaching artifacts I’ve put together along the way — click in to read them.
Class Progress
Coding milestones from class, each one playable in the browser.
My Projects
My main build — the Gate Game — plus the full source on GitHub.
About the Gate Game 🚪
The Gate Game is a multi-stage JavaScript game built on top of an object-oriented engine. The project is split into three connected sublevels — Cannon Ball, Escape Room, and Zone Catch — each one exercising a different set of CS 111 concepts under a shared engine.
Object-Oriented Programming: Every sublevel is wrapped in its own class (GameLevelCannonball, GameLevelEscaperoom, GameLevelZonecatch) that accepts a gameEnv in its constructor and assembles the level out of engine primitives. Entities like Player, Npc, Enemy, and Collectible all inherit from a shared GameObject → Character base chain, so each level just composes the pieces it needs.
// Composition through the engine's class hierarchy
{ class: Player, data: sprite_data_player },
{ class: Npc, data: sprite_data_gatekeeper },
{ class: Enemy, data: sprite_data_cannon },
{ class: Collectible, data: sprite_data_key },
Methods & Parameters: Engine classes expose overridable methods like update(), draw(), and handleCollision(other, direction). Each sublevel customizes behavior through helper functions — for example, a zone-builder that converts a relative rectangle into pixel-space configuration.
// Helper that takes parameters and returns a config object
function zone(id, [rx, ry, rw, rh]) {
return {
id,
x: Math.round(rx * width),
y: Math.round(ry * height),
w: Math.round(rw * width),
h: Math.round(rh * height),
};
}
Control Structures & Data Types: Arrays hold level data (cannon trajectories, room puzzles, capture zones), booleans gate state (isLocked, hasKey, zoneCleared), and strings handle sprite paths and dialogue lines fed into the DialogueSystem.
// Arrays of object literals drive the level layout
const cannons = [
{ id: 'c1', x: 0.10, y: 0.80, angle: 45, power: 12 },
{ id: 'c2', x: 0.50, y: 0.70, angle: 30, power: 15 },
{ id: 'c3', x: 0.85, y: 0.85, angle: 60, power: 10 },
];
Input/Output & Async: Player movement runs through the engine's keyboard listeners; the gatekeeper NPC triggers async transitions when a sublevel is cleared, using requestAnimationFrame for the fade and setTimeout to hand control to GameControl.transitionToLevel().
// Async hand-off to the next gate
requestAnimationFrame(() => {
fade.style.opacity = '1';
setTimeout(() => {
topGame.transitionToLevel();
}, 800);
});
CS 111 Learning Objectives, Evidence & Assessment
Click any objective below to expand its evidence and assessment details. Eight categories, 35 objectives, each linked to its own walkthrough page.
Designing modular, reusable game pieces through classes, inheritance, and overrides — the load-bearing structure under every entity in the Gate Game.
01 Writing Classes
02 Methods & Parameters
collisionHandler(other, direction).03 Instantiation & Objects
04 Inheritance (Basic)
extends chain05 Method Overriding
update(), draw(), or handleCollision().06 Constructor Chaining
super() to forward initialization data up the chain.super(data, gameEnv) callsThe loops and branches that drive the game loop — stepping frames, resolving collisions, and reacting to player state.
01 Iteration
for, forEach, while usage02 Conditionals
if/else.03 Nested Conditions
The values that position, label, flag, and configure everything inside the level.
01 Numbers
02 Strings
03 Booleans
isJumping, isPaused, hasKey.04 Arrays
05 Objects (JSON)
Math operators move the world, boolean operators decide what happens, string operators assemble the text the player reads.
01 Mathematical
02 String Operations
03 Boolean Expressions
&&, ||, !The connection between the player and the game world, and between the game and external services like the leaderboard and NPC AI.
01 Keyboard Input
02 Canvas Rendering
draw() implementations03 GameEnv Configuration
GameEnv.create() and GameSetup.js04 API Integration
05 Asynchronous I/O
async/await around API requests..then() chains06 JSON Parsing
JSON.parse() and destructuringJSDoc, mini-lessons, and annotated highlights that turn working code into code that explains itself.
01 Code Comments
02 Mini-Lesson Documentation
03 Code Highlights
Working across the Chrome DevTools surface — from console traces in the game loop to network failures in the leaderboard API.
01 Console Debugging
console.log tracing for state, variables, and method calls.02 Hit Box Visualization
03 Source-Level Debugging
04 Network Debugging
05 Application Debugging
06 Element Inspection
Showing the level actually plays and the integrations actually work — through gameplay, end-to-end checks, and graceful error handling.
01 Gameplay Testing
02 Integration Testing
03 API Error Handling
try/catch around API calls and network failures.CS 111 Required Evidence Checklist
The high-level rubric the 35 objectives above roll up into. Each item has to be visibly present in the project for credit.
- ✅ 2+ custom character classes extending base classes (Character, Enemy, or Npc)
- ✅ 5+ methods with parameters and return values (overriding
update(),draw(),handleCollision(), etc.) - ✅ GameLevel configuration that uses object literals to instantiate entities
- ✅ JSDoc comments on custom classes and methods (>10% comment density)
- ✅ API integration: leaderboard (POST/GET scores) plus NPC AI, both with error handling
- ✅ Debugging competence across DevTools (Console, Network, Application, Sources) for game logic, APIs, and login/state
- ✅ Mini-lesson documentation hosted in the personal portfolio (comic/visual style with an embedded runtime demo)
- ✅ Code highlights covering OOP hierarchy, API calls, collision logic, and state management
- ✅ A complete, playable custom level tested in GameBuilder and in the team repository
JavaScript is accepted in place of Java for CS 111 credit at Mira Costa College. See the CS 111 Course Info and the Math & CS Pathway.