const LetsPlay = React.memo(props => {
- const quorum = Math.round((props.num_players + 1) / 2);
+ const quorum = Math.max(0, props.num_players - props.prompts.length);
const max_votes = props.prompts.reduce(
(max_so_far, v) => Math.max(max_so_far, v.votes.length), 0);
- if (max_votes < quorum)
- return null;
+ if (max_votes < quorum) {
+ let text = `Before we play, we should collect a bit
+ more information about what category would
+ be interesting for this group. So, either
+ type a new category option above, or else`;
+ if (props.prompts.length) {
+ if (props.prompts.length > 1)
+ text += " vote on some of the categories below.";
+ else
+ text += " vote on the category below.";
+ } else {
+ text += " wait for others to submit, and then vote on them below.";
+ }
+
+ return (
+ <div className="before-we-play">
+ <p>
+ {text}
+ </p>
+ </div>
+ );
+ }
- const candidates = props.prompts.filter(p => p.votes.length >= quorum);
+ const candidates = props.prompts.filter(p => p.votes.length >= max_votes);
const index = Math.floor(Math.random() * candidates.length);
const winner = candidates[index];
<div className="ambiguities">
<h2>Judging Answers</h2>
<p>
- Click on each pair of answers that should be scored as equivalent,
- (and click any word twice to split it out from a group). Remember,
+ Click/tap on each pair of answers that should be scored as equivalent,
+ (or click a word twice to split it out from a group). Remember,
what goes around comes around, so it's best to be generous when
judging.
</p>
+ <p>
+ Also, for an especially fun or witty answer, you can give kudos
+ by clicking the star on the right. You may only do this for one
+ word/group.
+ </p>
<h2>{this.props.prompt.prompt}</h2>
{this.state.word_sets.map(set => {
return (
}
onClick={(event) => {
event.stopPropagation();
- this.setState({
- starred: set
- });
+ if (this.state.starred === set) {
+ this.setState({
+ starred: null
+ });
+ } else {
+ this.setState({
+ starred: set
+ });
+ }
}}
>
{this.state.starred === set ?
render() {
const state = this.state;
- const players_total = 1 + state.other_players.length;
if (state.scores) {
+ const players_total = state.players_answered.size;
+
let perfect_score = 0;
for (let i = 0;
i < state.active_prompt.items &&
if (score.score === state.active_prompt.items) {
quirkster = <span className="achievement">Quirkster!</span>;
}
+ let kudos_slam = null;
+ if (score.kudos > 0 && score.kudos >= players_total - 1) {
+ kudos_slam = <span className="achievement">Kudos Slam!</span>;
+ }
return (
<li key={score.players[0]}>
{score.players.join("/")}: {score.score}
{score.kudos ? `, ${'★'.repeat(score.kudos)}` : ""}
- {perfect} {quirkster}
+ {' '}{perfect} {quirkster} {kudos_slam}
</li>
);
})}
<h2>Words submitted</h2>
<ul>
{state.scores.words.map(word => {
+ let great_minds = null;
+ if (word.kudos.length && word.players.length > 1) {
+ great_minds = <span className="achievement">Great Minds!</span>;
+ }
+ let kudos_slam = null;
+ if (word.kudos.length > 0 && word.kudos.length >= players_total - 1) {
+ kudos_slam = <span className="achievement">Kudos Slam!</span>;
+ }
return (
<li key={word.word}>
{word.word} ({word.players.length}
{word.kudos.length ? `, ${'★'.repeat(word.kudos.length)}` : ""}
): {word.players.join(', ')}
+ {' '}{great_minds}{kudos_slam}
</li>
);
})}