diff --git a/.gitignore b/.gitignore index 39818d197..66c08ecfb 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,5 @@ dist npm-debug.log* yarn-debug.log* yarn-error.log* + +.vscode diff --git a/src/components/Banner/Banner.js b/src/components/Banner/Banner.js new file mode 100644 index 000000000..24f771a3b --- /dev/null +++ b/src/components/Banner/Banner.js @@ -0,0 +1,28 @@ +import React from "react"; + +function Banner({ type, answer = "", guesses = 6 }) { + if (type === "happy") { + return ( +
+

+ Congratulations! Got it in + + {guesses} {guesses === 1 ? "guess" : "guesses"} + + . +

+
+ ); + } else if (type === "sad") { + return ( +
+

+ Sorry, the correct answer is {answer}. +

+
+ ); + } + return; +} + +export default Banner; diff --git a/src/components/Banner/index.js b/src/components/Banner/index.js new file mode 100644 index 000000000..1a3d55b83 --- /dev/null +++ b/src/components/Banner/index.js @@ -0,0 +1,2 @@ +export * from './Banner'; +export { default } from './Banner'; diff --git a/src/components/Game/Game.js b/src/components/Game/Game.js index fc7615d24..ae2f6eddc 100644 --- a/src/components/Game/Game.js +++ b/src/components/Game/Game.js @@ -1,15 +1,42 @@ -import React from 'react'; +import React, { useState } from "react"; -import { sample } from '../../utils'; -import { WORDS } from '../../data'; - -// Pick a random word on every pageload. -const answer = sample(WORDS); -// To make debugging easier, we'll log the solution in the console. -console.info({ answer }); +import { sample } from "../../utils"; +import { WORDS } from "../../data"; +import Input from "../Input/Input"; +import Guesses from "../Guesses/Guesses"; +import { checkGuess } from "../../game-helpers"; +import Banner from "../Banner/Banner"; function Game() { - return <>Put a game here!; + const [answer, setAnswer] = useState(() => sample(WORDS)); + const [guesses, setGuesses] = useState([]); + + const gameIsWon = + guesses.filter((guess) => guess === answer).length > 0 ? true : false; + + const nonEmptyGuesses = guesses.filter((guess) => guess.length === 5); + + const gameLost = nonEmptyGuesses.length === 6 && gameIsWon === false; + + return ( + <> + {(gameLost || gameIsWon) && ( + + )} + + setGuesses([...guesses, guess])} /> + {gameLost && } + {gameIsWon && } + + ); } export default Game; diff --git a/src/components/Guess/Guess.js b/src/components/Guess/Guess.js new file mode 100644 index 000000000..aebfc6f1e --- /dev/null +++ b/src/components/Guess/Guess.js @@ -0,0 +1,25 @@ +import React from "react"; +import { range } from "../../utils"; +import { checkGuess } from "../../../src/game-helpers"; + +function Guess({ value, answer }) { + const letterStatuses = checkGuess(value, answer); + return ( +

+ {range(5).map((i) => { + return ( + + {value?.split("")[i]} + + ); + })} +

+ ); +} + +export default Guess; diff --git a/src/components/Guess/index.js b/src/components/Guess/index.js new file mode 100644 index 000000000..afbf137b5 --- /dev/null +++ b/src/components/Guess/index.js @@ -0,0 +1,2 @@ +export * from './Guess'; +export { default } from './Guess'; diff --git a/src/components/Guesses/Guesses.js b/src/components/Guesses/Guesses.js new file mode 100644 index 000000000..c2e75a4e1 --- /dev/null +++ b/src/components/Guesses/Guesses.js @@ -0,0 +1,16 @@ +import React from "react"; +import { range } from "../../utils"; +import { NUM_OF_GUESSES_ALLOWED } from "../../constants"; +import Guess from "../Guess"; + +function Guesses({ guesses, answer }) { + return ( +
+ {range(NUM_OF_GUESSES_ALLOWED).map((number) => { + return ; + })} +
+ ); +} + +export default Guesses; diff --git a/src/components/Guesses/index.js b/src/components/Guesses/index.js new file mode 100644 index 000000000..8d27e0072 --- /dev/null +++ b/src/components/Guesses/index.js @@ -0,0 +1,2 @@ +export * from './Guesses'; +export { default } from './Guesses'; diff --git a/src/components/Input/Input.js b/src/components/Input/Input.js new file mode 100644 index 000000000..60959ccab --- /dev/null +++ b/src/components/Input/Input.js @@ -0,0 +1,29 @@ +import React, { useState } from "react"; + +function Input({ setGuesses }) { + const [guess, setGuess] = useState(""); + + function handleSubmit(event) { + event.preventDefault(); + setGuesses(guess); + setGuess(""); + } + return ( +
+ + setGuess(e.target.value.toUpperCase())} + /> +
+ ); +} + +export default Input; diff --git a/src/components/Input/index.js b/src/components/Input/index.js new file mode 100644 index 000000000..b64980c62 --- /dev/null +++ b/src/components/Input/index.js @@ -0,0 +1,2 @@ +export * from './Input'; +export { default } from './Input';