Project Categories

Project Setting Academic
Team Size 1
Role(s) Creator / Developer
Languages C# HTML CSS JavaScript
Software/Tools Used Visual Studio, Visual Studio Code, Brackets, Xamarin, Vue.JS, Node.js, Inkscape (graphical assets), LMMS (music/sound effects)
Status Ongoing
Time Period 2019 - Current

About

Yet Another App Clone series is a name I've given to a collection of various web apps and other projects created for my work as a student at RIT. Rather than list every project individually, each one being made in at most a month or two off-and-on, it made more sense to group them all together.

My Work

Yet Another Weather App

Yet Another Weather App (November 2019) is a project created for IGME 235 - Intro to Game Web Tech. The goal of this project was to find a third party API and create a web app using it. YAWA makes as much use out of the OpenWeatherMap Weather API as is possible with a free tier and the time frame given (approximately a couple weeks). There are some features I would've liked to implemented into the project, but did not due to time constraints.

Please note: If testing the API, please limit API calls (i.e. searching a location, updating units, or updating view), as the free tier has a limit of 60 calls per minute.

Interface

  • Minimalistic, dark-themed, fully-responsive layout befitting the weather app
  • Scalable vector graphics for custom weather icons
  • Easy controls based on user feedback

Code

  • Grab current weather or five day forecast based on zip code from OWM API
  • Translated API object data into useful information, including converting from meteorological wind degrees to wind directions
  • Save user preference for zip code, units, and five-day versus current, which automatically loads upon the next page load

Spleeper (Yet Another Minesweeper Clone)

Spleeper (December 2019) is an academic project demonstrating DOM manipulation via JavaScript. Spleeper combines the main gameplay of minesweeper (flagging mines based off of numerical neighbor indicators) and the added quick movement and 'falling' from the Spleef minigame from Minecraft. The game is fully functional on desktop (mobile/portrait-based windows not supported), and offers a couple ways to play (keyboard + mouse or keyboard-only). Many classmates were interested in the game both during a demonstration and feedback day as well as the final presentation.

Note: there is a bug of unknown cause that makes rendering the game area odd in Chrome browsers on high resolution (2K+) monitors. This is either a Chrome issue or a graphical issue out of Spleeper's control.

There are multiple features I wanted to add but couldn't due to time constraints. There was also plenty of expressed interest in the project. If I were to continue with this concept, I would remake it either with PixiJS or a game engine such as Unity or Godot.

Interface

  • Three displays (instructions menu, play area + game info, and death menu) representing the three main game states
  • Retro-cyberpunk theme fitting the game's story
  • Animations added to give a more lively feedback

Assets

  • Custom sound effects for movement, death/falling, tile revealing, level up, tile flagging, etc.
  • Custom music for the instructions menu, main game, and death menu
  • Custom SVG player graphic
  • Symbolic instructions menu that is easy to read

Code

  • Translated Rosetta Code's implementation of Minesweeper in C# and based recursive revealing algorithm from it
  • 2D vertical/horizontal player movement based off of keyboard input
  • Flagging (intended for tiles that the player believes are access points; if not, corrupts the tile) / Revealing (acts in very similar manner to Minesweeper, with added twist that revealing an access point corrupts it and reduces the number of access points in the level) capabilities using R/F (respectively) keys or right/left (respectively) mouse-clicking
  • Game loop that allows for a time limit (entire level turns into corrupted tiles after expiration) as well as a timer for tiles that are corrupted (in state of corrupting - player has chance to get off of it) or access points (must wait until this timer expires to be able to use it to advance a level)
  • Difficulty that increases as the player levels up: decreases overall time limit, decreases corrupt/access timer, decreases number of access tiles initially available, and increases number of pre-corrupted tiles in tile generation. Each of these scales independently with different %-chances for each of them. All four have limits in place (i.e. difficulty reaches a highest-point).
  • Local storage keeps track of highest achieved score

Yet Another Brick Breaker

Yet Another Brick Breaker (February 2021 - March 2021) is a project created for IGME 330 - Rich Media Web App Development. The goal of this project was to create some sort of experience utilizing the Canvas API. YABB was created with my own mini update/rendering framework that made creating Canvas-based elements and scenes as simple to make and re-usable as possible with the time frame given (approximately a couple weeks). There are some features I would've liked to implemented into the project, but did not due to time constraints.

Interface

  • Minimalistic, dark-themed, moderately responsive (desktop only) with a theme befitting the game
  • Simple controls with two sets of options
  • Ability to pause the game and choose things such as scene and components of enemy difficulty

Code

  • Clear and well documented class/module structure with inheritance broken up between files like scenes, shapes, structs, and classes
  • Utility methods to perform common tasks such as getting random colors

Yet Another News Story Morphing App

Yet Another News Story Morphing App (April 2021 - May 2021) is a project created for IGME 330 - Rich Media Web App Development. The goal of this project was to create some sort of meaningful/useful mix of two API. YANSMA used RiTa and TheNewsAPI (with Vue for re-useable UI components) to create "An app that takes existing articles and replaces certain words in the results to generate ideas for writing/drawing/etc, with the ability to store results locally" with the time frame given (approximately a few weeks). There are some features I would've liked to implemented into the project, but did not due to time constraints.

Interface

  • Minimalistic, light-themed, moderately responsive (potentially some untested mobile issues) with a theme befitting the app
  • Simple three-panel layout with search options on the left, search/manipulated results in the middle, and stored results on the right.

Code

  • Clear and well documented class/module structure with inheritance broken up between files like components, classes, and app
  • Clear and thorough error handling and form validation with statuses used in place of results that are reported back to the user

Cryptid Keeper (Yet Another RPG Character Creator)

Cryptid Keeper (October 2021) is a project created for IGME 430 - Rich Media Web App Development 2. The goal of this project was to create any sort of web app with a server API backend implemented by a web app frontend. Requirements included supporting basic HTTP status codes, GET/HEAD/POST requests, AJAX, and query parameters. My app allows the user to create characters with 6 DnD-like stats and a custom pixel-art appearance of species, fur/skin pattern, outfit, and weapon from custom-made tilesheets.

Front-End

  • Basic, partially responsive three-panel layout, with character search on top, appearance options on left, and stats on right
  • Implements HEAD requests by checking if a character exists that the user enters into the search name box; GET requests load existing characters into the UI for editing
  • Implements POST requests by saving character data from the UI, identified by name
  • AJAX handled by XHR
  • User can choose species from top row of left panel; when this is updated, the tilesheet image sources update to account for its change in the left/right panels
  • User can choose fur/skin pattern, outfit, and weapon in left panel; choices are reflected in a preview (which animates changing) on the right
  • User can set 6 stats (Perception, Wit, Willpower, Agility, Strength, Endurance) and character name in right panel under the preview
  • User has ability to reset the UI back to defaults
  • All inputs other than appearance choices have tippy.js tooltips (appearance choices have always-present labels beneath them) and are validated client-side

Back-End

  • Serves client-side files (HTML, organized JS files, images, etc.) onRequest
  • Has HEAD API for checking the existence of characters saved in memory (params: character name)
  • Has GET API for serving characters saved in memory (params: character name)
  • Has POST API for saving/updating characters in memory (params: appearance, name, stats)
  • Character POST validated server-side
  • Properly handles various relevant status codes and manually handles routing for requests

Yet Another Idle Clicker

Yet Another Idle Clicker (October 2021 - TBA) is a cross-platform mobile app written with Xamarin for IGME 340 - Multi Platform Media App Development. The goal of this project is to use Xamarin to create a cookie clicker clone that makes use of various Xamarin controls and styling. This is still currently a work in progress.

Samples

These are some samples from the projects.

Videos

Spleeper

Yet Another Brick Breaker

Yet Another News Story Morphing App

Screenshots

Yet Another Weather App

Spleeper

Yet Another Brick Breaker

Code

Yet Another Brick Breaker

Yet Another News Story Morphing App

Cryptid Keeper

Places

Yet Another Weather App Project 2 @ people.rit.edu
Spleeper Spleeper @ people.rit.edu
Yet Another Brick Breaker Project 1 @ people.rit.edu
Yet Another News Story Morphing App Project 2 @ people.rit.edu
Cryptid Keeper Web App