Skip to content

bertacsevercan/gd50-projects

Repository files navigation

GD50-Projects

The assignments completed during the Harvard's GD50: Intro to Game Development course.

Disclaimer
All projects include base source code written by the course instructor Colton Ogden. I added the assignments and my own implementations on top of the original code.


Lesson 1 - Pong

A classic Pong recreation built with Lua and LÖVE2D. This lesson focuses on fundamentals like drawing, game state handling, simple physics, and implementing basic AI logic.

pong


Topics Covered

  • Lua
  • LÖVE2D
  • Drawing Shapes
  • Drawing Text
  • Delta Time & Velocity
  • Game State Management
  • Basic OOP
  • Box Collision (Hitboxes)
  • Sound Effects (bfxr)

Original Assignment

  • Implement a basic AI for either Player 1 or Player 2 (or both).

What I Implemented

  • Completed the assignment as required.
  • Implemented AI for both players.
  • Added an autoplay toggle: both AIs can play against each other with no player input.
  • Added an AI mistake chance to mimic human inaccuracy.
  • Implemented logic for AI to serve the ball away from the opponent.
  • Added full controls for both players so two humans can play.
  • You can play against the AI on either side, and take control of an AI mid-autoplay. Autoplay shuts off only for the player you overwrite.
  • The ball changes color (to red) based on a random velocity value.

Extra Ideas

  • Power-ups:
    • Speed up the ball
    • “Power ball” that can’t be blocked
    • Multiple balls (ball multiplication)
    • Paddle speed modifiers (slow down / speed up paddles)

Lesson 2 — Flappy Bird

A Flappy Bird clone featuring procedural pipe generation, infinite scrolling backgrounds, game states, and performance-based rewards.

flappy


Topics Covered

  • Sprites
  • Infinite Scrolling
  • Procedural Generation
  • State Machines

Original Assignment

  • Influence the generation of pipes to create more complex level patterns.
  • Award the player a medal based on performance, along with their score.
  • Implement a pause feature.

What I Implemented

  • Completed all assignment requirements.
  • Added different sound effects for different medal results.

Extra Ideas

  • A dynamic commentator system that reacts to your performance (e.g., praise, insults, hype commentary).

Lesson 3 — Breakout

A Breakout clone featuring procedural level layouts, multiple powerups, particle effects, paddle upgrades, collision handling, and persistent save data.

breakout


Topics Covered

  • Sprite Sheets
  • Procedural Layouts
  • Managing State
  • Levels
  • Player Health
  • Particle Systems
  • Collision Detection
  • Persistent Save Data

Original Assignment

  • Add a powerup that spawns two extra balls.
  • Grow or shrink the paddle based on score increases or life loss.
  • Add a locked brick that can only be opened with a key powerup, which should spawn only when such a brick exists and randomly like the ball powerup.

What I Implemented

  • Fixed the recoverPoints bug.
  • Implemented logic to spawn a key again if it is lost.
  • Added seven total powerups: multiple balls, bigger ball, smaller ball, big paddle, small paddle, fast paddle, slow paddle.
  • When multiple balls exist, the player only loses health when all balls are destroyed.
  • Each brick has a random chance to contain a powerup.
  • When a brick breaks, it drops its assigned powerup if it has one.
  • Display on-screen text to indicate which powerup was picked up.
  • Implemented level saving and added the ability to continue from the last saved level.

Lesson 4 — Match 3

A Match-3 puzzle game featuring animated tile movement, procedural grid generation, timed gameplay, shiny tile mechanics, variety-based scoring, and hint assistance.

match3


Topics Covered

  • Anonymous Functions
  • Tweening
  • Timers
  • Procedural Grids
  • Sprite Art and Palettes

Original Assignments

  • Ensure Level 1 starts with simple flat blocks (first row of each color in the sprite sheet).
    Later levels should include patterned blocks (triangle, cross, etc.) worth more points.
  • Add time on match: +1 second per matched tile.
  • Add shiny tiles that destroy an entire row when matched, awarding points for every tile in the row.
  • Only allow swapping if it results in a valid match.
    If no possible matches remain, reset the board.

What I Implemented

  • Fixed the setColor bug.
  • Introduced a new color every 3 levels and a new variety every 4 levels.
  • Added optional mouse-based matching.
  • Added particle effects on shiny tile matches.
  • Implemented a hint system when the player is stuck (up to 3 hints max).
  • Matching now checks both color and variety, not just color alone.
  • Disable input when hint is active.

Lesson 5 — Super Mario Bros

A procedurally generated 2D platformer inspired by Super Mario Bros, featuring tile-based worlds, animated entities, platformer physics, keys and locks, goal posts, powerups, enemies, camera movement, and scalable level progression.

mario


Topics Covered

  • Tile Maps
  • 2D Animation
  • Procedural Level Generation
  • Platformer Physics
  • Basic AI
  • Powerups

Original Assignments

  • Ensure the player always spawns above solid ground when entering the level.
  • In LevelMaker.lua, generate a random-colored key and matching lock block (from keys_and_locks.png).
    Colliding with a key should unlock the block and make it disappear.
    (I generate 4 collectible keys and show collected keys on screen.)
  • Once the lock has disappeared, trigger a goal post to spawn at the end of the level. Goal posts can be found in flags.png; feel free to use whichever one you’d like! Note that the flag and the pole are separated, so you’ll have to spawn a GameObject for each segment of the flag and one for the flag itself. (I spawn a gameobject as a pole and spawn an entity as the flag since its animated)
  • Touching the goal post regenerates the level, restarts the player at the beginning,
    increases the level length, and preserves score via parameters passed into PlayState:enter.
    (When the player unlocks the locks the camera moves to the flag and show that its up)

Additions I Implemented

  • Camera pan to the goal flag at the start of each level.
  • Player becomes invincible while the camera is moving.
  • Camera pan can be skipped with the Enter key.
  • Added randomly generated water tiles.
  • Fixed snail jitter when it has no room to move.
  • Corrected the player collision box (original was too large).
  • Added a red mushroom power-up for health restoration
    (max hearts = 3; extra health converts to score).
  • Added visual health bars using heart icons.
    The player cannot die unless all hearts are depleted.

Extra Ideas

  • Climbing state for ascending the flag pole.
  • Ladder tiles for climbing tall structures.
  • Two new enemy types.
  • A mushroom power-up granting temporary invincibility.

Lesson 6 — Legend of Zelda

A top-down action adventure system inspired by classic Zelda dungeons, featuring randomized rooms, destructible objects, throwable items, enemy drops, event-driven interactions, and smooth screen transitions.

zelda


Topics Covered

  • Top-Down Perspective
  • Infinite Dungeon Generation
  • Hitboxes / Hurtboxes
  • Events
  • Screen Scrolling
  • Data-Driven Design

Original Assignments

  • Implement randomly dropping hearts from enemies, restoring one full heart when collected.
  • Add pots throughout the dungeon that the player can pick up.
    Picking up a pot updates the player’s animation to the “carrying” state.
    The player cannot swing their sword while carrying a pot.
  • Allow the player to throw carried pots.
    Thrown pots travel straight in the direction the player is facing and disappear when:
    • they hit a wall
    • they travel more than four tiles
    • they hit an enemy (dealing 1 damage)

Additions I Implemented

  • Pots can be broken by attacking them, and breaking a pot can drop a heart.
    Broken pots remain on the ground instead of disappearing.
  • Pots break on collision depending on their health; they don’t shatter instantly.

Extra Ideas

  • A random boss that can appear in the dungeon.

Lesson 7 — Angry Birds

(unfinished)


Lesson 8 — Pokémon

A turn-based battle system inspired by classic Pokémon games, featuring layered state stacks, RPG stat progression, GUI elements, catching mechanics, party management, NPC interactions, and encounter logic.

pok


Topics Covered

  • StateStacks
  • Turn-Based Systems
  • GUIs
  • RPG Mechanics

Original Assignment

  • Implement a Level-Up Menu that appears immediately after the “Level Up” dialogue.
    The menu must show, for each stat:
    X + Y = Z
    where X = starting stat, Y = stat increase for the level, and Z = resulting value.

Additions I Implemented

  • Added a state for catching Pokémon.
  • Implemented party-based battles with multiple player Pokémon.
  • Added NPC battles where the opponent also uses multiple Pokémon.
  • Added an NPC with dialogue and an interact-to-battle sequence.
  • Added a chance to fail running away, depending on the enemy’s level.
  • Added random pokéball spawns when walking in tall grass.
  • Implemented a field menu state for viewing the player’s party.

About

The assignments completed for the Harvard's GD50: Intro to Game Development course. Only LOVE2D projects.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors