One of our team members, Josh, was stuck in an endless cycle of League of Legends due to it's highly competitive nature. He spent hours upon hours glued to his computer screen, smiling as his rankings went up. However, Josh realized that the hours he spent improving his rankings on this game were essentially useless as they had no tangible effect on his life outside of his computer screen. This got him into thinking-- what if there was a way to actually make these hours spent on a game actually mean something... and, thus, Sigma was born.
Sigma isn't your ordinary game: it's a fast-paced and highly-competitive mobile experience that uses technologies similar to those found in League of Legends and Dota -- all while being educational. Our goal is to take the individuals' inherent competitive and easily-addictive spirit and use it to make the world a smarter place.
What it does
Sigma is a multiplayer experience that matches players with those of similar levels in math battles. Players are to answer nine questions, with fifteen seconds for each math word problem, both correctly and before the opposing player. At the end of the match, we use the "elo" algorithm (see link) to rank the players. If one wins, they can expect their rating to go up, however, if one loses, they can expect their rating to go down (sometimes by a very significant factor). By doing this, not only do we create a very competitive atmosphere, but we also sharpen our users' math skills.
How we built it
For this project, we built our own stack to handle everything! On the back-end side, we used Python's Flask framework to build our REST API. In our API, we built all of the basic app functionalities like creating accounts, logging in, and generating authentication tokens. Then, we went one step further and did some pretty cool stuff like implement an elo rankings system that was able to rank users to other users based on their skillset; create a question generate engine that could create word distinct word problems to offer some creativity in the app; and, even handle multiplayer interaction. We hosted our REST API on Linode, and made GET/POST requests to it from our front-end.
On the front-end side, we implemented Facebook's React Native framework to develop both an Android and iOS app. We used generic components that would work on both the iOS and Android side to give both sets of users very similar experiences. In our app, we made calls to our REST API to implement the functionality.
Challenges we ran into
The biggest challenges we ran into was multiplayer functionality. Our original idea to implement this was opening a web socket between our server and the devices in the match, but with our server and front-end setup, it wasn't very possible to complete this efficiently. As a result, after much brainstorming, we saw that the best way to implement multiplayer was to use the API and make a series of POST and GET requests. Even after getting this idea, we had to account for challenges like race conditions, and network connectivity issues. We overcame many of these issues through trial and error.
Accomplishments that we are proud of
By the end of the hackathon, we are proud of building a full-stack application. Rather than taking the easy way out and using a third-party API to handle our application, we built our own API, and then we used a brand-new framework to build an app for the two biggest mobile platforms concurrently.
What we learned
In addition to learning more about frameworks like Flask and React Native, we also learned about system design. We saw the issues when more users try to use it and how to handle issues like concurrency and lag. As we were a team of four people, we also learned how to work better with a group of engineers.
What's next for Sigma
With this app, Sigma aims to go further than simply basic math questions. We see potential for it in different fields like vocabulary, science, and writing. We want to see Sigma as the app people love to play not only because of it's fun and competitive nature, but also because of it's educational impact.