import React, { useState } from 'react'; import Grid from '@material-ui/core/Grid'; import { IMinigameProps } from "./IMinigameProps"; import { KeyHandler } from "./KeyHandler"; import { GameTimer } from "./GameTimer"; import { interpolate } from "./Difficulty"; interface Difficulty { [key: string]: number; timer: number; size: number; } const difficulties: { Trivial: Difficulty; Normal: Difficulty; Hard: Difficulty; Impossible: Difficulty; } = { Trivial: {timer: 12000, size: 6}, Normal: {timer: 9000, size: 8}, Hard: {timer: 5000, size: 9}, Impossible: {timer: 2500, size: 12}, } export function BribeGame(props: IMinigameProps): React.ReactElement { const difficulty: Difficulty = {timer: 0, size: 0}; interpolate(difficulties, props.difficulty, difficulty); const timer = difficulty.timer; const [choices] = useState(makeChoices(difficulty)); const [index, setIndex] = useState(0); function press(event: React.KeyboardEvent): void { event.preventDefault(); const k = event.keyCode; if(k === 32) { if(positive.includes(choices[index])) props.onSuccess(); else props.onFailure(); return; } let newIndex = index; if([38, 87, 68, 39].includes(k)) newIndex++; if([65, 37, 83, 40].includes(k)) newIndex--; while(newIndex < 0) newIndex += choices.length; while(newIndex > choices.length-1) newIndex -= choices.length; setIndex(newIndex); } return (

Say something nice about the guard.

{choices[index]}

) } function shuffleArray(array: string[]): void { for (let i = array.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); const temp = array[i]; array[i] = array[j]; array[j] = temp; } } function makeChoices(difficulty: Difficulty): string[] { const choices = []; choices.push(positive[Math.floor(Math.random()*positive.length)]); for(let i = 0; i < difficulty.size; i++) { const option = negative[Math.floor(Math.random()*negative.length)]; if(choices.includes(option)) { i--; continue; } choices.push(option); } shuffleArray(choices); return choices; } const positive = ["affectionate","agreeable","bright","charming","creative", "determined","energetic","friendly","funny","generous","polite","likable", "diplomatic","helpful","giving","kind","hardworking","patient","dynamic", "loyal"]; const negative = ["aggressive","aloof","arrogant","big-headed","boastful", "boring","bossy","careless","clingy","couch potato","cruel","cynical", "grumpy","hot air","know it all","obnoxious","pain in the neck","picky", "tactless","thoughtless"];