New Challenges
To go alongside my linear algebra class, I decide to make a game to showcase my knowledge of linear algebra. Since this was a more math centric project, my professor and I agreed that I could make a game from scratch using the Windows Api library. This would prove to be a challenge for because I have never made a game engine on my own, so this was a new experience. I would have to calculate features in game engines that would normally come built in like collisions. Not only this I would be doing it in C++ which can prove to be more challenging than C#. Since this was going to be a real challenge, I decided to make a very simplistic platformer. This was to ensure that I did not run into scope creep which could overwhelm me due to time constraints.

Update 1
Fortunately, I was not starting this project completely from scratch. I was actually preparing for this contracts a few months before starting it by writing some of the vector libraries I would need. This was done mostly in C but it was relatively easy to get it running in C++.
Vector 2 Class
Here is a brief look at some of the code I wrote to handle vectors in the game. I am not going to go into the specifics at what everything does but just know that they come in handy in many situations.





Importance
Vectors control so many features in video games such as position, velocity, rotations, and normals. Without them it would be very difficult to specific a location in any kind of space. Almost all math related branches of this game started with the implementation of this class.

Update 2
This video showcases camera control and collisions with other entities for the first time. I would say that entity collisions were the harder of the two to implement. To achieve this, I had to use the separating axis theorem to determine if two entities were intersecting. This is done by taking each normal from the two entities and projecting their vertices onto each of them. If there is at least one projection where the projected vertices don't intersect, the objects are not touching each other. Fortunately, I already had a projection method built into the Vector2 class, so the process of getting it to work was mostly smooth.
​​
For the camera, I decided to give each object in the scene an absolute position vector, which represents where they are located, regardless of the camera's position. When the camera is moved, the absolute position is then compared to the camera's position to determine which part of the object is rendered. This is a rather simplistic but effective way of creating the illusion of camera movement without having to worry about projection.
What I Learned
Despite the project's inherent simplicity, this is one of the hardest projects I have ever completed. I did not realize until starting this project just how many tools game designers are given in game engines. When that is taken away, replicating these features can prove to be quite the challenge. While I do not think I will create many games without game engines in the future, I believe it was a good idea to give it a try at least once for the experience alone.