CMU 15-113: Effective Coding with AI
github.io portfolio repo, with a README.md and a prompt_log.md, plus a link from your portfolio and a Google form submission
Goal: Use AI tools strategically to recreate the game Crossy Road in JavaScript, so that it ends up as a playable, in-the-browser project on your portfolio website.
Context: This assignment starts in class with a hard 30-minute time limit, then continues at home with a much softer one. The point of the first half is to see what a tight constraint does to your strategy and your prompting. The point of the second half is to actually finish something you'd be happy to show someone.
Why This Matters: This is a chance to practice prompting AI effectively and thoughtfully to arrive at a desirable result quickly, and then to practice the very different skill of taking a rough AI-generated prototype the rest of the way to something finished and shippable.
Learning Objectives:
For this assignment you are required to install and use Kiro, an AI-enabled IDE. We'll install it together at the start of class, and before the 30-minute build.
@andrew.cmu.edu email / CMU ID).In class, you'll have exactly 30 minutes to get as close to Crossy Road as you can. When the timer stops, we'll discuss as a group where everyone landed: what you got working, what you didn't, what your first prompt was, and what you'd do differently.
What is Crossy Road?
Crossy Road is an arcade-style game where a character must cross roads, rivers, and other hazards. The goal is to get as far as possible without being hit. We aren't going to list out all the features here, because we don't want you to just paste those as the entirety of your prompt. Instead, watch this short video to get a sense for the game if you haven't played it before.
And a personal note from Mike: Back in MY day we called this FROGGER. For some of you old folks in the room who might not be familiar with Crossy Road, you might remember this, which is the same in its core respects:
Your challenge: In 30 minutes, using Kiro, build something in JavaScript that mimics Crossy Road as closely as you can, inluding the chunky, blocky, pseudo-3D camera angle. That 2.5D look is a big part of what makes Crossy Road feel like Crossy Road, and finding out how hard (or how easy) that is to get out of an AI is part of the exercise.
You may choose to go straight for the 2.5D look and see how far you get, or you could start with a flat top-down grid to nail the core mechanics (movement, lanes, collisions, scoring) and layer in the 2.5D look afterward if time allows. Prioritize whatever you think will get you furthest in 30 minutes, and be ready to explain your reasoning in the group discussion. Caution: If you ask for everything in one go, your first prompt is likely to fail at finishing in 30 minutes.
Later, how you achieve the 2.5D look is up to you. There are several reasonable approaches and libraries, and part of the point is that you and your AI decide. Whatever you pick, it needs to run in a browser.
Note: You may work entirely "vibe coded," or you may debug and modify the code manually. Either approach is fine. You are not required to directly edit the code, though making small targeted adjustments may speed you up considerably.
After class, your job is to take the game the rest of the way and put it on your portfolio site so that anyone can click a link and play it in their browser.
<script src="https://..."> tag pointing at a hosted copy (a "CDN"), or download the library's file and commit it into your folder yourself. (If your project requires npm run build before it works, it will not work on Pages, so fix that before you submit.)username.github.io repo, with its own README.md.You are free, and encouraged, to customize the game so that it's unique to you and your interests. Reskin the character, change the setting, change the hazards, add a mechanic, change the art style entirely. The 2.5D Crossy Road clone is the target for the in-class sprint; for your final submission, it's a starting point you can take wherever you want. A game that's obviously yours is a much better portfolio piece than a faithful clone.
REFLECTION.md to your project folder explaining where you got stuck, what you tried, and what you think was going wrong. A half-finished game plus an honest, specific reflection earns full credit. Grinding for eight hours does not earn you extra credit, and we'd genuinely rather you didn't.
username.github.io repo, containing:
index.html plus your JS/CSS/assets, so the folder's URL loads the game directly.prompt_log.txt), in the same folder as your README, following the same convention as later assignments in this course. It must name the AI model(s)/tool(s) you used and include your important, non-trivial prompts verbatim, not AI-written summaries of them. Include your in-class prompts as well as the ones from finishing at home; it's useful to be able to see the difference.username.github.io/
├── index.html <-- your portfolio, links to the game below
├── styles.css
└── crossy-road/ <-- name this whatever your game is called
├── index.html
├── game.js
├── README.md
├── prompt_log.md
└── REFLECTION.md (only if you hit the 4-hour cap)
With this layout, your game is live at https://username.github.io/crossy-road/.
You'll receive full points for this as long as you invest thoughtful effort in the game and submit the required files on time, with the game playable at its URL. We expect your prompt log to show a real development process with several meaningful exchanges. Some prompts take a long time to run on some models, so don't worry about the raw count.
Don't forget the four-hour cap. If you stopped at 4 hours with an unfinished game and wrote a specific, honest REFLECTION.md, that is a full-credit submission. You will not be graded or judged based on whether you had access to an extremely high-powered model. In fact, we'll probably be more impressed if you use a more mid-range model that can't one-shot the whole project.
We'll share some of the submissions and compare approaches, both what people managed in the 30-minute sprint and how the finished versions turned out. We'll focus on which prompting strategies worked best for a given AI model or tool, and on where the sprint version and the finished version diverged.
Step 0: Before class
Step 1: The in-class sprint (30 minutes)
Step 2: Finish the game (up to ~4 hours, at home)
index.html in a browser, and watch the browser console for errors (right-click → Inspect → Console).REFLECTION.md instead of pushing on.Step 3: Write your README and prompt log
README.md and prompt_log.md inside your game's folder.Step 4: Publish and link it
username.github.io repo, commit, and push.https://username.github.io/your-folder/ and actually play it. Pages can take a minute or two to update./game.js instead of game.js, or a library you loaded from node_modules. Test locally, but before you consider yourself done, check the live URL and make sure it works.
Think strategically about what to build. Here are some scope options, from minimal to ambitious:
Hint: Start with the core mechanics and add features if you have time. A working simple game is better than a broken complex one, especially since this one is going on your portfolio where people will actually click it.