@@ -24,55 +24,132 @@ export function App() {
24
24
const [ gameState , setGameState ] = useState < GameState > ( "pre-game" ) ;
25
25
const [ correctMoves , setCorrectMoves ] = useState < readonly number [ ] > ( [ ] ) ;
26
26
27
- if ( gameState === "pre-game" ) {
28
- return (
29
- < div style = { { display : "flex" , gap : 10 } } >
30
- < button
31
- onClick = { ( ) => {
32
- setGameState ( "cpu-turn" ) ;
33
- setCorrectMoves ( ( prev ) => [ ...prev , randNum ( 4 ) ] ) ; // TODO: Add to cpu-turn state instead once created
34
- } }
35
- >
36
- Start Game
37
- </ button >
38
- Simon Game
39
- </ div >
40
- ) ;
41
- }
42
-
43
- return (
44
- < >
45
- < div style = { { display : "flex" , gap : 10 } } >
46
- { config . boxes . map ( ( box , index ) => (
47
- < Box
48
- key = { index }
49
- color = { box . color }
27
+ switch ( gameState ) {
28
+ case "cpu-turn" : {
29
+ return (
30
+ < >
31
+ < div style = { { display : "flex" , gap : 10 } } >
32
+ { config . boxes . map ( ( box , index ) => (
33
+ < Box
34
+ key = { index }
35
+ color = { box . color }
36
+ onClick = { ( ) => {
37
+ playNote ( box . frequency ) ;
38
+ setPlayerMoves ( ( ) => {
39
+ const newPlayerMoves = [ ...playerMoves , index ] ;
40
+ const isSequenceCorrect = isPrefixCorrect (
41
+ newPlayerMoves ,
42
+ correctMoves ,
43
+ ) ;
44
+ if ( ! isSequenceCorrect ) {
45
+ setGameState ( "game-over" ) ;
46
+ return newPlayerMoves ;
47
+ }
48
+ if ( newPlayerMoves . length === correctMoves . length ) {
49
+ setGameState ( "cpu-turn" ) ;
50
+ return [ ] ;
51
+ }
52
+ setGameState ( "player-turn" ) ;
53
+ return newPlayerMoves ;
54
+ } ) ;
55
+ } }
56
+ />
57
+ ) ) }
58
+ </ div >
59
+ < pre > Game State: { gameState } </ pre >
60
+ < pre > Player Moves: { JSON . stringify ( playerMoves , null , 2 ) } </ pre >
61
+ < pre > Correct Moves: { JSON . stringify ( correctMoves , null , 2 ) } </ pre >
62
+ </ >
63
+ ) ;
64
+ }
65
+ case "game-over" : {
66
+ return (
67
+ < >
68
+ < div style = { { display : "flex" , gap : 10 } } >
69
+ { config . boxes . map ( ( box , index ) => (
70
+ < Box
71
+ key = { index }
72
+ color = { box . color }
73
+ onClick = { ( ) => {
74
+ playNote ( box . frequency ) ;
75
+ setPlayerMoves ( ( ) => {
76
+ const newPlayerMoves = [ ...playerMoves , index ] ;
77
+ const isSequenceCorrect = isPrefixCorrect (
78
+ newPlayerMoves ,
79
+ correctMoves ,
80
+ ) ;
81
+ if ( ! isSequenceCorrect ) {
82
+ setGameState ( "game-over" ) ;
83
+ return newPlayerMoves ;
84
+ }
85
+ if ( newPlayerMoves . length === correctMoves . length ) {
86
+ setGameState ( "cpu-turn" ) ;
87
+ return [ ] ;
88
+ }
89
+ setGameState ( "player-turn" ) ;
90
+ return newPlayerMoves ;
91
+ } ) ;
92
+ } }
93
+ />
94
+ ) ) }
95
+ </ div >
96
+ < pre > Game State: { gameState } </ pre >
97
+ < pre > Player Moves: { JSON . stringify ( playerMoves , null , 2 ) } </ pre >
98
+ < pre > Correct Moves: { JSON . stringify ( correctMoves , null , 2 ) } </ pre >
99
+ </ >
100
+ ) ;
101
+ }
102
+ case "player-turn" : {
103
+ return (
104
+ < >
105
+ < div style = { { display : "flex" , gap : 10 } } >
106
+ { config . boxes . map ( ( box , index ) => (
107
+ < Box
108
+ key = { index }
109
+ color = { box . color }
110
+ onClick = { ( ) => {
111
+ playNote ( box . frequency ) ;
112
+ setPlayerMoves ( ( ) => {
113
+ const newPlayerMoves = [ ...playerMoves , index ] ;
114
+ const isSequenceCorrect = isPrefixCorrect (
115
+ newPlayerMoves ,
116
+ correctMoves ,
117
+ ) ;
118
+ if ( ! isSequenceCorrect ) {
119
+ setGameState ( "game-over" ) ;
120
+ return newPlayerMoves ;
121
+ }
122
+ if ( newPlayerMoves . length === correctMoves . length ) {
123
+ setGameState ( "cpu-turn" ) ;
124
+ return [ ] ;
125
+ }
126
+ setGameState ( "player-turn" ) ;
127
+ return newPlayerMoves ;
128
+ } ) ;
129
+ } }
130
+ />
131
+ ) ) }
132
+ </ div >
133
+ < pre > Game State: { gameState } </ pre >
134
+ < pre > Player Moves: { JSON . stringify ( playerMoves , null , 2 ) } </ pre >
135
+ < pre > Correct Moves: { JSON . stringify ( correctMoves , null , 2 ) } </ pre >
136
+ </ >
137
+ ) ;
138
+ }
139
+ case "pre-game" : {
140
+ return (
141
+ < div style = { { display : "flex" , gap : 10 } } >
142
+ < button
50
143
onClick = { ( ) => {
51
- playNote ( box . frequency ) ;
52
- setPlayerMoves ( ( ) => {
53
- const newPlayerMoves = [ ...playerMoves , index ] ;
54
- const isSequenceCorrect = isPrefixCorrect (
55
- newPlayerMoves ,
56
- correctMoves ,
57
- ) ;
58
- if ( ! isSequenceCorrect ) {
59
- setGameState ( "game-over" ) ;
60
- return newPlayerMoves ;
61
- }
62
- if ( newPlayerMoves . length === correctMoves . length ) {
63
- setGameState ( "cpu-turn" ) ;
64
- return [ ] ;
65
- }
66
- setGameState ( "player-turn" ) ;
67
- return newPlayerMoves ;
68
- } ) ;
144
+ setGameState ( "cpu-turn" ) ;
145
+ setCorrectMoves ( ( prev ) => [ ...prev , randNum ( 4 ) ] ) ; // TODO: Add to cpu-turn state instead once created
69
146
} }
70
- / >
71
- ) ) }
72
- </ div >
73
- < pre > Game State: { gameState } </ pre >
74
- < pre > Player Moves: { JSON . stringify ( playerMoves , null , 2 ) } </ pre >
75
- < pre > Correct Moves: { JSON . stringify ( correctMoves , null , 2 ) } </ pre >
76
- </ >
77
- ) ;
147
+ >
148
+ Start Game
149
+ </ button >
150
+ Simon Game
151
+ </ div >
152
+ ) ;
153
+ }
154
+ }
78
155
}
0 commit comments