diff --git a/src/App.tsx b/src/App.tsx index 6f4d240..e7972bb 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -9,7 +9,7 @@ import { InfoModal } from './components/modals/InfoModal' import { WinModal } from './components/modals/WinModal' import { StatsModal } from './components/modals/StatsModal' import { isWordInWordList, isWinningWord, solution } from './lib/words' -import { addEvent } from './lib/stats' +import { addEvent, loadStats } from './lib/stats' import { loadGameStateFromLocalStorage, saveGameStateToLocalStorage, @@ -36,6 +36,11 @@ function App() { return loaded.guesses }) + const [stats, setStats] = useState(() => { + const loaded = loadStats() + return loaded + }) + useEffect(() => { saveGameStateToLocalStorage({ guesses, solution }) }, [guesses]) @@ -71,12 +76,12 @@ function App() { setCurrentGuess('') if (winningWord) { - addEvent(guesses.length) + setStats(addEvent(stats, guesses.length)) return setIsGameWon(true) } if (guesses.length === 5) { - addEvent(guesses.length + 1) + setStats(addEvent(stats, guesses.length + 1)) setIsGameLost(true) return setTimeout(() => { setIsGameLost(false) @@ -134,6 +139,7 @@ function App() { setIsStatsModalOpen(false)} + stats={stats} /> void + stats: number[] } -export const StatsModal = ({ isOpen, handleClose }: Props) => { +export const StatsModal = ({ isOpen, handleClose, stats }: Props) => { return ( { Statistics
-

trys = {trysStat}

-

success rate = {successRateStat}

-

Best streak is {bestStreakStat} currently {currentStreakStat}

+

trys = {String(trys(stats))}

+

success rate = {String(successRate(stats))}%

+

Best streak is {String(bestStreak(stats))} currently {String(currentStreak(stats))}

+ + Distribution + +

1 {String(stats[0])}

+

2 {String(stats[1])}

+

3 {String(stats[2])}

+

4 {String(stats[3])}

+

5 {String(stats[4])}

+

6 {String(stats[5])}

diff --git a/src/lib/localStorage.ts b/src/lib/localStorage.ts index 215d470..81fca8e 100644 --- a/src/lib/localStorage.ts +++ b/src/lib/localStorage.ts @@ -17,9 +17,9 @@ export const loadGameStateFromLocalStorage = () => { const gameStatKey = 'gameStats' type StoredGameStats = { - data: number[] - bestStreak: number - currentStreak: number + distribution: number[] + current: number + best: number } export const saveStatsToLocalStorage = ( gameStats: StoredGameStats) => { diff --git a/src/lib/stats.ts b/src/lib/stats.ts index 488411f..c0e08f6 100644 --- a/src/lib/stats.ts +++ b/src/lib/stats.ts @@ -7,50 +7,61 @@ import { saveStatsToLocalStorage } from './localStorage' -var bestStreak: number = 0 -var currentStreak: number = 0 -var data: number[] = [0,0,0,0,0,0,0] // Persistent data +// In stats array elements 0-5 are successes in 1-6 trys +// stats[6] is the number of failures +// stats[7] is the currentStreak +// stats[8] is the bestStreak -export const addEvent = (count: number) => { - // Count is number of incorrect guesses before end. - if(count < 0) { count = 0 } // Should not really need this - if( count > 5 ){ // A fail situation - currentStreak = 0 // End current streak - data[6] += 1 // Increase number of fails +export const failures = (stats: number[] ) => { return stats[6] } +export const currentStreak = (stats: number[] ) => { return stats[7] } +export const bestStreak = (stats: number[] ) => { return stats[8] } + +export const addEvent = (stats: number[], count: number) => { + // Count is number of incorrect guesses before end. + if(count < 0) { count = 0 } // Should not really need this + if( count > 5 ){ // A fail situation + stats[7] = 0 // End current streak + stats[6] += 1 // Increase number of fails } else { - data[count] += 1 // Increase counters - currentStreak += 1 - if( bestStreak < currentStreak ){ - bestStreak = currentStreak + stats[count] += 1 // Increase counters + stats[7] += 1 + if( bestStreak(stats) < currentStreak(stats) ){ + stats[8] = currentStreak(stats) } } - saveStats() + saveStats(stats) + return stats } export const resetStats = () => { - currentStreak = 0 - bestStreak = 0 - data = [0,0,0,0,0,0,0] + return [0,0,0,0,0,0,0,0,0] } -export const saveStats = () => { - saveStatsToLocalStorage({ data, bestStreak, currentStreak }) +export const saveStats = (stats: number[]) => { + const distribution = stats.slice(0,7) + const current = currentStreak(stats) + const best = bestStreak(stats) + saveStatsToLocalStorage({ distribution , current, best }) } export const loadStats = () => { const loaded = loadStatsFromLocalStorage() - resetStats() + var stats = resetStats() if( loaded ){ - data = loaded.data - bestStreak = loaded.bestStreak - currentStreak = loaded.currentStreak + stats = loaded.distribution + stats[7] = loaded.current + stats[8] = loaded.best } + return ( stats ) +} + +export const trys = (stats: number[] ) => { + return(stats.slice(0,7).reduce((a,b) => a+b , 0 )) +} + +export const successRate = (stats: number[] ) => { + return(Math.round((100*(trys(stats) - failures(stats)))/Math.max(trys(stats),1))) } -const trys = data.reduce((a,b) => a+b , 0 ) -export const trysStat = String(trys) -export const successRateStat = String(Math.round((100*(trys - data[6])/Math.max(trys,1))))+"%" -export const bestStreakStat = String(bestStreak) -export const currentStreakStat = String(currentStreak)