Back to work
2024

2048 in C

Low-Level Game Development with Raylib

C Bash Raylib

Overview

This project is a full recreation of the classic 2048 game built entirely in C, with a custom graphical interface using raylib. It was developed with performance, clarity, and modularity in mind - offering a complete game loop, smooth animations, and accurate tile-merging behavior just like the original.

The goal was to dive deep into low-level programming by avoiding engines or prebuilt game templates, instead building the core mechanics and graphics systems from scratch. The result is a responsive, polished, and faithful recreation of 2048 that runs at a consistent 60fps.

Key Features

  • Pure C Implementation - All logic written in C with no external game engines.
  • Modular Codebase - Separated concerns for merging, tile generation, movement, and rendering.
  • Raylib Graphics Engine - Custom-built UI with smooth transitions and efficient redraws.
  • Real-Time Input Handling - Responsive controls with intuitive directional input.
  • Testing Suite - Robust test cases for game mechanics and logic validation.

Challenges

Building a functional 2048 game in C required careful consideration of game state management, user input handling, and efficient algorithms for tile merging. The implementation focused on creating a clean, modular codebase that could handle the complex logic of the game while maintaining optimal performance.

Core Game Functions

The game logic is built around several key functions that handle different aspects of gameplay:

getRow() - Extracts specific row data

getColumn() - Retrieves column data

mergeRight() - Rightward tile movement

mergeLeft() - Leftward tile sliding

mergeUp() - Upward tile movement

mergeDown() - Downward tile sliding

The merging algorithm was particularly challenging to implement correctly. Each directional move required carefully sliding tiles to their furthest possible position, then checking for merge opportunities, and finally sliding again to fill any gaps created by merged tiles.

Graphics & Rendering

A huge shoutout to my friend Aiden Sanvido, an incredibly talented engineer who set up the entire raylib graphics framework from scratch specifically for this project. His expertise in graphics programming and C development was instrumental in bringing the visual elements to life.