A simple and flexible Go library for creating and managing single-elimination tournament brackets. This project also includes a fully interactive command-line application to run a tournament from start to finish.
This project provides two main components:
-
A Go Library: A set of data models and functions that you can import into your own Go applications to handle tournament logic programmatically. It correctly calculates rounds, match-ups, and byes for any number of participants.
-
An Interactive CLI: A runnable application (main.go) that uses the library to provide a step-by-step command-line interface.
-
You can enter participant names, and the app will generate a bracket and then prompt you for the winner of each match until a champion is crowned.
- Single-Elimination Brackets: Generates a standard single-elimination tournament structure.
- Automatic Bye Handling: Automatically calculates and assigns byes for a number of participants that is not a power of two.
- Interactive CLI: Comes with a ready-to-run terminal application to manage a tournament in real-time.
- ASCII Bracket Display: Prints the current state of the tournament bracket to the console, so you can easily track matchups and winners.
- Simple and Extensible: Built with clear and straightforward data models, making it easy to extend with new features.
To use this package in your own Go project, you can install it with go get:
go get github.com/fezcode/go-tournament-brackets
Then, you can import and use it in your code:
package main
import (
"fmt"
"github.com/fezcode/go-tournament-brackets"
)
func main() {
participants := []string{"Team Alpha", "Team Bravo", "Team Charlie", "Team Delta", "Team Echo"}
// Create a new tournament
tourney, err := tournament.NewTournament("My Cup", tournament.SingleElimination, participants, nil)
if err != nil {
panic(err)
}
// Print the initial bracket state
tourney.PrintAscii()
// From here, you can programmatically set winners and advance them
// For example, to set Team Alpha (ID: 1) as the winner of their first match:
// tourney.SetWinner(roundIndex, matchIndex, 1)
}