Darin Beaudreau

My Work


On this page, I will display my most recent projects. Each collapsible section contains information on what the project is, how it works, and what problems I faced while working on it. I also provide links to the source code (via Github), a link to play the game online (if applicable), or screenshots of the program (if applicable).

All of my personal projects, as well as some school projects, can be found on my Github page.

I also have solved several problems on Project Euler, which is a website that offers mathematical problems to solve via programming. The website has a few rules, the most prominent of which is that your program must be able to solve the problem in under a minute. I have found this website very helpful in fine tuning my mathematical abilities when it comes to programming.

Project Euler:  http://www.projecteuler.net


Project List


Adventurer's Archive

The Project

Adventurer's Archive was my final project for both my Mobile App Programming I and Software Engineering II classes in the Fall 2016 semester. We were given free reign to choose any project we wanted to work on so long as it met certain guidelines. I chose to submit the project for both classes because I figured that because I was learning Android development in one class, I could use that knowledge in the other class so I could get a better understanding of it and cut my work in half. The app was a team effort, and because one of the team members was also in both classes with me, the work was divided among 4 people. Initially, I did not know what I wanted to work on, but my team member Ethan proposed an idea I instantly thought would be both academically and personally interesting. The idea was to create a companion app to the Dungeons & Dragons tabletop roleplaying game -- specifically, the 5th Edition, for keeping track of character information. Both Ethan and I are avid fans and players of Dungeons & Dragons. We thought this would be an interesting project to work on because, although there are other apps like it on the Android store, many of them are poorly designed, with missing features and ugly interfaces. We wanted to make an app that we would have total control over.

How It Works

For this project, we used Android Studio because although Software Engineering II did not specifically have a requirement for an Android app, Mobile App Programming I did. We decided that we wanted to make a very straightforward interface where the user would require very minimal explanation on how to use the app, provided that they know how to play Dungeons & Dragons. So I designed a few basic screens and put together a layout flow.

The Problem

This was a very challenging project for me, not because of the Android development itself, but because of the project management. I have very limited experience working in groups on projects like this, and my biggest issue was figuring out how to delegate tasks. Because all of my experience is working solo, I had trouble figuring out what tasks to give everyone. Despite learning about Agile in Software Engineering I, we never actually learned how to create tasks... just how Agile itself is structured. Because of this, I found myself early in the project taking all of the tasks on myself, justifying it by telling myself that I needed to get some core features working before my teammates could start working on their assigned tasks, where in reality, I just didn't know how to break the project up into bite-sized pieces for everyone to work on together. Towards the end of the project, however, I was able to better delegate these tasks and we were able to implement every feature in our original proposal, as well as a few more.

One of the features that I was not satisfied with when it was done was the Save/Load feature for saving and loading character sheets. The reason I didn't like this feature is because it was rushed so we could meet the fast-approaching deadline for the project. I ended up implementing it by simply serializing the character sheet objects and writing them to a file. The problem with this method is that any time I made modifications to the core character sheet classes, the deserialization would no longer read objects written by previous versions of the app because the structure of the objects was different, and players would lose all the information they had saved about their characters. I am hoping in the future to implement a new Save/Load scheme that would save the information to generic XML files so it would be readable by all future versions of the app.

I think I learned a lot in the development of this app -- both about Android development, and project management. I still have a long way to go with the latter, but I thoroughly enjoyed working on this and hope to continue developing it outside of school, as I have a personal use for it outside of the assignment.

Download

Github Project Page: View

LifeFX

The Project

LifeFX was originally meant to be an implementation of the "Wireworld" variant of Conway's Game of Life, but after searching around and looking at other rule sets, I found some that I thought were interesting and decided to make a suite where I could use multiple rule sets in the same environment. The project currently contains the variants "Wireworld", which allows cellular automata to simulate electronic circuitry. It also contains a Cyclic Cellular Automaton mode, which uses cell colors as a state machine, which causes some very abstract patterns to form. Finally, the "Rainbow Game" of Life, which is basically the same as the original Conway's Life game, except that there are multiple colors cells can take on, and each cell that is born takes on the average color of its neighbors.

I created this project so I could finally try to learn JavaFX. I have been using Swing so long, but given that it has been deprecated for quite some time, I figured I should learn something new. Previously when looking at JavaFX, I thought that the tutorials available were terrible, and I wasn't a fan of the syntax, but it seems that JavaFX has changed, and now that I have given it a try, I don't see myself returning to Swing.

How It Works

I utilized a simple Canvas from JavaFX to handle the drawing, which proved to have very easy-to-understand methods and documentation. I also used lambdas for my event handlers, as I am new to Java 8 and thought they were the most important new feature to learn. The Environment class I used was inspired by a user on StackOverflow who was also making a Game of Life simulator. However, I have modified it for my own purposes. I also had to make use of several of JavaFX's UI components, such as buttons, sliders, choice boxes, and check boxes to allow the user to interact with the settings of the game itself.

The Problem

I didn't encounter any significant problems while working on this project besides learning JavaFX itself. This was mainly just a fun side project to familiarize myself with the JavaFX library so I would have some frame of reference for future applications.

Download

Github Project Page: View

Screeshots: 1 2 3

Cutie Thief

The Project

Cutie Thief was my entry to the Global Gam Jam for Spring 2016. I had heard that the game development club at my university was hosting it and decided to take part. I formed a team that consisted of myself and five others. The theme of the jam was "Ritual", in which you have to represent that word, in whatever sense you choose to interpret it, in a game that you create in just 48 hours. Cutie Thief is what came of that. In Cutie Thief, you play as a young girl who wants some of the farm animals the local farmer has, but he won't give her any, so she decides to steal them. You must collect animals in each level and deposit them into a fenced area while avoiding farmers trying to get their animals back and wolves who try to eat the animals. Our interpretation of the "Ritual" theme is revealed at the end of the game.

How It Works

Cutie Thief was created in Unity 5. We used some very basic snippets of code from one of the other team members' previous projects, but otherwise, everything was done from scratch, including all art and sound assets. I handled most of the programming and the animal sound effects, while my teammates handled some minor programming work, as well as art asset creation, scene design, and music.

The Problem

This was my second game jam, in which I had 24 hours less than the previous one to create a game from scratch. No small feat. However, the problems that arose were due to my inexperience in Unity, and from being rusty with C#. Prior to this jam, I had only done a few tutorials on the Unity website and had never created anything else with it. I definitely learned a few things and would like to try making a game in Unity again sometime. Perhaps I'll use it for a jam again in the future.

Download

Github Project Page: View

Screenshots: 1

Monster Mash

The Project

Monster Mash was a game I created for Ludum Dare 33, a game jam. A game jam is an event where you are given a limited amount of time to create a game from scratch. In the case of Ludum Dare, I had 72 hours to create Monster Mash from scratch. It is a simple game, similar in style to my other game, Generic Zombie Shooter. Excluding hours spent sleeping and short breaks, this game took roughly 55 hours to complete.

How It Works

The game was created in Java using Swing/AWT, and uses a custom game engine, since Ludum Dare requires that everything be written from scratch. Due to the time constraints, I did not try anything too new and fantastic, but I did implement some features that required some programming techniques that I was not as familiar with.

The Problem

This was my first game jam ever, and lots of problems came up. Mostly, I had trouble deciding what features I should implement next and how. With so little time to plan out the game's features, I had to work fast. I believe that this was a very good learning experience, as I had to learn to be more organized than previous projects where I could simply take my time. While I did not get to implement every feature I originally laid out, I was satisfied with the end result. Overall, I am glad I took part in the event, and I want to participate in another when I have the time.

Download

Github Project Page: View

Screenshots: 1

Tune Traveler

The Project

Tune Traveler was my final project for the Spring 2015 Organization of Programming Languages class. The idea behind the project was to implement the A* path-finding algorithm visually and then, as a little something extra, give it some sound. I wanted the algorithm to generate a "song" as it traverses the nodes in the grid by playing a random sound every time it moves from node to node.

How It Works

The A* algorithm is a slightly more complex version of Djikstra's algorithm, another pathfinding algorithm that is taught in Discrete Structures classes. The way it works is by using three variables to determine the "cost" of moving to another node in a grid. The path with the lowest "cost" is the shortest path. The variables involved are represented simply as F = G + H, whereas F is the sum of G, which is simply 10 or 14. A 10 means that the move from the current node to this node is a horizontal or vertical movement, whereas a 14 is a diagonal movement. The H represents the "heuristic" variable, which is simply the sum of the horizontal and vertical offsets from the current node being looked at to the goal. Then, a flood fill algorithm is used to look at all the nodes surrounding the origin, and it spreads out until it reaches the goal (ignoring obstacles of course). Once it reaches the goal, it simply traverses backwards from goal to origin, picking the neighboring node with the lowest F cost. In this way, a path is created.

The Problem

This was my first time tackling the A* algorithm, and it provided a lot of challenges for me. Mostly, the difficulty was finding a guide for the algorithm that explained the steps needed to find the path in a concise manner. Many guides on the subject tend to differ in what they think are the steps needed to find the path, so when I would find one guide that wasn't clear enough on a certain step of the algorithm, I had to look elsewhere, and that often meant starting from scratch because the new tutorial would do things completely differently. In the end, the algorithm wasn't without flaws, but for the most part worked as intended. Given the time constraints and that I worked alone on the algorithm, I was happy that I at least got from point A to B.

Download

Github Project Page: View

Screenshots: 1

Generic Zombie Shooter

The Project

This game was originally started a week before Halloween in 2012. I wanted to make a Halloween-themed game in 7 days to test my skills. Unfortunately, I vastly underestimated what I didn't know and still needed to know in order to make the game. After much frustration, and with other projects taking my interest away from the project, I dropped the project for 9-10 months. I recently picked it back up and worked on it for 2 months straight, without missing a day. As a result of my persistence, the game is finally done just in time for Halloween 2013!

How It Works

Generic Zombie Shooter is a top-down shooter game where you click to shoot in the intended direction. Originally, this game was intended only to have basic shooter elements, and a few different weapons. After getting some input from people I was showing it off to, I ended up taking it so much further, and now it contains more than just a few weapons. There is a leveling and attribute improvement system, as well as a store to buy the new weapons and ammo, rather than just starting with them right away. There are also power-ups, bosses, and several other neat features.

Originally, I was using placeholder images found on Google and a couple of poorly done art assets I made in Photoshop, but I took this opportunity to improve my sprite drawing skills a bit and made every art asset myself.

The Problem

This game presented a lot of problems that helped improve me as a programmer, as well as an artist. But most importantly, it made me explore a lot of features of the Java language that I had never touched, and even forced me to relearn some math that I had completely forgotten about. I think I had the most fun working on the different weapons and zombie types, as it was fun refactoring the base classes until I had a solid template that I could use for (almost) any zombie, or similarly for the weapons, any weapon. I had fun manipulating the subclasses to play around with the way the game worked. Overall, making this game was a good experience, and I plan to work on another soon after I finish this one.

Download

Github Project Page: View

Java Web Start: View

Download JAR (README included): View

Screenshots: 1

Tile Engine

The Project

This is the barebones for an engine I was developing for my next game, which was going to be a procedurally generated rogue-like dungeon crawler. Basically, it's a lot like Dungeons of Dredmor. This engine has some very basic functionality, such as the ability to generate random maps, move around in them, pan the camera around, and zoom in and out. I will remove this project in favor of showing the final game when I finally get around to starting it.

How It Works

As this is just the barebones for a tile engine, there is not very much going on behind the scenes. The map generator uses a simple BSP partitioning algorithm, which basically just divides a room into randomly sized sections, then places sub-rooms in those sections, and connects them via "hallways". The player is then placed in the first room generated by this algorithm and allowed to move around via the WASD keys. You can also pan the camera with the arrow keys and zoom in and out with the mouse wheel. This was my first project using SFML.

The Problem

This was my first project using SFML, and my first time using C++ again after about two years of nothing but Java, so most of the trouble developing this lied solely in re-learning a little bit of syntax, and learning the basics of the SFML library. I did, however, have significant trouble understanding the BSP partitioning algorithm at first, mostly because the explanation on the page I found the tutorial for the algorithm on wasn't very detailed and I had to pretty much work out my own algorithm based on the idea behind it.

Download

Github Project Page: View

BSP Partition Tutorial: View

Screenshots: 1

Knight's Tour 2D

The Project

This is a continuation of my Knight's Tour project. The goal of this project was to create a graphical version of the game so the user no longer has to enter coordinates to move the Knight from place to place.

How It Works

Knight's Tour is a simple game and is based off of Chess. The idea is that, given a starting position, you need to visit all 64 spaces on the Chess board with the Knight without re-visiting any spaces. The Knight can only move 2 spaces vertically, and 1 space perpendicular to that second space away, like the shape of an L. Each space is color-coded and represents a specific state of that tile. If the tile is white, it's empty. If the tile is red, it has been visited. If the tile is yellow, it is the current location of the Knight. And if the tile is green, it is a valid position for the Knight to move to. If you manage to visit every space on the board, or if you lose, appropriate messages will be displayed.

The Problem

The problem I faced when converting the text-based version to a graphical version was figuring out how to keep track of the Knight's position on the board and how to move him when the user clicks a space. I had to use a MouseListener to keep track of the user's clicks, and when the user clicked, I would check each tile to see if it contained the coordinates of the mouse click. If so, and the tile clicked was a valid position to move to, the Knight's position is changed to the tile that was clicked, and the old tile's state is changed to 1 (Visited). I used Swing to create the graphical user interface.

Download

Github Project Page: View

Play this Online: Play

Particle Demo

The Project

This project began as a way of learning some more advanced graphical methods in Java. Though it was not used in version 1.0, I learned how to use Java's AffineTransform class, which will be a big help in future projects. AffineTransform lets you manipulate shapes on screen by doing things such as rotating, scaling, shearing, and transforming them. Particle Demo came to me when I came up with an idea for a spell system for an RPG I want to create some day, and I thought I could get a head start by designing the "spell effects" now. This has been one of my favorite projects so far, and I will definitely keep adding to it.

How It Works

ParticleDemo is very simple, because at the moment, it only has one particle effect you can create. This particle effect, called "spray", creates a "spray" of particles in whatever direction you hold down the left mouse button. So if you were click and drag in the upper-right quadrant of the screen, particles would "spray" out toward your mouse's position. The spray was achieved by first taking the mouse position, and then generating random X and Y offsets, which were added to the mouse position to get the particle's "target".

The Problem

This has been one of my favorite projects so far because I love working with graphics. I learned how to use a new data structure, and I learned how to use one of Java's 2D graphics classes, the AffineTransform class. AffineTransform allows the user to manipulate shapes by doing things such as rotating, scaling, shearing, and transforming the shape. This has a very wide array of uses, and will give me lots of material for future projects. The data structure is called "Vector2D", and represents a vector in 2D space. This data structure was used to calculate the X and Y values to use when updating the particles' positions on the screen so that the particle would move toward the target. It can also be used to get the distance between the particle's current position and the target.

Download

Github Project Page: View

Download JAR: Play

Linked List Header

The Project

I created this header file to make creation and modification of linked lists simpler. The class in the header file functions similarly to a vector, using many of the same function names, and allowing any data type or class object to be stored in it. It is a work in progress because many of the functions, such as the search function, are not very efficient for larger lists of numbers. Full documentation of the functions and their usage can be found on the project's Github page. The link to the Github project can be found under the "Download" heading below.

How It Works

I designed the class to accomodate any data type by using a template. Each node in the list can contain one piece of data and a link to the next node in the list. If the next node does not yet exist, the link is NULL. Currently, the class has functions for adding new nodes, removing nodes, destroying the list (which is called in the destructor), retrieving and modifying data in nodes, searching the list, sorting the list, and several other features. I plan to add support for overloaded operators in the next version, as well as a more efficient search feature.

The Problem

The problem I was trying to address with this project is that it is tedious to create linked lists manually, so I created a class that would make creation of a list as simple as calling a function. I also created this project to better familiarize myself with pointers. I am thinking of creating a second header file for a doubly linked list class.

Download

Github Project Page: View