Our team of video game enthusiasts embarked on a journey to create an interactive game. Amidst brainstorming and polls, we settled on Avalon—a fun multiplayer party game that struck the right balance between complexity and feasibility within our timeline.
- Elixir 1.14.4
- Erlang 25
- Postgres 15.2 (with username as
postgres
and password aspostgres
) - Phoenix Framework 1.7.2
- Clone the repo. (Link in the bibliography below)
- Run
mix setup
to install dependencies. - Launch the server with
mix phoenix.server
oriex -S mix phoenix.server
. - Access the app via
localhost:4000
.
- HTML: Outlines the structure of pages.
- CSS: Specifies visual aspects of components, organized by the affected page.
- JavaScript: Connects client-side to server-side, configures connections, and initializes hooks and progress bars. Also used for TailWind CSS setup and importing "topbar" library.
- Liveview: Enables real-time updates without page refresh, handles game state updates, and bridges the game state and client updates.
- Elixir: Manages game logic and provides a multi-game capable server for real-time gameplay.
- Game starts with 5 players.
- Players are divided as: 3 for the resistance and 2 as spies.
- Only spies know each other's identities.
- A leader is chosen randomly to begin the game.
- Each round has a Team Building Phase and a Mission Phase.
- Team Building involves discussions and the leader picking a mission team.
- Missions teams vary in size by round: 2, 3, 2, 3, 3.
- Players vote on the selected team. Approval sends them to the mission.
- On missions, spies may sabotage. One sabotage fails the mission.
- The game ends when one side wins three rounds.
From idea inception to detailed wireframes in Figma, our process was systematic. We divided our team into frontend and backend, used Trello for organization, and split our GitHub repo accordingly. Adopting new technologies like LiveView and Phoenix's PubSub, our class's combined knowledge from 3 months aided this project. Despite the time constraints of two weeks, we ensured an inclusive development process for everyone.