top of page
Image by Izdhan Imran

Objective 1

1. Implement multiple completed games,  including 3D games, using common tools, languages and software for web, console, PC or mobile platforms.   

Screenshot 2023-04-08 223042.png
Screenshot 2023-04-08 223133.png
Screenshot 2023-04-08 223240.png

Battleship, Hangman, and Tic Tac Toe

What's better than one game? Three in One! This program includes the games of Battleship, Hangman, and Tic Tac Toe. Each one is a game on it's own and each one comes with it's own AI to play against. 

​

These three iconic games were made using Visual Studios in the C++ language.

​

This game is 2D and uses only the terminal window for it's graphics. 

Helicopter: The Tank Game

Helicopter: The Tank Game is a first person tank shooter with up to 4 player local split screen. Don't have 3 people to play with? Fear not, the bots are always there to play with you. 

​

This game was made using the Unity game engine and was written in C#.

​

This game is 3D

Screenshot 2023-04-08 225419.png
Screenshot 2023-04-19 203030.png

Not Your Grandma's Rock Paper Scissors

In a traditional game of Rock Paper Scissors, you get three options to choose from. What if you added another 12 to that? Choose between rock, fire, scissors, snake, human, tree, wolf, sponge, paper, air, water, dragon, devil, lightning, or gun. 

​

This game was made with Visual Studios Code, SDL2, and was written in Rust.

​

This game is 2D, using the SDL2 Library for graphics.

Objective 2

2. Design, develop and implement the    

architecture and infrastructure needed to support a complete game project.

Uno!

This is a recreation of the card game Uno using C++.

​

In this game, players start on a menu where they can choose to play the game, see game stats, learn how to play, or exit the game from this main menu. After the game is over, they can choose to play again, or just exit.

​

This game also implements a save system that stores not only the user's, but also the opponent AI's stats. It show you how many games have been won, how many games have been lost, as well as a W/L ratio.

Screenshot 2023-04-17 221939.png
Screenshot 2023-04-17 221907.png
Screenshot 2023-04-08 223042.png
Screenshot 2023-04-08 223133.png
Screenshot 2023-04-08 223240.png

Battleship, Hangman, and Tic Tac Toe

This is a recreation of the games Battleship, Hangman, and Tic Tac Toe using C++.

​

Upon entering the games, players will be asked for a name. After entering a name, they are presented with a menu and the option to pick one of the three games mentioned about or the user can exit. Each game gives a brief description of how to play, and walks to player through the controls. 

​

After each game, the user is taken back to the main menu where they can choose to play a different game, play a rematch, or again exit. 

Helicopter: The Tank Game

Helicopter: The Tank Game is a first person tank shooter with up to 4 player local split screen.

​

This game has a main menu from which the user can play the game, go to change their settings, learn the controls, or just exit the game. 

​

Within the options, users have the option to choose whether or not they want the map of the day, the volume of the music, sfx, and overall volume level of the game. The user can also choose to play with up to 3 other people in local split screen using the drop down menu. 

​

Within the main game, players have health bars, timers, and a scoreboard for the current match. The health bars are also universal, so you know the health of your enemies. 

​

After the match, users can choose to play again or just exit. 

Screenshot 2023-04-08 233114.png

Objective 3

3. Implement and analyze fundamental data structures and algorithms associated with game applications supporting gameplay mechanics.

Uno!

This is a recreation of the card game Uno using C++.

​

The way that cards are dealt and drawn make use of vectors. Cards are randomly selected from the deck vector, and pushed into the players vector, after turning them into actual "Cards" and not just numbers. 

​

When a player goes to play a card, there are many steps that go into making sure they play a card that is able to be played. This again makes use of vectors to check the color of the cards in the players hand and then returns those that are playable to the player to easily select from. If there are no cards they can play, the game automatically draws for the player until the get a card they can play.

​

This game also implements a sorting algorithm in order to make the cards in the player's hand easier to read. This sorts the cards first by color and then by their number. 

Screenshot 2023-04-17 222119.png
Screenshot 2023-04-17 221907.png
Screenshot 2023-04-08 223042.png
Screenshot 2023-04-08 223133.png
Screenshot 2023-04-08 223240.png

Battleship, Hangman, and Tic Tac Toe

This is a recreation of the games Battleship, Hangman, and Tic Tac Toe using C++.

​

This game makes use of many different arrays and vectors in order to store critical information such as player ship placement, sides guessed(for the AI), and even the words to pick from in Hangman. 

​

This game also includes an algorithm for the AI to find the players ships. While in the beginning, the AI chooses a random position to shoot, it then uses a grid pattern to search the board until it hits a player's ship. It then searches and destroys the rest of the ship, even being able to double back and go the other direction if it happened to miss one part of the ship.  

Music Playlist using Linked List!

This software makes use of a Linked Lists to keep track of music for the user.

​

This software makes use of structures in C++ and connects them using a Linked List, which is really just a bunch of pointers

​

This software is fully circular doubly linked list, which means it can go both forwards and backwards. It also means when you get to the end, you go back to the beginning and vice versa. 

​

This software also uses overloading of functions in order to give the user multiple ways to find songs in this playlist. They can search by artist, song name, or by Index number. Users are also able to delete entries very easily.  

Screenshot 2023-04-09 001514.png
Screenshot 2023-04-17 213629.png
Screenshot 2023-04-17 213646.png

Sorting Algorithm

In this program, I made two different types of sorting algorithms. 

​

The first sorting algorithm I made was a bubble sort algorithm. Basically, using a do while loop and a for loop, you check to see if the left number or the right number is bigger. If the left one is bigger, you swap them. You do this over and over again until it goes through all the numbers.

​

The next algorithm is the selection sort algorithm. This one iterates through your array or linked list, and checks for the lowest number. At the very end, it swaps the current index and the index that the lowest number was on. It does this over and over again until the array is sorted. 

Objective 4

4. Use software development processes to analyze a project problem, and to design, build, and test a corresponding software solution.

Helicopter: The Tank Game

While working on this game, I came across an issue the AI tanks were having using  ray casting. The AI would send out a ray cast, but it would almost never hit the players character. It would hit the box behind the character. 

​

The AI needed this ray cast in order to "see" the player and therefore target him. If the player was out of the range of the ray cast, or out of line of sight, the AI would not target him.  

​

Using debug ray casts, help from the teacher, and taking a little break from that section of code, I found the problem. The collision on the tanks was a sphere, and the ray cast was shooting along the ground. This lead to a very small area of collision that the player could be detected through!

 

After finding that out, it was a simple fix. All I had to do was to readjust the ray cast fire position to start halfway up the model. This worked, and the AI tanks were now able to "see" and shoot the player!

​

Screenshot 2023-04-08 225419.png
Screenshot 2023-04-08 223042.png
Screenshot 2023-04-08 223133.png
Screenshot 2023-04-08 223240.png

Battleship, Hangman, and Tic Tac Toe

While working on the battleship game AI, I ran into the problem of multiple ships being right next to each other. If the ships don't have a space between them, the AI would get confused on which ship was which, causing it to break.

​

To combat this, I took a page out of the original games book. In the original game, players are not allowed to place their ships right next to each other. I had left this rule out previously, but now it would come in handy to be able to fix my AI's problem. 

​

 Using some math and a couple new functions, I was now able to check and prevent players from placing their ships right next to each other. Since it was on a grid, all I had to do was get the other ships positions, add or subtract 1 for left and right space, and add or subtract 9 for top or bottom spaces. This prevented other ships from being placed their, and fixed all the issues the AI had with trying to destroy your ships.  

Uno!

During creation of the AI playing cards, I kept getting an error talking about going out of range of the vector size. It kept crashing my program, but it was not happening consistently  and I couldn't find where the problem was. 

​

I then went through using break points to try and pin point the problem spot was. I noticed that it was crashing after the player played a card some times. So I put a break point there and noticed it crashed after the players turn. 

​

I then put a break point on the AI's turn, and walked through that. I didn't find the problem immediately, but using the break points I was able to look at all the values of the variables being used. Everything seemed to be iterating through fine. 

​

That's when it hit me! It was looking for a card in the player's hand, not in the AI's hand. This would cause it to break only some of the times because some of the times the player and AI would have the same hand size. I fixed it by simply changing it to iterate through the AI's hand instead, and it starting working again. 

Screenshot 2023-04-17 222119.png
Screenshot 2023-04-17 221907.png

Objective 5

5. Demonstrate development skills using multiple programming languages, development environments, and platforms, including advanced and/or experimental topics in game programming.

Screenshot 2023-04-19 203030.png

Not Your Grandma's Rock Paper Scissors

This game was coded using exclusively the Rust programming language, which is a newer programming language. It is similar to C++, but has a lot of differences. 

​

Using Rust and the SDL2 library, I created a fun rock paper scissors games with some better graphics than the terminal. In the future, I see rust being more common in game development. Although it is a little awkward to learn at first, it gets better with time. 

Carrier

Carrier is an open world FPS that is currently in development. Some call it a modern Sea of Thieves. It is being made using UE5 in C++ and blueprints. 

 

Withing this game, there are many experimental parts.  The first of which being using the water plugin that comes with UE5. It is an experimental plugin in which you can add oceans, lakes, rivers, etc. to your project. We used this for our game, which takes place mainly on a boat. Using this plugin, we have been able to get our first ship floating and driving on the water. 

​

Since this game is going to be online, I took it upon myself to work on setting up online multiplayer capability. I did this using the steam subsystem and a lot of tutorials, but learned so much about how multiplayer functions. The multiplayer aspect works in the game. 

Screenshot 2023-04-19 203522.png
Screenshot 2023-04-19 203416.png
Screenshot 2023-04-19 203550.png
Screenshot 2023-04-19 203454.png

Liberty's Estimation Station

Liberty's Estimation Station is a home building estimation software coded in python and using libraries such as tkinter and scikit learn. 

​

While python is not a super new or advanced language, it was new to me before starting this project. I had to learn this language within a couple weeks so I could be able to get this project done.

​

Using what I already new from other languages, online research, and help from Professor Hinton, I was able to learn everything I needed to learn about python in about a week, and get the project complete in time for the SIP Fair. 

Objective 6

6. Establish collaboration, mentorship, and professional leadership skills by working with other disciplines to deliver highly polished and completed projects.

Carrier

Carrier is an open world FPS that is currently in development. Some call it a modern Sea of Thieves. It is being made using UE5 in C++ and blueprints. 

 

For this project, I am the team lead and product owner. I was able to pitch to production studio, and get my project in. With the help of my other leads, Morgan Soetart (Design) and Eli Buetler (Art), we have been able to put together the start of a great game.  

​

As the team lead, I was in charge of putting together tasks, clearing obstacles, and most importantly, fixing Github. I have also been working with my programmers to implement their code into builds, and helping to bug fix any buggy code that gets pushed.

​

I've worked with every team member on different parts of this project. From answering questions about design, to talking with Art about art style and what we want, I have been able to oversee the production and help code this project.  

​

This project will be continued to be developed by my team and I. 

Screenshot 2023-04-19 203522.png
Screenshot 2023-04-19 203416.png
Screenshot 2023-04-19 203550.png
Screenshot 2023-04-19 203454.png

Possession

Attic Template.png

Possession is a 3-6 player board game with unique mechanics and fun gameplay. 

​

Working with 2 others, we were able to design and create a prototype for this game possession. In this game, you can play as either the ghost player, or a teenager trying to steal the ghost jewels. There is a catch, however. The ghost player is invisible to the other players.

​

During the production of this game, I was assigned to figure out the ghost mechanics. How do you make a player invisible yet still make it a fair game? The solution came from inspiration from another game called captain sonar. The ghost character has a separate card from the players where he can keep track of where he is. The catch is that he leaves an invisible trail behind him that he cannot cross. This leads to instances where the ghost can get stuck and have to reveal his position to the other players to get unstuck. 

​

I worked with the others to make sure the ghost mechanic was balanced, and to get feedback on board design which I was also in charge of. This helped me with my communication and to be able to see what working in a team to create a project is like.  

Wolf Guardian

Wolf Guardian is a mix of a fighter and a metroidvania, also known as a fighter-Vania. I worked on this project as a programmer. 

​

During production, I worked closely with my fellow programmer/program lead to build a great game. We would often talk problems out together and plan out what needed to be added to the code. 

​

I also worked closely with the design team in order to know what was needed in the game and where the game was going. It's easy to program something that works for a specific instance, but harder to program for something that will work for every instance, so knowing the instance cases my code would be used in down the road helped me to write better code. 

​

I also worked with artist to implement their animations, assets, etc. into the game, and discussed possibilities of other animations that would help to fix some of the buggy code, such as a sliding animation for going down slopes to help it look better when walking down these slopes. It also helped with some of the movement bugs we were having with slopes themselves. 

Screenshot 2023-04-19 204242.png
bottom of page