1
00:00:01,090 --> 00:00:03,920
<v Jonas>Let's keep building or Pig Game.</v>

2
00:00:03,920 --> 00:00:04,860
And in this video,

3
00:00:04,860 --> 00:00:07,670
we're gonna be concerned with switching

4
00:00:07,670 --> 00:00:10,423
from one active player to another one.

5
00:00:11,970 --> 00:00:16,113
So as we already know, whenever the player rules are one,

6
00:00:17,000 --> 00:00:20,820
we will enter this else block, right?

7
00:00:20,820 --> 00:00:23,061
So when the dice is not a 1,

8
00:00:23,061 --> 00:00:26,460
then the current dice gets added to the current score.

9
00:00:26,460 --> 00:00:28,820
But if we happen to roll a 1,

10
00:00:28,820 --> 00:00:30,840
then we lose all our score

11
00:00:30,840 --> 00:00:34,920
and it is the next players round, all right?

12
00:00:34,920 --> 00:00:36,490
So in the previous lecture,

13
00:00:36,490 --> 00:00:40,790
we implemented this functionality of adding the dice

14
00:00:40,790 --> 00:00:42,670
to the current score only

15
00:00:42,670 --> 00:00:46,200
as the player number 0, okay?

16
00:00:46,200 --> 00:00:48,370
But now we need to make this work

17
00:00:48,370 --> 00:00:51,770
for both player number 0 and number 1.

18
00:00:51,770 --> 00:00:52,690
And so for that,

19
00:00:52,690 --> 00:00:55,210
we need to keep track of which player

20
00:00:55,210 --> 00:00:57,690
is actually the current player.

21
00:00:57,690 --> 00:00:58,850
And in order to do that,

22
00:00:58,850 --> 00:01:01,940
we actually need to keep track of which player

23
00:01:01,940 --> 00:01:05,280
is actually the active player in a moment

24
00:01:05,280 --> 00:01:07,270
that the dice was rolled.

25
00:01:07,270 --> 00:01:09,690
So basically we need to know which player

26
00:01:09,690 --> 00:01:11,990
is right now playing.

27
00:01:11,990 --> 00:01:13,770
And with right now I mean,

28
00:01:13,770 --> 00:01:17,350
whenever the button is clicked, all right?

29
00:01:17,350 --> 00:01:19,420
So we will create another variable,

30
00:01:19,420 --> 00:01:21,560
which will hold exactly that.

31
00:01:21,560 --> 00:01:22,970
So it will hold 0,

32
00:01:22,970 --> 00:01:25,900
if the current player is player 0

33
00:01:25,900 --> 00:01:27,360
and it will hold 1,

34
00:01:27,360 --> 00:01:31,093
if the active player is player number 1.

35
00:01:33,490 --> 00:01:38,490
So let active player.

36
00:01:38,870 --> 00:01:41,820
And since we start with the first player,

37
00:01:41,820 --> 00:01:43,750
we set it to 0,

38
00:01:43,750 --> 00:01:47,230
because remember that player number 1 is player 0

39
00:01:47,230 --> 00:01:51,860
and player 2 is here in our code player number 1.

40
00:01:51,860 --> 00:01:55,600
And in fact, let me explain you right away, why that is.

41
00:01:55,600 --> 00:01:58,400
So the reason is that we will store the scores

42
00:01:58,400 --> 00:02:01,560
of both players in an array.

43
00:02:01,560 --> 00:02:02,773
So let me do that here.

44
00:02:03,990 --> 00:02:08,780
So let or actually const, because it's an array.

45
00:02:08,780 --> 00:02:12,530
So const scores equals an array,

46
00:02:12,530 --> 00:02:16,713
which will start with 0 points for both sides.

47
00:02:17,560 --> 00:02:21,180
And so these scores are actually the final scores.

48
00:02:21,180 --> 00:02:24,100
So the big scores, which accumulate,

49
00:02:24,100 --> 00:02:25,983
let me show that to you in the demo.

50
00:02:26,960 --> 00:02:30,390
So that's these big scores here.

51
00:02:30,390 --> 00:02:32,010
So these are the current scores,

52
00:02:32,010 --> 00:02:34,310
and these are, let's say the total scores

53
00:02:34,310 --> 00:02:36,470
that keep accumulating, right?

54
00:02:36,470 --> 00:02:41,270
And so we are storing these two scores here in an array.

55
00:02:41,270 --> 00:02:43,660
And remember that the array is zero-based

56
00:02:43,660 --> 00:02:45,610
and so the score of player number 1

57
00:02:45,610 --> 00:02:47,590
will be here at position 0,

58
00:02:47,590 --> 00:02:51,110
and the score of player two will be at position 1.

59
00:02:51,110 --> 00:02:53,150
And so that's why it will be handy

60
00:02:53,150 --> 00:02:55,660
to have the activePlayer variable here,

61
00:02:55,660 --> 00:02:59,260
also set to 0 and 1, okay?

62
00:02:59,260 --> 00:03:01,900
And we will see that in action actually,

63
00:03:01,900 --> 00:03:06,610
in the next lecture, where we will hold the scores,

64
00:03:06,610 --> 00:03:10,040
but for now knowing which is the active player

65
00:03:10,040 --> 00:03:11,870
is going to be important

66
00:03:11,870 --> 00:03:15,180
to actually display the current score here

67
00:03:15,180 --> 00:03:16,890
for the current player

68
00:03:16,890 --> 00:03:20,610
and not just always for player number 0.

69
00:03:20,610 --> 00:03:24,200
So instead of manipulating the element of player 0,

70
00:03:24,200 --> 00:03:26,660
so the current score of player 0,

71
00:03:26,660 --> 00:03:31,230
let's actually select the element dynamically, okay?

72
00:03:31,230 --> 00:03:32,580
So let me show that to you.

73
00:03:33,840 --> 00:03:37,210
So we will actually now do the selection right here,

74
00:03:37,210 --> 00:03:41,213
document. and actually let's use getElementById.

75
00:03:42,922 --> 00:03:45,270
And then here we need the class name.

76
00:03:45,270 --> 00:03:49,240
So the class name is gonna be either current O,

77
00:03:49,240 --> 00:03:54,210
for player 0, or current 1 for player 1.

78
00:03:54,210 --> 00:03:57,530
And so maybe now you start to see once more

79
00:03:57,530 --> 00:04:00,940
why we use the active player as 0 or 1,

80
00:04:00,940 --> 00:04:03,740
because now we can use that variable

81
00:04:03,740 --> 00:04:07,763
to basically build these collapse names, okay?

82
00:04:08,760 --> 00:04:10,520
So when it's player 0,

83
00:04:10,520 --> 00:04:15,520
we will then end up with current--0

84
00:04:15,760 --> 00:04:16,770
and if it's 1,

85
00:04:16,770 --> 00:04:19,440
we will end up with current--1

86
00:04:19,440 --> 00:04:21,540
because that's gonna be the active player.

87
00:04:23,510 --> 00:04:27,430
So what I just said is to do this.

88
00:04:27,430 --> 00:04:28,387
So current--

89
00:04:31,180 --> 00:04:36,180
and then the number of the active player, okay?

90
00:04:38,550 --> 00:04:40,090
And so now on this,

91
00:04:40,090 --> 00:04:42,740
we will get the text content

92
00:04:42,740 --> 00:04:46,243
and set it to the current score, okay?

93
00:04:50,280 --> 00:04:54,050
So again, this 1 here will always set the text content

94
00:04:54,050 --> 00:04:56,410
on player number 0,

95
00:04:56,410 --> 00:04:58,860
but here we do instead select

96
00:04:58,860 --> 00:05:02,840
the score element dynamically based on which

97
00:05:02,840 --> 00:05:05,163
is the active player right now, okay?

98
00:05:08,450 --> 00:05:10,450
So this is a very handy trick

99
00:05:10,450 --> 00:05:14,523
of building the ID name like this dynamically.

100
00:05:16,580 --> 00:05:19,530
Now here, when we switch the player,

101
00:05:19,530 --> 00:05:22,820
we of course will then need to change that value

102
00:05:22,820 --> 00:05:25,713
from zero to one or from one to zero.

103
00:05:26,720 --> 00:05:28,560
So let's do that here.

104
00:05:28,560 --> 00:05:33,560
So essentially switching the next player,

105
00:05:33,870 --> 00:05:36,240
that means to change that value.

106
00:05:36,240 --> 00:05:38,320
So activePlayer,

107
00:05:38,320 --> 00:05:42,050
and now here, let's not use again, the turnery operator.

108
00:05:42,050 --> 00:05:46,320
So we can say if the activePlayer is 0,

109
00:05:48,700 --> 00:05:51,370
then we want the new activePlayer to be 1

110
00:05:52,320 --> 00:05:54,980
and else it should be 0.

111
00:05:54,980 --> 00:05:58,180
All right, does that make sense?

112
00:05:58,180 --> 00:06:02,490
So essentially we are reassigning the active player here

113
00:06:02,490 --> 00:06:06,320
and we're checking whether right now it is player 0.

114
00:06:06,320 --> 00:06:10,910
So if it is then here the result of this whole operator,

115
00:06:10,910 --> 00:06:13,210
so which again is all of this,

116
00:06:13,210 --> 00:06:15,000
then the result will be 1.

117
00:06:15,000 --> 00:06:19,000
And so then activePlayer will be equal to 1,

118
00:06:19,000 --> 00:06:22,100
but if this is false here,

119
00:06:22,100 --> 00:06:24,480
so if the player is actually 1,

120
00:06:24,480 --> 00:06:27,830
well then the active player will become 0.

121
00:06:27,830 --> 00:06:30,160
And so essentially this allows us to switch

122
00:06:30,160 --> 00:06:32,200
from zero to 1.

123
00:06:32,200 --> 00:06:37,200
All right, so I think this would actually work already.

124
00:06:38,430 --> 00:06:39,263
So this is the demo,

125
00:06:39,263 --> 00:06:41,070
this is the real game.

126
00:06:41,070 --> 00:06:44,260
Let's just make sure that it works and reload it.

127
00:06:44,260 --> 00:06:45,870
And now as we roll the dice,

128
00:06:45,870 --> 00:06:48,650
remember that we are player number 0 right now.

129
00:06:48,650 --> 00:06:49,483
So this one.

130
00:06:50,790 --> 00:06:55,750
So 3 gets added to 0 is 3 and 7,

131
00:06:55,750 --> 00:06:57,670
so this works right now.

132
00:06:57,670 --> 00:07:01,840
Three, let's wait for a one so that we can switch the player

133
00:07:01,840 --> 00:07:03,343
and see what happens then.

134
00:07:07,600 --> 00:07:08,760
Okay.

135
00:07:08,760 --> 00:07:10,250
So now we're all the one.

136
00:07:10,250 --> 00:07:13,040
And so now we should be player number 1.

137
00:07:13,040 --> 00:07:15,860
So and essentially player 2.

138
00:07:15,860 --> 00:07:18,040
And so now when we roll the dice again,

139
00:07:18,040 --> 00:07:21,810
the new score should appear down here, right?

140
00:07:21,810 --> 00:07:24,380
Because this here is current 1.

141
00:07:24,380 --> 00:07:26,660
So this element here is the current 1

142
00:07:26,660 --> 00:07:29,510
that we just defined previously

143
00:07:30,900 --> 00:07:34,520
and indeed it works.

144
00:07:34,520 --> 00:07:36,410
So something happened here,

145
00:07:36,410 --> 00:07:39,440
but of course we need to reset the current score.

146
00:07:39,440 --> 00:07:42,240
So the current score was just for this player,

147
00:07:42,240 --> 00:07:44,080
but now we edit that for

148
00:07:44,080 --> 00:07:47,130
to the current score of the previous round.

149
00:07:47,130 --> 00:07:48,720
So as we switch the player,

150
00:07:48,720 --> 00:07:53,170
we also need to reset the current score, okay?

151
00:07:53,170 --> 00:07:56,620
So the logic of the active player is already working,

152
00:07:56,620 --> 00:08:00,140
but we still need to reset the current score.

153
00:08:00,140 --> 00:08:03,620
Also, you see that visually nothing changed yet.

154
00:08:03,620 --> 00:08:07,290
So in the real game, when the player is switched,

155
00:08:07,290 --> 00:08:09,250
this side here becomes white

156
00:08:09,250 --> 00:08:12,260
and so the background kind of changes there.

157
00:08:12,260 --> 00:08:15,200
Oh, and another thing is that this current score here

158
00:08:15,200 --> 00:08:19,800
should also then be set back to 0 again, okay?

159
00:08:19,800 --> 00:08:21,730
So basically the previous player

160
00:08:21,730 --> 00:08:26,030
should have its current score here visibly set to 0.

161
00:08:27,110 --> 00:08:29,210
So let me just tell you what happens here.

162
00:08:30,920 --> 00:08:32,743
When we switch to another player,

163
00:08:33,607 --> 00:08:35,007
so you see the current score

164
00:08:37,070 --> 00:08:38,110
and now there's a 1

165
00:08:38,110 --> 00:08:40,820
and so now this side here became white

166
00:08:40,820 --> 00:08:42,030
and then of course the current

167
00:08:42,030 --> 00:08:44,720
of the other player became 0.

168
00:08:44,720 --> 00:08:47,480
So let's first take care of that logic

169
00:08:47,480 --> 00:08:49,140
of changing the values

170
00:08:49,140 --> 00:08:52,363
and then I will show you how we change the background here.

171
00:08:54,240 --> 00:08:55,560
So let's go back.

172
00:08:55,560 --> 00:08:57,530
And the first thing that we need to do

173
00:08:57,530 --> 00:09:00,000
is to set the current score back to 0.

174
00:09:01,610 --> 00:09:05,770
So current score back to 0,

175
00:09:06,765 --> 00:09:11,470
and then we need to set the text content back to 0, okay?

176
00:09:11,470 --> 00:09:16,470
So basically of the active player before we switch it.

177
00:09:16,750 --> 00:09:20,200
So for example, player 0 was playing

178
00:09:20,200 --> 00:09:22,130
and then we switched to player 1,

179
00:09:22,130 --> 00:09:23,640
but before we do that switch,

180
00:09:23,640 --> 00:09:25,720
we need to change the current score

181
00:09:25,720 --> 00:09:28,700
of player 0 back to 0.

182
00:09:28,700 --> 00:09:33,700
So we need to do that here before we do the switch, okay?

183
00:09:33,980 --> 00:09:36,993
So basically what we do is the same as this,

184
00:09:39,290 --> 00:09:43,183
but we simply set it to 0, okay.

185
00:09:45,020 --> 00:09:46,840
So we're selecting the current player,

186
00:09:46,840 --> 00:09:49,360
which at this point is still 0

187
00:09:49,360 --> 00:09:52,530
and then we set his textContent to 0

188
00:09:52,530 --> 00:09:56,420
and then we switch from zero to one, okay?

189
00:09:56,420 --> 00:09:59,930
And actually we can also set the current score to 0 here,

190
00:09:59,930 --> 00:10:01,430
but that doesn't really matter

191
00:10:01,430 --> 00:10:04,793
because the current score is not bound to any player.

192
00:10:05,880 --> 00:10:09,223
So saving it, now let's try again.

193
00:10:11,310 --> 00:10:13,640
So all of this is still working,

194
00:10:13,640 --> 00:10:16,023
but let's wait what happens on the one?

195
00:10:20,050 --> 00:10:23,190
So that's a lot of points here, okay.

196
00:10:23,190 --> 00:10:27,050
So the current score is back to 0 here

197
00:10:27,050 --> 00:10:28,400
and now watch what happens

198
00:10:29,330 --> 00:10:32,970
and yeah, nice, that's working now.

199
00:10:32,970 --> 00:10:36,120
So now the actual current score variable

200
00:10:36,120 --> 00:10:38,080
was also set back to 0

201
00:10:38,080 --> 00:10:43,080
and so 6 plus 0 now on player number 1 is 6.

202
00:10:43,910 --> 00:10:47,240
So as we keep doing that, it keeps adding here

203
00:10:47,240 --> 00:10:50,513
and now we're back to player number 0, so this one.

204
00:10:53,270 --> 00:10:55,010
Then I wrote another one right away

205
00:10:55,010 --> 00:10:58,593
and so we switched to this player back again immediately.

206
00:10:59,700 --> 00:11:03,270
But you see that the logic here is already working.

207
00:11:03,270 --> 00:11:07,130
Now, the only thing that's left to do is that visual change.

208
00:11:07,130 --> 00:11:12,130
So putting that white background here on this other player.

209
00:11:12,900 --> 00:11:16,223
So let me show you in the HTML, how that works.

210
00:11:18,090 --> 00:11:22,620
And so basically the player that is active

211
00:11:22,620 --> 00:11:24,900
has this whole section here

212
00:11:24,900 --> 00:11:28,940
with the player--active class.

213
00:11:28,940 --> 00:11:31,380
So you see that this first section,

214
00:11:31,380 --> 00:11:34,360
which is for player 0 right now has this class

215
00:11:34,360 --> 00:11:37,810
because player 0 is always the first player.

216
00:11:37,810 --> 00:11:40,370
But then as we switch to the other player,

217
00:11:40,370 --> 00:11:44,160
we want to remove that class from here

218
00:11:44,160 --> 00:11:47,720
and basically put it here on the other player.

219
00:11:47,720 --> 00:11:50,250
Okay, so let's do that.

220
00:11:50,250 --> 00:11:51,083
And as always,

221
00:11:51,083 --> 00:11:54,137
we will start by selecting these two players.

222
00:11:54,137 --> 00:11:56,930
And this time is actually a class.

223
00:11:56,930 --> 00:12:00,523
So player 0 class and player 1 class.

224
00:12:01,740 --> 00:12:06,453
So let's do that here and do that as the first.

225
00:12:07,340 --> 00:12:11,793
So const player 0 element,

226
00:12:13,450 --> 00:12:16,243
document.querySelector.

227
00:12:17,090 --> 00:12:20,093
And now we need the dot for the class name,

228
00:12:21,350 --> 00:12:23,223
so that's player--1.

229
00:12:24,170 --> 00:12:25,390
And I'm just copying it here,

230
00:12:25,390 --> 00:12:26,393
I'm too lazy.

231
00:12:29,050 --> 00:12:31,850
And this 1 here is actually player 0,

232
00:12:31,850 --> 00:12:35,540
so 0 and 1 right here.

233
00:12:35,540 --> 00:12:39,300
And now let's actually change their class names.

234
00:12:39,300 --> 00:12:44,300
So the player active class, so down here.

235
00:12:44,360 --> 00:12:45,193
And for that,

236
00:12:45,193 --> 00:12:47,630
I will now show you yet another method

237
00:12:47,630 --> 00:12:50,573
that's available on the class list property.

238
00:12:52,896 --> 00:12:55,290
Well actually let's start typing first.

239
00:12:55,290 --> 00:12:58,027
So player0Element.Classlist,

240
00:13:01,030 --> 00:13:04,990
and we already saw the remove method,

241
00:13:04,990 --> 00:13:06,590
we saw the add method,

242
00:13:06,590 --> 00:13:09,290
but now I will show you the toggle method.

243
00:13:09,290 --> 00:13:11,250
So we will use toggle now.

244
00:13:11,250 --> 00:13:13,080
And what toggle will do is that

245
00:13:13,080 --> 00:13:16,270
it will add the class if it is not there

246
00:13:16,270 --> 00:13:19,870
and if it is there, it will remove it, okay.

247
00:13:19,870 --> 00:13:21,730
So we could do that manually also

248
00:13:21,730 --> 00:13:24,110
by checking if the class is there

249
00:13:24,110 --> 00:13:26,500
and only removing it if it is,

250
00:13:26,500 --> 00:13:30,290
but using toggle takes that work away from us.

251
00:13:30,290 --> 00:13:32,990
So actually we could have used this toggle method

252
00:13:32,990 --> 00:13:35,850
in the previous project of the popup,

253
00:13:35,850 --> 00:13:36,683
but back then,

254
00:13:36,683 --> 00:13:39,920
I actually wanted to show you the contains method.

255
00:13:39,920 --> 00:13:41,570
Remember that?

256
00:13:41,570 --> 00:13:45,203
But now again, we will use toggle here because it is easier.

257
00:13:46,520 --> 00:13:51,520
And so now we simply have to add this player active class

258
00:13:51,790 --> 00:13:55,070
or actually to toggle it.

259
00:13:55,070 --> 00:13:58,130
So if we do that on both then it will work

260
00:14:02,400 --> 00:14:07,400
because on player 0 it will remove the class if it's there

261
00:14:08,200 --> 00:14:10,140
and if it's not it will add it.

262
00:14:10,140 --> 00:14:12,820
And the same thing on the other player.

263
00:14:12,820 --> 00:14:15,890
And since we start with the player active class

264
00:14:15,890 --> 00:14:17,523
on only one element,

265
00:14:18,530 --> 00:14:20,820
so only on player 0 here,

266
00:14:20,820 --> 00:14:23,030
then toggling both at the same time

267
00:14:23,030 --> 00:14:25,180
will ensure that it's only ever

268
00:14:25,180 --> 00:14:28,130
on one of the elements at once.

269
00:14:28,130 --> 00:14:31,690
So let's now check that out

270
00:14:32,600 --> 00:14:34,400
just to make sure we load it here

271
00:14:35,640 --> 00:14:36,823
and let's wait for it.

272
00:14:42,240 --> 00:14:45,480
It's taking a lot of time and yes,

273
00:14:45,480 --> 00:14:47,360
so we switched the active player

274
00:14:47,360 --> 00:14:49,623
and now it's also nicely visible.

275
00:14:51,840 --> 00:14:55,100
And yes, we changed it back as well

276
00:14:55,100 --> 00:14:59,640
and so that works beautifully great job.

277
00:14:59,640 --> 00:15:02,600
And now basically the only thing that's missing

278
00:15:02,600 --> 00:15:04,930
to actually make this game work

279
00:15:04,930 --> 00:15:07,300
is to hold the current score.

280
00:15:07,300 --> 00:15:10,813
And so that is gonna be the topic of the next video.

