@@ -4,11 +4,12 @@ import { Box } from "./Box.tsx";
4
4
import { playNote } from "../util/playNote.ts" ;
5
5
import { config } from "../constants.ts" ;
6
6
7
- function isSequenceCorrect (
8
- check : readonly number [ ] ,
7
+ // TODO: Make this a reusable utility
8
+ function isPrefixCorrect (
9
+ prefix : readonly number [ ] ,
9
10
correct : readonly number [ ] ,
10
11
) : boolean {
11
- return check . every ( ( element , i ) => element === correct [ i ] ) ;
12
+ return prefix . every ( ( element , i ) => element === correct [ i ] ) ;
12
13
}
13
14
14
15
type GameState = "pre-game" | "game-over" | "player-turn" | "cpu-turn" ;
@@ -48,28 +49,21 @@ export function App() {
48
49
color = { box . color }
49
50
onClick = { ( ) => {
50
51
playNote ( box . frequency ) ;
51
- setPlayerMoves ( ( prev ) => {
52
- const newPlayerMoves = [ ...prev , index ] ;
53
- const isCorrectSequence = isSequenceCorrect (
52
+ setPlayerMoves ( ( ) => {
53
+ const newPlayerMoves = [ ...playerMoves , index ] ;
54
+ const isSequenceCorrect = isPrefixCorrect (
54
55
newPlayerMoves ,
55
56
correctMoves ,
56
57
) ;
57
- if ( ! isCorrectSequence ) {
58
+ if ( ! isSequenceCorrect ) {
58
59
setGameState ( "game-over" ) ;
60
+ return newPlayerMoves ;
59
61
}
60
- if (
61
- isCorrectSequence &&
62
- newPlayerMoves . length === correctMoves . length
63
- ) {
62
+ if ( newPlayerMoves . length === correctMoves . length ) {
64
63
setGameState ( "cpu-turn" ) ;
65
64
return [ ] ;
66
65
}
67
- if (
68
- isCorrectSequence &&
69
- newPlayerMoves . length < correctMoves . length
70
- ) {
71
- setGameState ( "player-turn" ) ;
72
- }
66
+ setGameState ( "player-turn" ) ;
73
67
return newPlayerMoves ;
74
68
} ) ;
75
69
} }
0 commit comments