Skip to content

Commit

Permalink
close #52
Browse files Browse the repository at this point in the history
  • Loading branch information
geoffrey-wu committed Aug 12, 2022
1 parent aba5893 commit 485eaaa
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 38 deletions.
11 changes: 6 additions & 5 deletions Room.js
Original file line number Diff line number Diff line change
Expand Up @@ -279,23 +279,24 @@ class Room {
this.buzzedIn = false;
let endOfQuestion = (this.wordIndex === this.tossup.question.split(' ').length);
let inPower = this.tossup.question.includes('(*)') && !this.tossup.question.split(' ').slice(0, this.wordIndex).join(' ').includes('(*)');
let points = quizbowl.scoreTossup(this.tossup.answer, givenAnswer, inPower, endOfQuestion);
let [directive, points] = quizbowl.scoreTossup(this.tossup.answer, givenAnswer, inPower, endOfQuestion);

if (points > 0) {
if (directive === 'accept') {
this.revealQuestion();
this.questionProgress = 2;
this.players[userId].updateStats(points, celerity);
Object.values(this.players).forEach(player => { player.tuh++; });
} else {
} else if (directive === 'reject') {
this.updateQuestion();
this.players[userId].updateStats(points, celerity);
}

this.players[userId].updateStats(points, celerity);

this.sendSocketMessage({
type: 'give-answer',
userId: userId,
username: this.players[userId].username,
givenAnswer: givenAnswer,
directive: directive,
score: points,
celerity: this.players[userId].celerity.correct.average
});
Expand Down
70 changes: 40 additions & 30 deletions client/multiplayer/room.js
Original file line number Diff line number Diff line change
Expand Up @@ -181,43 +181,53 @@ const socketOnConnectionAcknowledged = (message) => {
}

const socketOnGiveAnswer = (message) => {
let { userId, username, givenAnswer, score, celerity } = message;
logEvent(username, `${score > 0 ? '' : 'in'}correctly answered with "${givenAnswer}" for ${score} points`);

document.getElementById('next').disabled = false;
let { userId, username, givenAnswer, directive, score, celerity } = message;
if (directive === 'prompt') {
logEvent(username, `answered with "${givenAnswer}" and was prompted`);
} else {
logEvent(username, `${score > 0 ? '' : 'in'}correctly answered with "${givenAnswer}" for ${score} points`);
}

// Update question text and show answer:
if (score > 0) {
document.getElementById('next').innerHTML = 'Next';
document.getElementById('buzz').disabled = true;
if (directive === 'prompt' && userId === USER_ID) {
document.getElementById('answer-input-group').classList.remove('d-none');
document.getElementById('answer-input').focus();
document.getElementById('answer-input').placeholder = 'Prompt';
} else {
if (document.getElementById('toggle-multiple-buzzes').checked || userId !== USER_ID) {
document.getElementById('buzz').disabled = false;
} else {
document.getElementById('answer-input').placeholder = 'Enter answer';
document.getElementById('next').disabled = false;

// Update question text and show answer:
if (directive === 'accept') {
document.getElementById('next').innerHTML = 'Next';
document.getElementById('buzz').disabled = true;
Array.from(document.getElementsByClassName('tuh')).forEach(element => {
element.innerHTML = parseInt(element.innerHTML) + 1;
});
}
document.getElementById('pause').disabled = false;
}

if (score > 0) {
Array.from(document.getElementsByClassName('tuh')).forEach(element => {
element.innerHTML = parseInt(element.innerHTML) + 1;
});
}
if (directive === 'reject') {
if (document.getElementById('toggle-multiple-buzzes').checked || userId !== USER_ID) {
document.getElementById('buzz').disabled = false;
} else {
document.getElementById('buzz').disabled = true;
}
document.getElementById('pause').disabled = false;
}

if (score > 10) {
document.getElementById('powers-' + userId).innerHTML = parseInt(document.getElementById('powers-' + userId).innerHTML) + 1;
} else if (score === 10) {
document.getElementById('tens-' + userId).innerHTML = parseInt(document.getElementById('tens-' + userId).innerHTML) + 1;
} else if (score < 0) {
document.getElementById('negs-' + userId).innerHTML = parseInt(document.getElementById('negs-' + userId).innerHTML) + 1;
}
if (score > 10) {
document.getElementById('powers-' + userId).innerHTML = parseInt(document.getElementById('powers-' + userId).innerHTML) + 1;
} else if (score === 10) {
document.getElementById('tens-' + userId).innerHTML = parseInt(document.getElementById('tens-' + userId).innerHTML) + 1;
} else if (score < 0) {
document.getElementById('negs-' + userId).innerHTML = parseInt(document.getElementById('negs-' + userId).innerHTML) + 1;
}

document.getElementById('points-' + userId).innerHTML = parseInt(document.getElementById('points-' + userId).innerHTML) + score;
document.getElementById('celerity-' + userId).innerHTML = Math.round(1000 * celerity) / 1000;
document.getElementById('accordion-button-points-' + userId).innerHTML = parseInt(document.getElementById('accordion-button-points-' + userId).innerHTML) + score;
document.getElementById('points-' + userId).innerHTML = parseInt(document.getElementById('points-' + userId).innerHTML) + score;
document.getElementById('celerity-' + userId).innerHTML = Math.round(1000 * celerity) / 1000;
document.getElementById('accordion-button-points-' + userId).innerHTML = parseInt(document.getElementById('accordion-button-points-' + userId).innerHTML) + score;

sortPlayerAccordion();
sortPlayerAccordion();
}
}

const socketOnJoin = (message) => {
Expand Down Expand Up @@ -510,7 +520,7 @@ document.getElementById('clear-stats').addEventListener('click', function () {


document.getElementById('difficulties').addEventListener('change', function () {
socket.send(JSON.stringify({
socket.send(JSON.stringify({
type: 'difficulties',
value: rangeToArray(this.value)
}));
Expand Down
7 changes: 4 additions & 3 deletions quizbowl.js
Original file line number Diff line number Diff line change
Expand Up @@ -81,12 +81,13 @@ function stringMatchesReference(string, reference) {
* @param {String} givenAnswer
* @param {Boolean} inPower
* @param {Boolean} endOfQuestion
* @returns {['accept' | 'prompt' | 'reject', Number]} - [directive, points]
*/
function scoreTossup(answerline, givenAnswer, inPower, endOfQuestion) {
const isFormattedAnswerline = answerline.includes('<u>');
let isCorrect = (checkAnswer(answerline, givenAnswer, isFormattedAnswerline) !== 'reject');

return isCorrect ? (inPower ? 15 : 10) : (endOfQuestion ? 0 : -5);
let directive = checkAnswer(answerline, givenAnswer, isFormattedAnswerline);
let isCorrect = (directive === 'accept');
return [directive, isCorrect ? (inPower ? 15 : 10) : (endOfQuestion ? 0 : -5)];
}


Expand Down

0 comments on commit 485eaaa

Please sign in to comment.