@@ -43,6 +43,7 @@ export default class Game {
43
43
44
44
this . #board. forEach ( square => {
45
45
square . innerHTML = '' ;
46
+ square . classList . remove ( 'win' , 'irrelevant' ) ;
46
47
const handler = this . #listeners. get ( square ) ;
47
48
square . removeEventListener ( 'click' , handler ) ;
48
49
} ) ;
@@ -102,19 +103,32 @@ export default class Game {
102
103
const [ a , b , c ] = combo ;
103
104
104
105
if ( this . #state[ a ] && this . #state[ a ] === this . #state[ b ] && this . #state[ a ] === this . #state[ c ] ) {
105
- return this . #state [ a ] ;
106
+ return combo ;
106
107
}
107
108
}
108
109
109
110
// No empty squares without a winner => tie
110
111
if ( ! this . #state. includes ( '' ) ) {
111
- return 'T' ;
112
+ return [ ] ;
112
113
}
113
114
114
115
return null ;
115
116
}
116
117
117
- #endRound( winner ) {
118
+ #endRound( winningCombo ) {
119
+ const winner = winningCombo . length === 0 ? 'T' : this . #state[ winningCombo [ 0 ] ] ;
120
+
121
+ this . #board. forEach ( ( square , index ) => {
122
+ if ( winningCombo . includes ( index ) ) {
123
+ square . classList . add ( 'win' ) ;
124
+ square . querySelector ( 'svg' ) . classList . add ( 'blinking' ) ;
125
+ setTimeout ( ( ) => { square . querySelector ( 'svg' ) . classList . remove ( 'blinking' ) } , 1500 ) ;
126
+ }
127
+ else {
128
+ square . classList . add ( 'irrelevant' ) ;
129
+ }
130
+ } )
131
+
118
132
this . #end = true ;
119
133
this . #saveScore( winner ) ;
120
134
this . #updateScore( winner ) ;
@@ -136,26 +150,29 @@ export default class Game {
136
150
if ( winner === 'T' ) {
137
151
this . #ties++ ;
138
152
this . #tiesTag. textContent = this . #ties;
139
- this . #tiesTag. classList . add ( 'blinking-text ' ) ;
140
- setTimeout ( ( ) => { this . #tiesTag. classList . remove ( 'blinking-text ' ) ; } , 2000 ) ;
153
+ this . #tiesTag. classList . add ( 'blinking' ) ;
154
+ setTimeout ( ( ) => { this . #tiesTag. classList . remove ( 'blinking' ) ; } , 1500 ) ;
141
155
} else if ( winner === 'X' ) {
142
156
this . #xWins++ ;
143
157
this . #xWinsTag. textContent = this . #xWins;
144
- this . #xWinsTag. classList . add ( 'blinking-text ' ) ;
145
- setTimeout ( ( ) => { this . #xWinsTag. classList . remove ( 'blinking-text ' ) ; } , 2000 ) ;
158
+ this . #xWinsTag. classList . add ( 'blinking' ) ;
159
+ setTimeout ( ( ) => { this . #xWinsTag. classList . remove ( 'blinking' ) ; } , 1500 ) ;
146
160
} else if ( winner === 'O' ) {
147
161
this . #oWins++ ;
148
162
this . #oWinsTag. textContent = this . #oWins;
149
- this . #oWinsTag. classList . add ( 'blinking-text ' ) ;
150
- setTimeout ( ( ) => { this . #oWinsTag. classList . remove ( 'blinking-text ' ) ; } , 2000 ) ;
163
+ this . #oWinsTag. classList . add ( 'blinking' ) ;
164
+ setTimeout ( ( ) => { this . #oWinsTag. classList . remove ( 'blinking' ) ; } , 1500 ) ;
151
165
}
152
166
}
153
167
154
168
#resetBoard( ) {
155
169
// Even number of rounds => next round is odd => X starts (and vice versa)
156
170
this . #onTurn = ( this . #ties + this . #xWins + this . #oWins) % 2 === 0 ? 'X' : 'O' ;
157
171
this . #state = [ '' , '' , '' , '' , '' , '' , '' , '' , '' ] ;
158
- this . #board. forEach ( square => square . innerHTML = '' ) ;
172
+ this . #board. forEach ( square => {
173
+ square . innerHTML = '' ;
174
+ square . classList . remove ( 'win' , 'irrelevant' ) ;
175
+ } ) ;
159
176
}
160
177
161
178
#prepareAssets( ) {
0 commit comments