After taking an Intro to Programming class at Greenville College, I was hooked. I love thinking of creative programmatic ways to solve problems and I hope that I can find a job that lets me mainly to development work. Here are a few of my favorite projects.

Tanks XNA

May 4th, 2010 by admin | 113 Comments »

In Programming and Data Structures 2, we were assigned a project to make a game in C#. I had previously developed a tank game in C# but it was not very good. I decided that I would develop another from scratch using XNA Game Studio 3. While there are several related tutorials for similar games, I chose to build this from the ground up to see if I could do better. It was a great experience and a ton of fun to make.

    This is a screenshot of the game. Across the top is the complete UI that I developed. The icons in the middle are the different types of weapons that you can purchase. It also shows how much health you have using a colored bar. You can also see a sweet explosion happening using a particle system.

    There are 10 different weapon types. The one going off right now is the big red one (4th from the left). It causes a lot of damage, as well as fall damage from taking out the dirt underneath the other tank. The 5th-7th are shotgun style and they fire 5 or 10 projectiles at once. The 8th-10th are two-stage projectiles: They shoot out one and when you press the fire key again, it will explode into a bunch of smaller ones.

    One of the big things I had to work on were random level generation algorithms. The last two images were examples of one of my methods, involving generating a series of random altitudes and then generating a sin wave function to map between the points creating a visibly smooth curve. The one in this picture is just using random numbers to alter a slope variable with limits.

    This is the 3rd and final level generation method. It simply created different variations of sin waves and overlays them, creating one random seemingly-patternless slope. This seems to be an accepted method elsewhere online.

    This is just a shot of part of my UpdateProjectile() method. It loops through the active projectiles and updates their positions. It then scans the level surface and tank locations to test for collisions. If it detects a collision, it will then explode, releasing the correlated particle explosion

    Finally, here is one of the pixel management methods that I had to make in order to more efficiently handle the calculations relating to the level. It takes an array of all the pixels and groups them into a multi-dimensional array based upon columns and rows. This allows me to do calculations related to their column levels.

Recruiting Manager 4

April 29th, 2010 by admin | No Comments »

This is a program I developed almost entirely on my own for LRSSports during my AWESOME internship in the summer of 2009.

    They had a previous version of the software that had been developed in Visual Basic and they needed a new one written in C#. Due to all of the additional functionality that they wanted, I was unable to utilize the code from the previous application and I had to write the entire RM4 from scratch! I had never developed a full application before and it was a great learning experience. They have a team of awesome and friendly developers that helped me whenever I hit a speedbump. I didn’t get a chance to entirely finish it, but I was able to have the main functionality of the application mostly completed by the time I returned to school.

    The application manages information about football high school and junior college prospects. The program fully interacts with SQL Server and gets updates whenever new information is available. This is the prospects screen. It displays the information and picture for the currently selected prospect. It has information about their schools, their physical tests, when they were evaluated, offers that have been made to them, and many other things. There is complete search functionality that can be used to find prospects based upon many of their information fields.

    This is the schools page. It tracks information for the different schools that LRSSports’ recruiters track. It keeps all of the main information about the schools including the different contacts, such as Head Coach, Principal, and Trainer. There is also a button to get prospects for the selected schools, which sends you to the prospects screen and automatically searches for students that attend that school.

    This is a shot of the reporting page. The application has many built-in reports that can be run based upon given statistics or even the groups of prospects or schools that have been searched for. It supports saving directly to pdf, as well.

Along with these features, it also has the ability to map out the best route for the recruiters to travel between different schools. It also has a video tagging system that detects which videos have been tagged with a particular player in them, then allowing the user to go online and watch the videos of the games in which that player participates. If you want more information, check out the Recruiting Manager page at the LRSSports website. Along with this software, they have another AMAZING product called ‘Edge‘ which is a real time video tagging system for statistics tracking.

Conway’s Game of Life

April 29th, 2010 by admin | 94 Comments »

This program is my C# take on the popular Conway’s Game of Life. CGoL is a system of points that are governed by 4 main rules:

  1. Any live cell with fewer than two live neighbours dies, as if caused by underpopulation.
  2. Any live cell with more than three live neighbours dies, as if by overcrowding.
  3. Any live cell with two or three live neighbours lives on to the next generation.
  4. Any dead cell with exactly three live neighbours becomes a live cell.

    The program has a set of X’s and O’s. You can toggle a point’s status between the two by typing in the coordinates. You can also press enter to advance the system 1 level. I also made the X’s red for easier viewing.

    This example setup I chose for the picture is an example of Gosper’s Glider Gun. There was a contest to create a design that would infinitely expand. A team from MIT, led by Bill Gosper, created this setup which will continue to bounce back and forth.

    In addition to bouncing back and forth, it also launches little groups of particles which continue indefinitely, as you can see in the picture.

Towers of Hanoi

April 29th, 2010 by admin | 61 Comments »

In order to more fully grasp the concept of recursive methods, I developed a program to automatically solve the common “Towers of Hanoi” puzzle. The object of the game, if you are not familiar with it, is to get all of the discs from the left pole to the right pole. You can only move 1 disc at a time and you cannot put larger discs on top of smaller discs.

    This is a shot of the program. The program starts by asking you how many discs you would like to use. It then draws them to the screen and you are able to hit any key (except enter) to move forward one step. This will move one of the discs to the appropriate peg. If you hit enter, it will automatically solve the whole puzzle. A running count is kept at all times.

    If you enter a larger amount of discs, it will draw a larger amount of discs. As you add more discs, it takes exponentially more steps to complete the problem. For example, 3 discs will take 7 moves, while 15 discs will take 32767.

    If you enter a number larger than 15, due to screen size and calculation speed, I set up the program to no longer draw the towers and only list the final results.

    This is one of the methods I wrote. It shows the addition of the peg and the disc objects into my system. It also shows that if there are greater than 12 discs, it will no longer draw the image. It then starts the process and away it goes!

Friend Sphere (Top Friend Sphere)

April 28th, 2010 by admin | 106 Comments »

During my sophomore year, Jesse Shaw and I decided that we wanted to develop a Facebook application. I had already developed a 3d rotation flash engine and we had the idea to make it into a ‘Top Friends’ style application. I altered the flash file to accept external arguments from the php and with the help of Jesse, I built the php site to back the application.

    Here is a screenshot of the application. It does not work anymore, because facebook updated their structure, but this was taken while it was still functional. As you can see, the background is for Redding, a local band. I set the application up so that we could have sponsered ‘themes’ that users could select. There is a sphere in the middle that has their logo and a link to their website.

Programming and Data Structures 1

April 19th, 2010 by admin | No Comments »

I really feel that Programming and Data Structures 1, taught by Dan Coulter, was a huge stepping stone in getting me into programming. It taught me a lot of the basics of object-oriented programming. We built several small programs to practice different elements of OOP. These are a few of the projects I created during that class:

    This is a program I wrote that securely deletes files. What it does is loads a file that you select, alters every byte to be a random character, re-saves the file, and then deletes it, covering up the hard drive imprint it might have left by simply deleting it.

    One of our assignments was to roughly calculate Pi using the Monte Carlo method. Basically it does it by randomly plotting points inside of a square. The program then calculates Pi by multiplying the number of points that fall within a circle inscribed within the square by four and then dividing that by the total number or points. Not a perfect calculation, but a good estimation.

    This was my midterm project for PDS1. Ironically, a tank game was also my midterm project in PDS2. This one was built in a Windows Forms Application and was not anywhere near as advanced as the XNA one, but it was a very important step in my growth as a developer. It was actually not even drawn using the paint methods. It was a fun project, though.

    Another one of our projects was to create a TicTacToe game. We got bonus points if we were able to make the computer play, and even more bonus points if the computer was unbeatable. I programmed it so that there was no way you could win, but the only catch was that the computer got to go first. Obviously, this makes it much less complicated than letting the user go first, but I was taking it one step at a time and I felt that I had achieved enough on that project.