software I attempted not to break: everything
hardware I attempted not to break: everything
parts of me I accidentally broke: foot, sinuses, lungs ¯\_(ツ)_/¯
wanna skip to the good part? go to thieves.herokuapp.com to try out my game!
----quick disclaimer: who needs more than 2/3 of their lungs anyway----
Warning: This introduction was written three days before the final project was due. It was during one of my first times leaving my apartment in about a month and reflects how stressed and annoyed I was that I wasn't able to actually put time into this project. I think it's important to keep, though, because a lot of the decisions I made about this final project were made while I was either feeling very physically sick or while I was feeling okay but was still unable to stand up or walk without feeling like I was going to faint, and this introduction explains that.
It has been a slightly terrible semester. For some reason my chronic diseases (mostly lupus) decided that they really wanted to have some fun this semester, which led to
a) having a small bout of pneumonia early in the semester that was quickly fixed but still annoying
b) hobbling around in crutches and a boot after getting stress fractures from the amazingly arduous ten minute walk to the T from my apartment
c) flaring up a lot, especially my arthritis, making it really hard for me to walk/stand/move/solder EXTREMELY SMALL PIECES onto EXTREMELY SMALL PADS
d) being arguably the sickest I have been since high school - a really bad sinus infection coupled with some other random undefined infection led to me having solid 104 degree fevers for a week and being unable to move. One super dizzy and fever-ridden night later, me passing out and falling in front of my roommates at home led to me taking an ambulance to the hospital (my first ambulance ride since high school!), trying out three different antibiotics before one worked, and me being diagnosed with fairly extreme pneumonia and being told to essentially lie in bed until I could move without being dizzy.
apparently this means I have pneumonia
Basically this semester has kinda sucked, especially the last month. This semester has been nothing compared to when I was in elementary and middle school and would be in the hospital for a few months while getting chemo and blood transfusions, and thinking about that makes me want to actually do my final project even more. This final project ended up being very appropriate for this semester and I am honestly very peeved that I was not able to actually work on it more and make it resemble my original plans. The last week I had actually been able to do was week 12 - interfacing
, when I was super excited and had started working on my application so that I could get the software working and then focus on the actual hardware for the last month of class. I was getting super excited about Foxy, the game I was planning on making that had a physical board and an app that went along with it that would let anyone play the game with their friends. However, at the end of that week is when I started dying, and after about two weeks of being unable to stand up without feeling like I was going to fall over and being unable to look at my laptop without feeling sick, I realized that I had run out of time to do the project I wanted to do. I still really, really wanted to make a game that could be played by kids in hospitals, especially since I was in the middle of remembering how absolutely awful it feels to be unable to see your friends when you're sick and how much you just want something to do to distract you from laying in bed listening to your lungs crackle. After a while I was able to start sitting up in bed and working on my laptop, so I decided that I would first try to make a fairly intact app version of my game, and then try my best to make a physical component once I was able to move again. I also rethought my game so that it would be easier for me to make and the physical components would be more feasible to make in a shorter amount of time.
I'm technically still supposed to be resting and trying not to move too much since I'm still getting over the pneumonia and get dizzy if I stand up or walk for more than about ten minutes, but oh well. I'm up to 2/3 of my normal lung capacity now, which is good enough for me.
----revised game design----
First up: creating a new game. I really, really liked my previous game concept (last seen here
), but that would have taken me the entire final month to complete - something that was feasible when I was working on it during week 12, but less feasible ten days before the final project was due when I still couldn't really walk around, much less get to campus and work on a board game. So while I was laying in bed, I came up with a new game that was a) completely playable online, so that just in case I literally couldn't get any physical component working, at least I would still have made something, and b) had an easy enough concept and easy enough rules that I could create it and program it in the little time I had left.
So instead of the game I had planned during week 12, I decided to make a much simpler game called 100 Thieves, which is essentially a glorified competitive cookie clicker game. Essentially, some people will be thieves, and some people will be detectives. The thieves will be trying to steal enough diamonds to successfully run away and live on an island somewhere, and the detectives will be attempting to find enough clues to bust the thieves. If possible, I would still like to add in extra secret role type functionality (maybe no one knows who is a detective and who is a thief, and you can sabotage other players?) or some other rules (can you trade in diamonds to slow the detectives down? Put together some clues to stakeout the thieves' next planned heist?), but first off I will just try to get a simple competitive cookie clicker game working and then go from there.
----making my new app----
I decided to remake my original app from week 12 because I was already struggling with synchronization problems in that app and I hadn't even gotten to the actual hard part yet. So I'm going to use Meteor and React so that the synchronization hopefully won't be a problem. I'm not as familiar with Meteor and React, but hopefully it shouldn't be too bad to get spun up since I'm familiar with other similar frameworks.
I found an example tic-tac-toe app using Meteor and React
, so I'm going to go through the tutorial for that and then hopefully go from there. I think once I understand the basic file structure I should be able to make my own methods and interfaces and convert the super basic tic-tac-toe app into my game. There are some pretty substantial differences though - tic-tac-toe is played in turns with a very defined structure, player turn, and win condition, but my app is much more fluid and I want it to be able to be played with anywhere between 2 and 6 players. So this will probably end up being a decent amount of work, but I have to stay in bed for quite a while, so I have the time to spend on it. After going through the tutorial, it actually seems pretty simple to understand. There's definitely a lot of stuff to be done, but it should be fun.
Changing up the app to be my game is going fairly smoothly. Honestly the hardest part is just trying to test it. It keeps track of user accounts based on the machine, so in order to test it, I have to have multiple different programs and tabs open and try to play a game with myself in between all of those. I spun up a new heroku app so I can deploy it there. I decided first to just make an extremely simple version of it hardcoded to only be two people - one, a thief, can press a button and get some diamonds and win. Or the second player, the detective, can press a button, get some hints, and win. I got this working relatively easily since it's essentially just a tic-tac-toe game that terminates after one move. I was able to get it so the players can both move at the same time without taking turns, and the app just keeps track of win conditions and terminates the game after someone has won. I then started adding more functionality so that there can be more than 2 players and the number of diamonds/hints needed depends on the number of players. I decided just to cap it at 6 players for now, but you could feasibly have any number of players. I also put a decent amount of effort into making it look good - it's supposed to be a game that people want to play, and people like playing well-designed games.
code slowly coming together
and homepage is starting to look good!
Another huge part of this project was making sure that it worked on any device (or at least as many devices as I could feasibly test). Of course I wanted it to work with normal desktop browsers, but I also wanted to make sure that people could play it on their phones. Really the main interesting thing about this game that sets it apart from other games is the ability to play wherever you use using whatever technology you have, so it needs to work and look good on any desktop or mobile device. This wasn't super hard to do, but just required changing up some of the styles so that the content of the game would be readable and clickable from any device.
At this point, it's three days before the final project is due. I've been holding out hope that I would feel okay enough to go in and work in lab and try to get some physical components done, but it looks like that's not going to happen. I can probably make it to lab and sit there and work for a while, but honestly I'm not sure how much I'll be able to walk around/concentrate. Stuffing especially might be super hard for me. Also not sure how long I should stay in the EDS back room with all of the soldering going on - I'm trying to let my lungs chill for a while, and unclear if lab is the best place for me to be right now. Current plan is to go in tomorrow though and see how I feel and what I can get done.
----in lab yay----
I managed to make it to lab today and stay there for a while. Honestly once I got there it seemed to be a lot of effort to leave and go home again, so I kind of just stayed in lab most of the day. It was admittedly pretty hard to actually work in lab though - I kept getting dizzy and having problems concentrating on things, which made me a little nervous to use things that can catch on fire/cause burns/otherwise break or cause harm. So I tried to take it slow and take a lot of breaks in between so that I never got too dizzy. I also had a really hard time staying in the back room of eds to mill or solder. Partially I just felt bad coughing constantly in such a small space, but also I could easily smell the soldering fumes, and was a little apprehensive to live in there for too long. I did end up being able to make a very rough draft of my boards though! Since I only have a rough draft, I'll explain what the plan would have been if I had had time.
Basically, for this iteration of my game (not the bunny/fox one, which would have had an actual game board), I was going to make controllers so that people could play
> with 6 computers/phones/devices (one person per device, each with their own app interface)
> with one computer/phone/device and 6 controllers (one person per controller with one main app interface)
> any combination of x devices and y controllers where x+y > 6 (so several people using controllers connected to a laptop and then others just on devices)
The main point of this is, again, for my main use case I'm designing for - I can imagine a group of friends playing in one location using controllers, and then another friend who is currently in the hospital being able to play on her laptop/phone. And since the app is on a web server, they could all join the same game and play together, even though they are not in the same location or using the same technology to play.
So my plan was to make six controllers that could connect to a laptop/phone (up to 6 controllers per device) and package them up in a game box that goes along with my app. The controllers were going to be pretty simple - depending on how much time I had and how much of my game I was able to implement, the controllers would have had
> at least a button for the clicking
> another button for slowing down functionality (expending clues/diamonds to somehow sabotage the opposite team)
> possibly an interface that allows you to move through the app - the app is fairly simple, so could have possibly made a simple NEXT button and arrow keys to cycle through games/on-screen buttons
Since I'm still not doing great though, I'm going to settle for making very simple controllers that are just buttons. Basically I'm going to take my design from the echo hello world week and attempt to make controllers out of that.
I ended up being able to (very slowly) make two example controllers. My plan had been to make nice looking controllers that were themed to the game - so given my limit of 6 people per game, I was going to make three diamond controller and three magnifying glass controllers. Because of the time and not wanting to take up the mill for the last two days just making the same design over and over again, I made one of each just so that I could have something that shows what my plan was. I was only able to stuff the diamond board because it was taking me a very long time to walk around and find the parts (I had to keep taking a break while I was searching through the parts) and then having to concentrate on the pieces to stuff it was beginning to make me really dizzy. I did use the reflow oven to stuff it which helped a lot. As it was I was actually struggling to get the pieces in the right place just placing them onto the soldering paste with tweezers, so having to actually solder them would have been really difficult. But I was able to stuff the diamond controller and make the magnifying glass controller, which I'm honestly sadly proud of myself for being able to sit up and concentrate long enough to do.
plans for basic diamond controller
plans for basic magnifying glass controller (or lollipop apparently)
I wasn't able to program my diamond controller - I tried, but kept getting errors when I tried to program it using the basic code from week 6. I didn't have much time to troubleshoot it but I'm sure that I just soldered something on wrong/had something facing the wrong way/otherwise did something very stupid and easy to fix. At least I was expecting not having a functioning physical component so my game is still playable without it, and honestly I am surprised that I was able to stuff one of the controllers at all. I also had been planning on making a box for the physical components of my game. It's a little ridiculous now since it only has the two controllers and an instruction sheet, but at least it shows what my plan would have been.
the whole package!
And now for the part that actually works! If you want to check out my game, head to thieves.herokuapp.com
. I'm really proud of this site, especially given the time constraints and circumstances that I had to deal with while making it. I wish that the physical component had turned out better and that I had time to actually make the project I had wanted to make, but at least I got to implement a basic version of it and think about what I'll do in the future to make it actually work and be fun to play!
This final project was simultaneously really awful and really great. I was so excited to work on it, and I'm pretty sad that I had to change my original app idea (that I was pretty excited for) and make a much more simplified and easy version. But, at least I got something to work! I think my app is very acceptable - it's not great by any means and has super basic functionality, but it's coded fairly well so it should be easy to add more features in the future. Overall, the work that I wish I could have done and am going to try to do later consists of:
> first and foremost getting a controller to work period
> getting multiple controllers to communicate with a single laptop (I started looking into using wifi for this but wasn't able to get very far)
> adding more features to the game itself so it's not just clicking a single button (I have plenty of ideas - sabotaging other team by spending diamonds/clues, not know the roles of people and being able to kick one person out of the group so it's more of a secret role game, making it so any number of people can play, etc)
That's about as far as I got in terms of thinking about the future. We'll see where my game goes from here. :)