Advisor: Sneha Narayan
Times: Fall-Winter 4,5c
During the year we spent physically isolating from one another, one of the ways I passed time while stuck at home was by playing multiplayer games with friends from afar, particularly ones from the developer Jackbox.
If you haven't played one of their games before, the setup usually involves one person running an application on a computer, and up to seven other people using a browser on a personal device (such as a smartphone) as an input device that allows them to connect to the game and submit their moves. For example, one of the games I play has every player submit humorous answers to silly questions like "What's the nickname that Van Gogh gave his remaining ear?" on their smartphones, which then get displayed on a shared screen so that everyone can see the answers and submit votes for their favorite ones. You can see what a few minutes of gameplay looks like here.
In this project, you will be designing and implementing a multiplayer game in this vein, where smartphones are used as input devices. There are a few reasons why I think this is a super interesting design space. Smartphones are becoming increasingly ubiquitous, and using them as input devices for gaming opens up the possibilities of who gets to experience multiplayer games and what forms they can take. Since more and more people have them readily available, games like this can be played spontaneously, and don't require access to specialized hardware like gaming consoles.
Using a smartphone as an input device for gaming also poses some interesting challenges for network games. If (for example) you're using a wifi connection to send information from your phone to a server, that's going to introduce some latency. There may be up to a second or two of delay before your moves get resolved and displayed back to you. That may be fine for many turn-based games, but not for real-time combat or platformers. This introduces constraints not just for the kind of game that you can implement, but also for how you create a smooth user experience that clearly communicates what's going on to people playing along.
There's also just a lot of interesting ways that you might approach building a system like this from a software design perspective, and part of this project will entail exploring this space of possibilities. Which processes would need to run client side, and which ones should be run on a server? How do you handle security in such systems, and ensure that players can't use their devices to inject code that helps them cheat? And how do you ensure a seamless user experience in games that have people looking at multiple screens? Thinking through and resolving questions like this will form the heart of this project.
In this project, you will design and implement a multiplayer game where players use browsers on their smartphones or tablets to provide input. Here are some basic criteria that the system should meet:
The project entails the following activities:
Background from CS 257 (Software Design) or equivalent experience is essential for this project. CS 344 (Human Computer Interaction) would also come in handy.