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 { random } from "../utils"; import { interpolate } from "./Difficulty"; import { BlinkingCursor } from "./BlinkingCursor"; interface Difficulty { [key: string]: number; timer: number; min: number; max: number; } const difficulties: { Trivial: Difficulty; Normal: Difficulty; Hard: Difficulty; Impossible: Difficulty; } = { Trivial: {timer:8000, min: 2, max: 3}, Normal: {timer:6000, min: 4, max: 5}, Hard: {timer:4000, min: 4, max: 6}, Impossible: {timer: 2500, min: 7, max: 7}, } function generateLeftSide(difficulty: Difficulty): string { let str = ""; const length = random(difficulty.min, difficulty.max); for(let i = 0; i < length; i++) { str += ["[", '<', '(', '{'][Math.floor(Math.random()*4)]; } return str; } function getChar(event: React.KeyboardEvent): string { if(event.keyCode == 48 && event.shiftKey) return ")"; if(event.keyCode == 221 && !event.shiftKey) return "]"; if(event.keyCode == 221 && event.shiftKey) return "}"; if(event.keyCode == 190 && event.shiftKey) return ">"; return ""; } function match(left: string, right: string): boolean { return (left === '[' && right === ']') || (left === '<' && right === '>') || (left === '(' && right === ')') || (left === '{' && right === '}'); } export function BracketGame(props: IMinigameProps): React.ReactElement { const difficulty: Difficulty = {timer:0, min: 0, max: 0}; interpolate(difficulties, props.difficulty, difficulty); const timer = difficulty.timer; const [right, setRight] = useState(""); const [left] = useState(generateLeftSide(difficulty)); function press(event: React.KeyboardEvent): void { event.preventDefault(); const char = getChar(event); if(!char) return; if(!match(left[left.length-right.length-1], char)) { props.onFailure(); return; } if(left.length === right.length+1) { props.onSuccess(); return; } setRight(right+char); } return (

Close the brackets

{`${left}${right}`}

) }