HTML 0.40%CSS 0.20%TypeScript 97.08%JavaScript 1.69%Dockerfile 0.25%Shell 0.20%Python 0.17%gameteam-buildingprogramming
playfulbot's Introduction
PlayfulBot: Organize Programming Tournament
Warning
Playfulbot is currently in alpha stage and some features are not yet implemented. You can see a demo version at playfulbot.com.
What is PlayfulBot
It is a free and open source platform enabling the organization of programming tournaments.
Designed for team building
This platform is mainly designed for IT teams in need of a team building event. However it can be used by any group of developers enjoying a challenge (students, etc…).
Nowadays IT teams often have remote teammates. Remote work usually reduces the opportunities for casual chat and bonding. Team building events are a good way to overcome this issue but it is not always possible to do them in person:
travel time can be expensive for the company and tiring for teammates.
teammates have to take care of their family.
regular travels are not eco-friendly.
PlayfulBot complements in-person team building events with regular remote team building events. It specifically targets IT teams because its events require programming skills.
Programming Tournaments
PlayfulBot enables you to organize programming tournaments in a few clicks. Participants group into small teams and program bots which will compete against other teams in a game.
Tournaments have time constraints on purpose.
tournaments are short. They shouldn’t go beyond office hours or you will disadvantage teammates with families.
tournaments include multiple rounds with a first round starting early in the competition. This encourages an agile approach, i.e. releasing a new bot version for each round even if it is not perfect.
Bots can be programmed in many different programming languages. For now only JS/TS is supported but Java, C++, C# and others are planned.
Players can see how their bot plays direcly in their browser. Bots run on players' computers, which means that they can use all their preferred tools and even do step-by-step debugging.
Deploying PlayfulBot
Bots run on teammates computers. Thus the server is a simple Node.JS process. There are plans to make it scallable later.
PlayfulBot is currently deployed with Docker Compose. Note that it is a demonstration version. It enables you to program bots and let it play games but the full tournament experience is not there yet.
Open Source and extensible
This project is open source so that additional games and features can be added by the community later on. Note that some refactoring needs to be done before we can add games via plugins, but the general architecture already supports it.
Performance
The last benchmark showed that the server can handle approximately 150 games/second with a single server process. This is enough for a team building event of 40-60 teammates. Note that these performances depend on the game. The benchmark was made with a 2 player game where each player plays 50 turns and both players play simultaneously.
The landing page currently uses multiple icons from https://thenounproject.com. They are under Creative Common license, which means that authors' name should be mentioned somewhere. The easiest solution is to have a "credits" page.
Currently users can access tournaments they haven't been invited to. As they can't join or create a team it makes sense to forbid access completely with a coherent message.
Currently tournaments can have only one game. The goal is for Playfulbot to support multiple games. A tournament's game is chosen when the tournament is created.
Playfulbot will enable users to chose between different games. Each game has its own Game State and set of valid Game Actions. Players should be able to understand the structure of Game States and Game Actions.
JSON Schema is a good way to document these structures.
Players shouldn't have to wait for a round to know how if their improvements work against other teams' bots.
WHAT
Players will be able to test their bots against other teams' bots connected to the Competition Arena between rounds. They will simply start a game in the Debug Arena and ask a team's bot to play in it against their bot.
Sometimes bots will stop responding or take a long time to play. This is ok for debug games but not for competition games. Competition games should have a deadline. The main difficulty will be to decide if somebody won the game. The simplest solution is that each bot has a maximum time to play. The first bot to consume all its time to play loses.
Players need to understand how to program a bot. They should have clear and simple instructions for the programming language of their choice. The page should also describe how to connect bots to debug and competition arenas.
WHAT
As a first version this ticket will only target Typescript and Javascript programming languages.
Players will test their Bots in the Debug Arena with many games. They should see immediately which bot won the game.
WHAT
The debug arena view should show the game end state instead of the start state. Animations are less important and should be disabled for now.
Once the game is finished the winner and loser should be made explicit.