When we were in high school, our friend group went to a boba shop every Friday and played card games for hours. Reunited at PennApps XX and reminiscent of the fun times, we wanted to create a way for friends to remotely play custom card games online.
What it does
Card Game Client is a web app that allows users to create custom card games by specifying attributes such as which cards from a standard 54-card deck to include, and the number of players allowed in a room. Once a user creates a game room, other users may join using a unique code provided to the game creator.
Within the room, players may draw from the deck of play cards from their hand to the discard pile; the deck may be shuffled or dealt out; and a chat feature allows players in the room to send messages and images to one another without interfering with gameplay.
How we built it
- Flask web server hosted on Google Cloud Platform: hosts the web app and manages game room states
- Socket.IO: facilitates communication between server and clients using websockets
- Chat feature created using Firebase Cloud Messaging: stores messages and sends notifications to clients
- Game room rendered with HTML5 Canvas: redraws the screen in real-time to keep players up-to-second with the actions and interactions occurring in the room
- Material Design Lite: front-end framework used to style the web app
Challenges we ran into
Integration of multiple distinct frameworks and technologies implemented by different team members.
Accomplishments that we're proud of
- Amidst our hacking, we went to the Bloomberg lounge and won one their puzzle challenges!
- One of our teammates placed 5 out of ~32 competitors in the Smash Ultimate tournament!
What we learned
Most of the technologies employed in this project were unchartered waters for us before this hackathon; thus, we learned a lot from every part of the project.
What's next for Card Game Client
We aim to write an API that allows users to create games with firmer rule sets, such that it would no longer be the responsibility of the players to determine if a move was legal. Furthermore, this would enable players to create more complicated custom decks, define turn orders, and establish win conditions, among many other functionalities.