Programming Projects

Programming in Games
Donner's Well


Donner's Well is a horror-themed roguelite packed with adventure and action. You play as the protagonist Maksim Volkov, an expert cave diver, who gets hired by a group of scientists to explore a mysterious cave. However, you quickly discover that this is not just some normal cave.
You must venture the cave to escape while uncovering secrets and monsters along the way.
​
This game was created in Unity with 3 others and we all programmed various parts of the game. There were many C# scripts I created:
-
LevelManager: manages the game
-
TransitionLevel: transitions the game after a boss fight
-
PointAtTarget: directs an arrow to lead the player to important points in a level such as enemies and the level's end point
-
This was the most difficult script as the arrow was very finnicky and it was hard to get it to point in the right, specific direction to a target​
-
-
TriggerRoomTransition: handles regular room transitions (not boss rooms)
-
AnimationFSM : a finite state machine that handles animating the player
-
ShakeScreenEffect: was supposed to shake the screen for level transitions, but was not finished due to scope of the project
​
The Quest
to
Become Whole

This was my first successful game that I created in Unity when I started learning how to utilize the engine. In this collection game, you play as a pearl necklace that is trying to collect pearls to become a complete or whole necklace. It takes place deep in the ocean and you must dodge enemy starfish trying to prevent you from becoming whole.​ Making this game allowed me to explore how to program player movement, camera perspective, and enemy behavior.
​
Pest Invasion

This game was inspired by a real experience, although very much exaggerated in this game. It is a FPS game where the player ventures into a haunted building. The player simply wants to go to the bathroom, despite being in an eerie and unfamiliar building, but they keep being chased by insects and pests. Thus, the player decides to equip themselves with a weapon, pest spray, to defeat the pests. Making this game allowed me to experiment with player movement, camera perspective, start to learn UI design in Unity, finite state machines, complex enemy behavior, and importing a complex 3D model from a website.
​
Boba Bear




The idea for Boba Bear came from my old phone case, which was adorned with an image of a bear sipping boba. I wanted to make a game centered around a bear in need of assistance to drink boba.
The ideation and creative process for the project were, overall, the most successful aspects. The gameplay requires the player to maneuver the straw (horizontally and vertically) around the cup to consume the boba. Initially considering a timer, I ultimately opted for a limit-based system, where the bear has a threshold for boba consumption; exceeding this limit results in a loss. This is meant to simulate hunger and feeding the bear until it gets full.
I developed three animations for the bear: idle, happy, and sad. These animations imbued the bear character with personality and emotional expression. Additionally, I crafted various classic boba designs, including jellies, pearls, and pudding to diversify gameplay visuals.
Following the completion of art assets, I proceeded to implement the game's level editor. This GUI-based editor allowed players to customize their game boards with different boba toppings, offering flexibility through features like tile removal/addition and scene configuration saving.
The most challenging aspect of the project proved to be the codebase. With this project, I was experimenting with my own game engine, and the way I added scripting was by integrating pybind. I encountered difficulties in getting pybind to work and was also impeded by a time constraint to finish the project. As a result, I coded the game logic in C++ rather than adding scripting capabilities to add game logic & behavior in python with pybind.
If I had more time on this project, I would refine the codebase and enhance the gameplay for a more enjoyable experience. With further development and polish, I believe the game has potential to excel. Nonetheless, the project served as a valuable learning experience, pushing me beyond my comfort zone and allowing me to experiment with new tools (like pybind and SDL3) and languages (C++ and Python).

Traditional Programming Projects
Photo Editor
June 2022
Alongside a partner, I developed an application where a user can edit photos using Java and Java Swing. The user is given many operations to play around with such as loading an image, saving an image, RGB, intensity, luma, and value greyscale, flipping an image horizontal or vertical, filtering an image by blurring or sharpening it, and transforming an image through greyscale or sepia. These operations can be seen on the rightmost side of the editor in the picture to the top right. In the middle of the screen, the user can see the photo they loaded and see it change as they perform various operations. To the leftmost side of the editor is a scrollable panel containing a histogram. The histogram displays the highest frequency RGB value among all pixels in an image.
​
For this project, I used object-oriented techniques to design and implement my code. This was a great learning experience that taught me more about object-oriented design. All the functionality of this program was thoroughly tested using JUNIT.

Battle Ships
April 2021

For this project, I worked with a partner, and we decided to imitate a Battleship game, a strategy game where two players compete in sinking each other’s ships upon a ruled grid. Rather than having two players, we decided to have the computer versus the player to avoid the issue where two players can see his or her opponent’s grid. The language we used for our program was java, eclipse ran our code, and JavaFX for the GUI.
​
This project was one my first biggest projects as a programmer. It helped teach me about design and maintaining a project scope. I learned how important it is to scope a project, especially in the face of a deadline, in order to deliver the best possible work.
​
​
Instructions using the program:
1) When you run the program, you will be presented with
the preview screen.
2) First indicate if you want a horizontal or vertical ship by pressing the horizontal or vertical button. You will then enter the ship's starting position (column and row), and length of the
ship in one singular number (ships can only be lengths
1 to 3) in the first text field.
3) Keep adding ships in valid grid coordinates until you
have placed 4 ships onto the grid (you can use the
second text field to remove any ship).
4) After pressing the set ships button to confirm the
placement of your ships, you will then move onto the
game screen where you will see both the computer’s
grid (rightmost grid) and your own (leftmost grid).
5) Now, you must click on different coordinates on the
computer’s grid in the hopes of hitting their ships.
(blue means miss and red means hit).
6) Keep guessing till you sink all of the computer’s ships and win.