Word Chain

A Roblox Word Puzzle Game

Word Chain Roblox Game Page Word Chain Gameplay Screenshot

About the Project

Word Chain is my first Roblox game—a word-chain puzzle experience built entirely using the Roblox Studio game engine and Luau as the main scripting language. Players are given the first word in a chain and must guess the subsequent words using only their first letters as clues. With multiple difficulty levels, custom-designed word lists, and systems to offer players hints and skips, the game offers engaging and replayable gameplay for puzzle enthusiasts.

Technical Highlights

Building this game taught me core game development concepts and Roblox-specific architecture:

Client-Server Architecture

Implemented a clean separation between server and client logic using RemoteEvents and RemoteFunctions. The server validates all player guesses via chat input, ensuring game integrity, while the client handles UI updates and visual feedback. BindableEvents facilitate communication between local scripts (GUI ↔ Workspace logic).

Client-Server Architecture Remotes folder structure
Explorer showing script organization Script organization in Explorer

Modular Code Organization

Scripts are organized into logical folders: server scripts in ServerScriptService, client scripts split into GUI and Workspace handlers, and ModuleScripts storing word chain data. This structure promotes maintainability and scalability.

Dynamic World Interaction

Using CollectionService with tagged objects (StartWalls, WordWalls, StageWalls), the game dynamically manages physical walls that display word chains via SurfaceGui. Walls become passable when answers are correct, with smooth transparency transitions.

Word walls in game SurfaceGui displaying word chains
Hint system UI Progressive hint reveal

Progressive Hint System

Hints reveal letters incrementally—each use exposes one more character of the answer. The system tracks hint state per stage and integrates with MarketplaceService for optional in-game purchases.

Data Persistence

Player progress is saved using Roblox's DataStoreService. Each difficulty level tracks the player's current word list independently, allowing players to resume where they left off across sessions.

Leaderstats showing player data Player data and leaderstats
UI buttons with animations Animated UI elements

Polished UI/UX

Buttons feature hover animations using TweenService with easing functions. Sound effects toggle on/off per player preference, and the interface updates reactively based on game state (stage number, difficulty, completion status).

Technologies Used

Luau Roblox Studio RemoteEvents DataStoreService CollectionService TweenService MarketplaceService ProximityPrompts SurfaceGui Git/Rojo

Slime Survival

A 2D Java Action Game — No Game Engine

Slime Survival Gameplay Screenshot

About the Project

Slime Survival is a 2D top-down action game built entirely from scratch in Java—no game engine, no frameworks, just pure code. Players navigate through 8 progressively challenging levels, battling different types of slimes while dodging incoming arrows. The game features WASD movement, directional attacks using arrow keys or mouse clicks, and a health system with invincibility frames. Every system—from rendering to collision detection to AI—was hand-coded, giving me deep insight into how games actually work under the hood.

Technical Highlights

Building a game without an engine forced me to implement core systems from the ground up:

Custom Game Loop

Implemented a threaded game loop running at 60 ticks per second. The loop handles all game logic—entity updates, collision checks, state management, and rendering—in a controlled, frame-independent cycle. This taught me the fundamentals of real-time game architecture.

Java Swing & AWT Rendering

Used JFrame and JComponent for window management, with Graphics2D handling all sprite rendering. Each entity draws itself using custom drawSelf() methods, with sprite selection based on direction and state (hurt, attacking, idle). No external rendering libraries—just Java's built-in capabilities.

Object-Oriented Architecture

Clean separation of concerns with dedicated classes: User (player), Slime (enemies), Arrow (projectiles), and Map (game manager). Each class encapsulates its own state, behavior, collision logic, and rendering—demonstrating strong OOP principles.

Custom Collision Detection

Wrote collision detection algorithms from scratch using Euclidean distance calculations and bounding box checks. The system handles player-enemy collisions (with knockback), attack hitbox detection, and arrow impacts—all without physics engine assistance.

Enemy AI & Variant System

Four distinct slime types—Regular, Fast, Tank, and Boss—each with unique stats (health, speed, size). Slimes move randomly using tick-based direction changes and bounce off walls. The type system uses constructor parameters to configure variants, keeping the codebase DRY.

State Management & Invincibility Frames

Implemented damage states with invincibility frames—players and enemies can't take repeated damage within a cooldown window. Attack states freeze player movement during swings. These mechanics required careful tick-based timing and boolean state tracking.

Custom Sprites & Visual Feedback

All sprites were custom-made and loaded via ImageIcon. Characters have directional sprites (up, down, left, right) and hurt states. Arrows display warning icons before entering the screen, and attack hitboxes render visually to give players feedback.

Technologies Used

Java Swing AWT Graphics2D KeyListener MouseListener Threading OOP Custom Sprites

How to Run

1. Clone the repository:

git clone https://github.com/ashton-reyes/2D-Java-Slime-Game.git
cd 2D-Java-Slime-Game

2. Run the game:

javac -cp src\main\java -d build\classes src\main\java\*.java
xcopy /E /I /Y "resources" "build\classes\resources"
java -cp build\classes Map