diff --git a/src/components/Banner/Banner.js b/src/components/Banner/Banner.js new file mode 100644 index 000000000..93cf0e1df --- /dev/null +++ b/src/components/Banner/Banner.js @@ -0,0 +1,17 @@ +import React from 'react'; + +function Banner({ gameResult, answer, guesses}) { + const bannerStyle = gameResult === 'win' ? 'happy' : 'sad'; + const loseText =

Sorry, the correct answer is {answer}

+ const winText =

Congratulations! Got it in {`${guesses.length} ${guesses.length > 1 ? 'guesses' : 'guess'}`}.

+ + return ( + gameResult && ( +
+ {gameResult === 'win' ? winText : loseText} +
+ ) + ); +} + +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..9ab9cc083 100644 --- a/src/components/Game/Game.js +++ b/src/components/Game/Game.js @@ -2,14 +2,29 @@ import React from 'react'; import { sample } from '../../utils'; import { WORDS } from '../../data'; +import UserInput from '../UserInput'; +import UserGuesses from '../UserGuesses'; +import Banner from '../Banner'; // 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 }); +console.log({ answer }); + function Game() { - return <>Put a game here!; + const [guesses, setGuesses] = React.useState([]); + const [gameResult, setGameResult] = React.useState(null); + + function finishGame(result) { + setGameResult(result); + } + + return <> + + + {gameResult && ()} + ; } export default Game; diff --git a/src/components/UserGuesses/UserGuesses.js b/src/components/UserGuesses/UserGuesses.js new file mode 100644 index 000000000..1aaa828e6 --- /dev/null +++ b/src/components/UserGuesses/UserGuesses.js @@ -0,0 +1,50 @@ +import React, { useEffect } from 'react'; +import { range } from '../../utils'; +import { NUM_OF_GUESSES_ALLOWED } from '../../constants'; +import { checkGuess} from '../../game-helpers'; + +function UserGuesses({ guesses, answer, finishGame }) { + let guessesResult = guesses.map((guess) => checkGuess(guess, answer)); + + const emptySlots = Array(5).fill({letter: '', status: ''}); + + let guessesArray = range(NUM_OF_GUESSES_ALLOWED).fill([]).map((_, index) => { + return guessesResult[index] || [ ...emptySlots ]; + }); + + const randonIndex = () => (Math.random()); + + function checkIfWon(guesses) { + const hasWon = guesses.filter(guess => ( + guess.every(letter => letter.status === 'correct') + )); + + // hasWon.length > 0 ? finishGame('win') : null; + return hasWon.length > 0; + } + + useEffect(() => { + if (checkIfWon(guessesResult)) { + finishGame('win'); + } + }, [guessesResult, finishGame]); + + return ( + <> +

Your guesses:

+
+ {guessesArray.map((guess) => ( +

+ {guess.map(( {letter, status} ) => ( + + {letter} + + ))} +

+ ))} +
+ + ); +} + +export default UserGuesses; diff --git a/src/components/UserGuesses/index.js b/src/components/UserGuesses/index.js new file mode 100644 index 000000000..3eb446173 --- /dev/null +++ b/src/components/UserGuesses/index.js @@ -0,0 +1,2 @@ +export * from './UserGuesses'; +export { default } from './UserGuesses'; diff --git a/src/components/UserInput/UserInput.js b/src/components/UserInput/UserInput.js new file mode 100644 index 000000000..f5a63c445 --- /dev/null +++ b/src/components/UserInput/UserInput.js @@ -0,0 +1,48 @@ +import React from 'react'; + +function UserInput({ guesses, setGuesses, gameResult }) { + const [guess, setGuess] = React.useState(''); + + const handleChange = (event) => { + setGuess(event.target.value.toUpperCase()); + } + + const handleSubmit = (event) => { + event.preventDefault(); + + const newGuesses = [...guesses]; + + newGuesses.push(guess); + + setGuesses(newGuesses); + + setGuess(''); + } + + const stopPlaying = () => { + if (gameResult || guesses.length === 6) { + return true; + } + return false; + } + + return ( +
+ + +
+ ); +} + +export default UserInput; diff --git a/src/components/UserInput/index.js b/src/components/UserInput/index.js new file mode 100644 index 000000000..1486f08dd --- /dev/null +++ b/src/components/UserInput/index.js @@ -0,0 +1,2 @@ +export * from './UserInput'; +export { default } from './UserInput';