buttonmen-dev / buttonmen

Buttonmen - an online dice game
Other
16 stars 24 forks source link

Implement multi-game tournaments #462

Open irilyth opened 10 years ago

irilyth commented 10 years ago

It'd be nice to allow players to create and play in multi-game tournaments, in a variety of formats.

irilyth commented 10 years ago

We may want separate tickets for different formats, but let's just use this one to talk about the general idea for now maybe?

Some formats:

Playoff tournament: Like what the old site had, an N-player bracket in which winning players in each game advance to the next round, and losing players are eliminated.

Double-elimination playoff tournament: As above, but players who lose advance to a loser's bracket; in that bracket, winners advance and losers are eliminated, until eventually the winner of the winner's bracket plays the winner of the loser's bracket (and, if the winner's winner loses the first game, they play again). Conceptually, the idea is that you're eliminated only after you lose two games.

Round-robin tournament: An N-player pool in which each player plays a game against all of the others. At the end, final standings are generated, and the player with the best record is the winner. (Break ties by head-to-head record among the tied players, then by games won in head-to-head games.)

The old site had the first two, and I was running by hand the third kind, with twenty plus players in four six-player pools, so there was at least some interest in that. (grin)

Options that it'd be nice to be able to set on a per-tournament basis at creation time, for any type:

Invitatation only, or open?

Other players' identities known, or secret? (The old site tried to do this, but I recall not really getting what it was supposed to accomplish. If no one else has a compelling use case for this, I don't think we need it.)

Can players make games private? (see #463) In particular, in story tournaments, the organizer always had to say "make sure to change your settings to make chat viewable!" and people often forgot; it'd be nice if the organizer could check a box that would make the games public and disable "make this game private".

yawetag commented 10 years ago

Obviously, the organizer should be able to select which buttons are legal. The organizer should also be able to select how players are ranked for the start of the tournament (join order, overall record, random).

There's also a Swiss-style tournament. After each round, players are ranked by their win-loss record for the tournament, then paired with someone with the same record; if there's an odd number of people with the same record, you may play someone with the next higher or lower record. Also, you never play the same person twice.

Andrew Senger asenger@gmail.com

On Fri, Jan 24, 2014 at 12:37 PM, irilyth notifications@github.com wrote:

We may want separate tickets for different formats, but let's just use this one to talk about the general idea for now maybe?

Some formats:

Playoff tournament: Like what the old site had, an N-player bracket in which winning players in each game advance to the next round, and losing players are eliminated.

Double-elimination playoff tournament: As above, but players who lose advance to a loser's bracket; in that bracket, winners advance and losers are eliminated, until eventually the winner of the winner's bracket plays the winner of the loser's bracket (and, if the winner's winner loses the first game, they play again). Conceptually, the idea is that you're eliminated only after you lose two games.

Round-robin tournament: An N-player pool in which each player plays a game against all of the others. At the end, final standings are generated, and the player with the best record is the winner. (Break ties by head-to-head record among the tied players, then by games won in head-to-head games.)

The old site had the first two, and I was running by hand the third kind, with twenty plus players in four six-player pools, so there was at least some interest in that. (grin)

Options that it'd be nice to be able to set on a per-tournament basis at creation time, for any type:

Invitatation only, or open?

Other players' identities known, or secret? (The old site tried to do this, but I recall not really getting what it was supposed to accomplish. If no one else has a compelling use case for this, I don't think we need it.)

Can players make games private? (see #463https://github.com/buttonmen-dev/buttonmen/issues/463) In particular, in story tournaments, the organizer always had to say "make sure to change your settings to make chat viewable!" and people often forgot; it'd be nice if the organizer could check a box that would make the games public and disable "make this game private".

— Reply to this email directly or view it on GitHubhttps://github.com/buttonmen-dev/buttonmen/issues/462#issuecomment-33248772 .

cgolubi1 commented 10 years ago

Something i wished we had on the old site was the ability to fully specify players and buttons in a tournament, as in "yawetag will play Avis, irilyth will play Hammer, glassonion will play Stark", etc, and then those people could of course accept or decline their seats. This is somewhat covered by irilyth's "invitation only" suggestion. I forget exactly what i was doing that wanted this... something involving people playing buttons that had a mathematically interesting relationship to their own win/loss ratio as players or something.

Anyway, all this stuff would come after the basic functionality, but i might as well record the idea.

cgolubi1 commented 10 years ago

An implementation suggestion which may or may not be feasible, but IMO could be pretty useful if so: can we implement the base tournament class as a somewhat generic engine for creating new games as a function of a set of existing games being completed, where the base implementation wouldn't need to have any particular assumptions about how many games existed at each level or what players or buttons were in them?

I'm suggesting that because i think the generic "structure of related time-dependent games" logic could turn into standard single- or double- elimination tournaments, but could also be used for a number of other useful features. The one i was thinking of today is that we could implement a mentor track as a type of tournament, in which the same two players played N games one at a time, and the engine selected different buttons for each according to a formula (e.g. first game random Soldiers, second game random Soldiers, third game random TL button with speed, fourth game random TL button with focus, etc). We wouldn't even need a dedicated UI for a mentor-track-as-tournament, since it would just look like a series of games.

danlangford commented 9 years ago

Would the team consider allowing another existing, well tested well vetted engine to actually manage the brackets? Challonge.com is free to use with a free api just for allowing game integrations that you speak of. They support single elim, double elim, round robin, Swiss and multi stage tournaments. I have implemented their API and it works very well. Another site I am using is called Toornament.com as a power user over there (I run lots of events) I have been given access to their API which is in the private testing phase. They support more formats like League play and even 3 stage tournaments. I feel that at the end of the day their service will be better than Challonge. Tournament is also free and API access will be free. Challonge requires no attribution while Toornament only requires a visual "powered by Toornament" attribution. There are many tournament bracket engines out there. These two are the best ones I have found. Most mess up the Swiss format or the tiebreakers and no other sites worth any thing have an API.

I have watched many of these sites start to grow up and grow out and falter on things like correctly implementing Swiss. I would really encourage you guys to leverage the hard work and success of others and not spread your dev team thin trying to learn in intricacies of tiebreaking when somebody else will give you the functionality for free. Both APIs are poised to allow a deep integration such that people may not even know the engine is at another site (besides the Toornament visual attribution)

However if you do decide to implement these your self and you get stuck on Swiss details or tiebreaking theories I have come to understand these well enough to consult with the team a bit . Good luck

Also we can get you access to the Toornamnet API if it's not openly available by the time you want to pursue this

blackshadowshade commented 9 years ago

I'm not at all averse to leveraging someone else's work. There will obviously need to be some integration work done, but in principle, I'm all for it.

There are other related issues that will need to be addressed simultaneously, like allowing games to be created automatically by a user that is not a player, and flagging games visually as tournament games.

irilyth commented 9 years ago

Yeah, my two cents is that, like many complicated-but-cool-sounding things, if you can mock it up and show that it's doable and actually cool, that's great, and if it requires a lot of up-front investment before it's obvious whether it's doable and/or actually cool, that's more risky.

irilyth commented 8 years ago

Another tournament style that we should definitely implement: Two stage group + elimination, where the players are first divided into groups, play a round-robin of games in the group, and then the top N winners from each group move on to an elimination bracket. This lets you have elimination-style tournaments that start with an arbitrary number of players, and then whittle down to a power-of-two number of players in the group stage, if for whatever reason you want to start a 13-person tournament or whatever. (One where each player plays one of the buttons in a set, for example.)

irilyth commented 4 years ago

Things that the old site had, which I don't think are blockers for merging #2131, but IMHO should be high priorities for what next:

One feature that the old site didn't have, but which I'd really love to see, is a way to indicate that the random buttons should be distributed evenly -- this would be super useful in adoption tournaments, especially if it avoided games where both buttons were the same, in the first round (or that could be an optional setting I suppose).

blackshadowshade commented 4 years ago

Things that the old site had, which I don't think are blockers for merging #2131, but IMHO should be high priorities for what next:

  • Allowing 32 players.

I can add 32 players now, that's trivial.

  • Double-elimination tournaments.

Once we're happy with single elimination tournaments, this will be pretty easy.

  • Restrictions on which buttons are available.

This is a bigger project, but yes, it's on the radar.

  • A setting indicating that players will get a random button.

I think this needs to be part of the button restriction project, since ideally, we'd want to have random selection within a restricted set of buttons.

One feature that the old site didn't have, but which I'd really love to see, is a way to indicate that the random buttons should be distributed evenly -- this would be super useful in adoption tournaments, especially if it avoided games where both buttons were the same, in the first round (or that could be an optional setting I suppose).

I think we could actually do this by implementing a specific type of tournament---something like BMTournamentSingleEliminationRandomEvenDistribution, subclassed from BMTournamentSingleElimination, where I specify the button selection rules as part of the tournament definition.