Battle Bases is an online multiplayer game created in a team of 2. It utilizes Node.js and Socket.io for the server side, and JavaScript for the client side. When a user hits play, the game will let them know they are waiting for another player. When another player is found, the game will begin.
Each player has the same goal of destroying the other players base. They do this by managing their gold, deciding when to spend it on troops, which troops to spend it on, and when to upgrade their base. When enough damage is dealt to the other players base, the game will end and crown a winner.
What I was responsible for in this project was the asset management and server communication. Since this game only hosted two players in one room, it was optimal to do client side hosting. The first player to join would be treated as the host, and would recieve any and all requests from the second player. Socket.io being the middle-man in this case merely sent out the requests to the appropriate player. The host would be listening for events triggering such as the other player wanting to spawn a troop, or upgrade their base. This all happens simultaneously as the host updates the positions of each troop in an array and sends them to the other player to draw on their screen. Keeping the computations on client side minimized the amount of work that needed to be done by the server and ultimately contributed toward a smooth multiplayer experience.
If you're interested in the game, you can play it here or check out the code on Github here. Note that if you are playing locally, you'll need to have both tabs open and visibile simultaneously in order to keep both clients updating.
Learnel Kernel is a tutorial website created in a group of 5. It aims to teach children and young adults the basics of Linux. We wanted to achieve this by including a quiz system to help consolidate information learned, as well as a profile system to keep track of progress. We also included some alternative motivators to help keep a younger audience engaged, such as a fun poem that revealed more of itself based on how many quizzes that user had completed.
On the learning page, the user first reads the material and is then quizzed on it. The entirety of the back-end work on the quizzes was my responsibility.
The questions and answers are stored in a SQL database. That data is then read in with PHP. My intention was to convert this data into an array of JavaScript objects to easily keep track of the organized information. I found myself in a snag when trying to merge code from PHP which happens server side, and JavaScript which happens client side. In order to work around this, I figured out I could drop out of PHP mid loop in order to call a function which then creates a quiz object.
With the array of quiz objects created, I'm able to keep track of all the answers for each question and randomize the order they are shown in each time a quiz is taken. Upon completion of the quiz, if a user is signed in, their profile is updated in the database to indicate they have completed that quiz. Their progress is then shown on their profile page, and part of the poem is revealed.
If you're interested in viewing the site, it used to be hosted on a student account and is sadly no longer active. But you can still check out the code on Github here.
iCabbage is a turn based block pushing puzzle game created in Unity with a team of 4. The player's goal is to progress through a series of puzzles that steadily increase in difficulty as newer mechanics are introduced. The main mechanics to work around are enemies which chase you when you enter their line of sight. However, if an obstacle is in between the player and an enemy, then they will not chase them.
I was responsible for most of the functionality of the game, including map generation and all asset interactions, as well as the cover art and UI. Given the grid-like nature of our puzzles, I figured the best way to keep track of everything was with a multi-dimensional array. A map could be created with a read in array that consisted of numbers 0 - 4, with each one representing a different object or lack thereof. This allowed for extremely easy level additions. To keep track of movement, the player and enemies would be shifted around the array accordingly, and then the game itself would be updated so the display matched the array. Enemies would know to chase the player if they were in the same row or column after a move. If a player moved into a pushable object, that object would check if then next space was occupied and move accordingly.
If you're interested in the game, you can check it out on Github here.