1
00:00:00,320 --> 00:00:06,320
[Música de presentación]
2
00:00:09,040 --> 00:00:10,680
(Profesor)
Hola. En la clase pasada,
3
00:00:10,760 --> 00:00:13,720
empezamos a ver
este juego completo que teníamos,
4
00:00:13,800 --> 00:00:15,840
que se trataba
de que los personajes
5
00:00:15,920 --> 00:00:18,360
tenían que ubicar las galletitas
6
00:00:18,440 --> 00:00:20,960
e ir comiéndoselas
para sumar puntaje.
7
00:00:21,280 --> 00:00:22,400
Lo que vamos a ver hoy
8
00:00:22,480 --> 00:00:26,360
es cómo hacer que las galletitas
se ubiquen en lugares al azar.
9
00:00:26,440 --> 00:00:28,240
Fíjense que,
cada vez que yo reinicio,
10
00:00:28,320 --> 00:00:29,680
se ubican en lugares distintos
11
00:00:29,760 --> 00:00:32,280
y, también,
vamos a analizar un poquito
12
00:00:32,360 --> 00:00:33,640
el cambio de turno.
13
00:00:33,720 --> 00:00:35,400
Bueno, empecemos por hacer
14
00:00:35,480 --> 00:00:37,600
que las galletitas
se ubiquen al azar.
15
00:00:37,680 --> 00:00:39,520
Si yo miro el programa inicial,
16
00:00:39,600 --> 00:00:43,000
lo que voy a ver es que,
luego de colocar la cámara
17
00:00:43,080 --> 00:00:45,960
en un "dummy" de cámara apropiado
para que la escena se pueda ver,
18
00:00:46,040 --> 00:00:49,440
estoy llamando a un método
que se llama "ubicar galletitas".
19
00:00:49,520 --> 00:00:52,440
Vamos a analizar ese método,
que lo tengo acá.
20
00:00:52,920 --> 00:00:56,000
Vamos a ver cómo funciona
el método que ubica las galletitas.
21
00:00:56,080 --> 00:00:57,920
Tengo una lista de galletitas.
22
00:00:58,000 --> 00:00:59,800
Fíjense que acá tengo
todas las galletitas
23
00:00:59,880 --> 00:01:03,040
que fui construyendo y agregando
en este grupo.
24
00:01:03,760 --> 00:01:07,840
Luego,
tengo una lista de galletitas,
25
00:01:07,920 --> 00:01:09,840
una variable global, ¿sí?,
26
00:01:09,920 --> 00:01:12,280
que tengo acá, donde fui agregando
todas las galletitas.
27
00:01:12,360 --> 00:01:15,800
Y ahora lo que hago
es recorrerlas una a una
28
00:01:15,880 --> 00:01:19,520
y las ubico en un "dummy"
que se llama "centro",
29
00:01:19,600 --> 00:01:22,400
que coloqué
justo en el centro de la escena,
30
00:01:22,480 --> 00:01:26,160
las oriento al igual que el piso,
para que no queden torcidas,
31
00:01:26,240 --> 00:01:28,280
y las muevo hacia la derecha,
32
00:01:28,360 --> 00:01:29,560
un número aleatorio,
33
00:01:29,640 --> 00:01:31,240
que va entre menos cinco
y cinco metros,
34
00:01:31,320 --> 00:01:33,800
y lo mismo hago hacia adelante.
¿Por qué lo hago así?
35
00:01:33,880 --> 00:01:38,360
Porque, si el valor que me sale
al elegir un número aleatorio
36
00:01:38,440 --> 00:01:41,280
en este caso es, por ejemplo,
menos dos metros hacia adelante,
37
00:01:41,360 --> 00:01:44,320
es lo mismo
que moverse dos metros hacia atrás.
38
00:01:44,680 --> 00:01:47,280
Bien, listo.
Ya con esto las coloqué al azar.
39
00:01:47,360 --> 00:01:48,800
Podría tener un problema, ¿no?,
40
00:01:48,880 --> 00:01:51,760
porque, en realidad,
yo en mi escena tengo las casas
41
00:01:51,840 --> 00:01:53,600
y no estaría bueno
que las galletitas
42
00:01:53,680 --> 00:01:56,520
queden adentro de las casas,
de los obstáculos
43
00:01:56,600 --> 00:01:58,400
porque no serían visibles.
44
00:01:58,480 --> 00:02:00,560
Entonces, ¿cómo puedo hacer eso?
45
00:02:00,760 --> 00:02:03,560
Bueno, tengo una idea,
a ver qué les parece.
46
00:02:03,640 --> 00:02:06,400
Yo podría usar un "Si/Sino",
47
00:02:08,200 --> 00:02:09,560
poner cualquier condición
48
00:02:09,640 --> 00:02:11,160
y acá utilizar--
49
00:02:11,240 --> 00:02:13,320
¿Se acuerdan de la función
que yo había creado antes
50
00:02:13,400 --> 00:02:16,120
para ver si dos cosas se chocaban?
51
00:02:16,200 --> 00:02:18,280
Yo podría preguntarme, por ejemplo,
52
00:02:18,360 --> 00:02:22,800
si la galletita que estoy analizando
53
00:02:23,040 --> 00:02:25,120
se choca contra el obstáculo, ¿sí?
54
00:02:25,400 --> 00:02:27,520
Ahora bien, si se choca,
55
00:02:27,880 --> 00:02:30,280
¿qué tengo que hacer?
Tengo que, por ejemplo,
56
00:02:30,360 --> 00:02:32,840
elegir otro número al azar
y que se mueva un poquito más.
57
00:02:32,920 --> 00:02:33,960
¿Está bien?
58
00:02:34,040 --> 00:02:37,000
Entonces, ¿qué hago?
Copio estas instrucciones,
59
00:02:38,040 --> 00:02:40,160
por ejemplo, copio esta instrucción
60
00:02:40,240 --> 00:02:41,360
y-- Bueno,
61
00:02:41,440 --> 00:02:44,400
acá se me fue el elemento,
vamos a seleccionarlo.
62
00:02:45,200 --> 00:02:48,360
¿Y lo pongo acá adentro de nuevo?
63
00:02:49,760 --> 00:02:52,520
Ajá, pero y, si hago eso,
64
00:02:52,600 --> 00:02:54,760
¿no corro el riesgo de que,
al moverse al azar,
65
00:02:54,840 --> 00:02:57,800
nuevamente esté chocando
contra otro obstáculo?
66
00:02:58,200 --> 00:03:00,000
Sí, ¿no? Podría pasar.
67
00:03:00,080 --> 00:03:01,640
¿Y qué hago en ese caso?
68
00:03:01,720 --> 00:03:04,040
¿Pongo otro "Si/Sino" acá adelante?
69
00:03:04,400 --> 00:03:06,840
Mmm,
no parece la solución más apropiada.
70
00:03:06,920 --> 00:03:09,200
En realidad, lo que yo debería hacer
71
00:03:09,280 --> 00:03:11,560
es hacer
que las galletitas se muevan
72
00:03:11,640 --> 00:03:13,960
hasta que queden
libres de obstáculos.
73
00:03:14,040 --> 00:03:15,080
¿Cómo voy a hacer eso?
74
00:03:15,160 --> 00:03:17,800
Lo voy a hacer con la ayuda
de una variable "booleana"
75
00:03:17,880 --> 00:03:19,400
y el "mientras".
76
00:03:19,480 --> 00:03:20,840
¿Se acuerdan del "mientras"?
77
00:03:20,920 --> 00:03:23,800
El "mientras" era esta construcción
que teníamos acá,
78
00:03:23,880 --> 00:03:28,520
que nos servía para repetir
una serie de instrucciones,
79
00:03:29,520 --> 00:03:31,000
pero, a diferencia del "Bucle",
80
00:03:31,080 --> 00:03:33,360
la repetíamos
mientras valiese una condición.
81
00:03:33,440 --> 00:03:35,800
Entonces, miren la variable
"booleana" que voy a crear.
82
00:03:35,880 --> 00:03:37,320
Se va a llamar
83
00:03:37,400 --> 00:03:43,240
"galletita está mal ubicada".
84
00:03:45,400 --> 00:03:48,840
Entonces,
cuando comienzo, al principio,
85
00:03:48,920 --> 00:03:50,720
cuando tengo cada galletita,
86
00:03:50,800 --> 00:03:54,400
si la galletita está mal ubicada
87
00:03:54,480 --> 00:03:56,840
porque todavía no la ubiqué
en su posición correcta,
88
00:03:56,920 --> 00:03:58,760
dentro del "while" que voy a hacer,
89
00:03:58,840 --> 00:04:03,160
la voy a poner en los lugares
donde la tengo que poner,
90
00:04:03,240 --> 00:04:05,280
pero ¿cuándo voy a repetir esto?
91
00:04:05,360 --> 00:04:08,360
¿Este ciclo –porque así se llama,
se llama "ciclo"–
92
00:04:08,440 --> 00:04:11,280
cuándo lo voy a repetir?
Bueno, lo voy a repetir
93
00:04:11,360 --> 00:04:12,800
mientras la galletita
94
00:04:12,880 --> 00:04:14,600
esté mal ubicada,
95
00:04:14,880 --> 00:04:16,880
pero, claro, así, de esta manera,
96
00:04:17,280 --> 00:04:19,520
el valor de la variable
no cambia nunca
97
00:04:19,600 --> 00:04:21,040
adentro de este ciclo.
98
00:04:21,120 --> 00:04:23,680
Entonces,
nunca va a dejar de ejecutarlo.
99
00:04:23,760 --> 00:04:26,520
Para eso, voy a tomar la variable,
100
00:04:26,600 --> 00:04:29,400
la voy a asignar adentro del ciclo,
101
00:04:29,480 --> 00:04:30,840
pero ¿qué le voy a poner?
102
00:04:30,920 --> 00:04:32,640
Bueno, el valor que le voy a poner,
103
00:04:32,720 --> 00:04:36,120
en realidad, es, una y otra vez,
dentro del ciclo,
104
00:04:36,200 --> 00:04:40,720
evaluar si se está chocando
contra algún obstáculo. ¿Está bien?
105
00:04:40,800 --> 00:04:42,400
Entonces, fíjense cómo quedó.
106
00:04:42,480 --> 00:04:45,800
Vamos a tirar este "Si/Sino"
que no nos sirve.
107
00:04:46,320 --> 00:04:50,080
Entonces, originalmente,
la galletita está mal ubicada
108
00:04:50,160 --> 00:04:52,360
porque está
en el centro de la escena
109
00:04:52,440 --> 00:04:54,160
y no queremos que esté ahí.
110
00:04:54,240 --> 00:04:56,800
Entonces, acá dice: "Mientras
la galletita esté mal ubicada",
111
00:04:56,880 --> 00:04:59,920
hacer esto".
Como está mal ubicada, entramos.
112
00:05:00,200 --> 00:05:02,960
La mueve hacia la derecha,
la mueve hacia adelante--
113
00:05:03,040 --> 00:05:05,040
Uy, esto nos quedó mal,
vamos a cambiarlo
114
00:05:05,120 --> 00:05:07,880
para ir hacia adelante, perfecto.
115
00:05:07,960 --> 00:05:09,680
Entonces,
la mueve hacia la derecha,
116
00:05:09,760 --> 00:05:12,080
la mueve hacia adelante
la cantidad que haga falta
117
00:05:12,160 --> 00:05:14,400
y se fija si quedó bien ubicada.
118
00:05:14,480 --> 00:05:15,960
Mejor dicho, si choca contra algo.
119
00:05:16,040 --> 00:05:17,240
Si choca contra algo,
120
00:05:17,320 --> 00:05:19,800
si esta función
devuelve "verdadero",
121
00:05:19,880 --> 00:05:22,200
va a ser verdadero
que sigue estando mal ubicada.
122
00:05:22,280 --> 00:05:24,360
Entonces, lo va a hacer una vez más.
123
00:05:24,680 --> 00:05:27,440
La va a poner para la derecha
una cantidad de metros,
124
00:05:27,520 --> 00:05:30,440
para adelante otra cantidad
y va a volver a evaluar.
125
00:05:30,520 --> 00:05:33,560
Si, en algún momento,
"choca contra" algo, da "falso".
126
00:05:33,640 --> 00:05:35,880
Entonces,
la variable esta va a ser falsa
127
00:05:35,960 --> 00:05:38,360
y este ciclo,
cuando vuelva a evaluarlo,
128
00:05:38,440 --> 00:05:42,000
ya no va a ser más cierto
que está mal ubicada la galletita
129
00:05:42,080 --> 00:05:44,520
y, por ende,
ya no lo va a volver a ejecutar.
130
00:05:44,600 --> 00:05:47,280
Con lo cual, va a pasar a ejecutar
la otra galletita
131
00:05:47,360 --> 00:05:49,840
y, así, van a quedan en el lugar,
132
00:05:49,920 --> 00:05:53,240
cada una en un lugar
que no es adentro de una casa.
133
00:05:53,320 --> 00:05:54,360
Bien. Veámoslo en acción.
134
00:05:54,440 --> 00:05:56,520
Dije que va a pasar a la otra,
pero, en realidad, este es un ciclo
135
00:05:56,600 --> 00:05:58,320
que las hace todas juntas,
pero la idea es la misma.
136
00:05:58,400 --> 00:06:01,040
Fíjense, todas se corren, perfecto.
137
00:06:01,120 --> 00:06:03,640
Ninguna quedó adentro de la casa,
genial.
138
00:06:04,040 --> 00:06:06,760
Así como tenemos
el método que ubica las galletitas,
139
00:06:06,840 --> 00:06:09,800
tenemos otro método
que se llama "comer galletitas".
140
00:06:09,880 --> 00:06:12,240
No le vamos a prestar
mucha atención a este método.
141
00:06:12,320 --> 00:06:13,480
Lo único que les voy a decir
142
00:06:13,560 --> 00:06:17,000
es que lo ejecuto
cuando el avance termina de hacerse.
143
00:06:17,080 --> 00:06:20,040
Es decir, cuando se termina
de presionar la tecla que avanza,
144
00:06:20,120 --> 00:06:22,240
me fijo
si hay que comer galletitas.
145
00:06:22,320 --> 00:06:23,360
¿Qué es comer galletitas?
146
00:06:23,440 --> 00:06:26,560
Es fijarse si el personaje actual
está cerca
147
00:06:26,640 --> 00:06:29,680
de una manera muy similar
a la que la hicimos acá
148
00:06:29,760 --> 00:06:32,320
y, si es así,
incrementar el puntaje.
149
00:06:32,400 --> 00:06:34,080
Esto no lo voy a comentar ahora.
150
00:06:34,160 --> 00:06:35,760
Ustedes se pueden bajar
este Mundo Alice
151
00:06:35,840 --> 00:06:37,080
y lo pueden analizar
152
00:06:37,160 --> 00:06:39,520
porque
lo que les quiero mostrar ahora
153
00:06:39,600 --> 00:06:42,360
es un poco
cómo funciona el cambio de turno.
154
00:06:42,440 --> 00:06:43,600
Fíjense.
155
00:06:43,680 --> 00:06:46,320
Cuando el mundo comienza,
156
00:06:46,600 --> 00:06:50,480
hacemos algunas cosas, digamos,
llamémoslas "de inicialización",
157
00:06:50,560 --> 00:06:51,960
como ubicar a las galletitas,
158
00:06:52,040 --> 00:06:54,680
poner a la cámara
en el punto apropiado
159
00:06:54,760 --> 00:06:58,640
y tengo un texto 3D,
que es el estatus, ¿está bien?,
160
00:06:58,840 --> 00:07:01,880
que lo voy a poner en su posición
correcta de la pantalla
161
00:07:01,960 --> 00:07:04,240
y le voy a poner como vehículo
la cámara
162
00:07:04,320 --> 00:07:07,120
para que esté fijo siempre
delante de la pantalla.
163
00:07:07,200 --> 00:07:10,800
Y pongo-- Tengo dos jugadores.
164
00:07:10,880 --> 00:07:12,840
Voy a decir que el índice
del jugador actual
165
00:07:12,920 --> 00:07:14,440
es el jugador número uno.
166
00:07:14,520 --> 00:07:18,040
Y hay otra variable "booleana",
que se llama "estamos jugando",
167
00:07:18,120 --> 00:07:19,760
que la pongo en "verdadero".
168
00:07:19,840 --> 00:07:22,640
Hablando de variables,
fíjense una cosa.
169
00:07:22,720 --> 00:07:24,280
Si yo me voy a ver
170
00:07:24,360 --> 00:07:26,480
las variables
que estoy usando en este juego,
171
00:07:26,560 --> 00:07:28,320
van a ver que el juego involucra
172
00:07:28,400 --> 00:07:31,640
una cantidad importante
de variables.
173
00:07:31,720 --> 00:07:34,680
Ya las vamos a ir viendo de a poco.
Vamos a ir analizando algunas.
174
00:07:34,760 --> 00:07:36,680
Por ejemplo,
tengo el personaje actual,
175
00:07:36,760 --> 00:07:39,720
tengo que saber si el personaje
actual es el cero o el uno.
176
00:07:39,800 --> 00:07:41,840
Me voy a fijar
en qué número de turno estoy
177
00:07:41,920 --> 00:07:45,120
y fíjense que hay otras variables
que las escribí en mayúscula.
178
00:07:45,200 --> 00:07:46,840
¿Por qué las escribí en mayúscula?
179
00:07:46,920 --> 00:07:48,160
Porque representan valores
180
00:07:48,240 --> 00:07:50,760
que, en realidad, más que variables
son constantes,
181
00:07:50,840 --> 00:07:53,640
cosas que no van a cambiar,
pero que a mí me sirve
182
00:07:53,720 --> 00:07:56,240
tenerlas representadas
de alguna manera.
183
00:07:56,320 --> 00:07:57,640
Por ejemplo,
la cantidad de jugadores.
184
00:07:57,720 --> 00:07:59,640
Este es un juego
para dos jugadores.
185
00:07:59,720 --> 00:08:02,400
Entonces, esta variable
va a tener siempre dos.
186
00:08:03,200 --> 00:08:04,680
Lo mismo
que la duración de un turno,
187
00:08:04,760 --> 00:08:06,080
que va a ser de diez segundos,
188
00:08:06,160 --> 00:08:08,160
o la máxima cantidad de turnos,
que es de diez.
189
00:08:08,240 --> 00:08:09,560
Y ustedes se preguntarán:
190
00:08:09,640 --> 00:08:11,280
"Pero, si no lo vas a cambiar,
191
00:08:11,360 --> 00:08:13,520
¿por qué no usás el número
directamente?".
192
00:08:13,600 --> 00:08:17,040
Bueno, porque el código
se hace mucho más fácil de leer
193
00:08:17,120 --> 00:08:19,760
si en algún lugar encuentro
la palabra "match turnos"
194
00:08:19,840 --> 00:08:23,160
que un número diez perdido
que no sé para qué sirve.
195
00:08:23,320 --> 00:08:24,880
Además, esto me permite que,
196
00:08:24,960 --> 00:08:26,640
si quiero cambiar
la cantidad de turnos,
197
00:08:26,720 --> 00:08:28,400
lo cambio en un solo lugar
198
00:08:28,480 --> 00:08:29,920
y ya modifiqué el juego
199
00:08:30,000 --> 00:08:33,880
sin tener que andar rastreando
a lo largo de todo el Mundo Alice,
200
00:08:33,960 --> 00:08:36,920
en todos los lugares donde puede
quedar un valor distinto.
201
00:08:37,000 --> 00:08:39,800
Bien. Entonces, analicemos ahora
202
00:08:39,880 --> 00:08:42,680
el método que sirve
para cambiar el turno. Fíjense.
203
00:08:42,760 --> 00:08:46,000
Yo lo llamo, inicialmente,
cuando empiezo,
204
00:08:46,080 --> 00:08:48,280
pero también lo asocié
205
00:08:48,600 --> 00:08:49,760
–por acá lo tengo–
206
00:08:49,840 --> 00:08:52,320
con la tecla "Enter".
207
00:08:52,400 --> 00:08:53,640
Cuando se presiona la tecla "Enter",
208
00:08:53,720 --> 00:08:56,160
también llamo al método
"cambiar de turno".
209
00:08:56,240 --> 00:08:58,880
Entonces, ¿qué hace ese método?
210
00:08:58,960 --> 00:09:01,680
Bueno, fíjense
que es bastante sencillo.
211
00:09:02,120 --> 00:09:03,880
Por un lado, incrementa
212
00:09:03,960 --> 00:09:06,280
la variable que contiene
el número de turno en uno
213
00:09:06,360 --> 00:09:08,480
porque ahora
estamos en un turno más.
214
00:09:08,560 --> 00:09:11,440
Y acá comparo con la constante
que había definido antes.
215
00:09:11,520 --> 00:09:13,800
Si llegué
a la cantidad máxima de turnos,
216
00:09:13,880 --> 00:09:16,040
ya no es cierto
que estamos jugando.
217
00:09:16,120 --> 00:09:17,760
Entonces, pongo en "falso"
esta variable
218
00:09:17,840 --> 00:09:20,000
y llamo a otro método,
que es muy sencillo,
219
00:09:20,080 --> 00:09:22,000
que simplemente muestra
quién es el ganador.
220
00:09:22,080 --> 00:09:23,600
No lo vamos a ver en cámara.
221
00:09:23,680 --> 00:09:26,640
La parte siguiente
es un poquito más interesante
222
00:09:26,720 --> 00:09:28,720
porque,
si todavía no se terminó el juego,
223
00:09:28,800 --> 00:09:30,800
es decir,
si no estoy en el último turno,
224
00:09:30,880 --> 00:09:32,680
tengo que cambiar de jugador.
225
00:09:32,760 --> 00:09:35,040
Entonces, para eso,
si el actual era el cero,
226
00:09:35,120 --> 00:09:37,000
ahora le toca al uno y, si no,
227
00:09:37,400 --> 00:09:39,880
si el actual no era el cero,
entonces, era el uno,
228
00:09:39,960 --> 00:09:42,040
ahora le va a tocar al otro.
229
00:09:42,320 --> 00:09:46,160
Me fijo ese índice
a cuál de los personajes corresponde
230
00:09:46,240 --> 00:09:48,080
y acá tengo un método
231
00:09:48,160 --> 00:09:50,680
que hace que la cámara siga
232
00:09:50,760 --> 00:09:54,880
al que determino
como personaje actual, ¿sí?
233
00:09:55,320 --> 00:09:57,280
Bien. También tenemos este método,
234
00:09:57,360 --> 00:09:59,360
que se llama
"traer cambio de turno",
235
00:09:59,440 --> 00:10:02,080
que simplemente pone un cartel
y lo hace girar en pantalla.
236
00:10:02,160 --> 00:10:04,280
Como ven, nada del otro mundo.
237
00:10:05,200 --> 00:10:09,280
Con esto, ya casi
tenemos listo nuestro juego.
238
00:10:09,360 --> 00:10:12,520
Ya vimos cómo colocar
las galletitas al azar
239
00:10:12,600 --> 00:10:14,720
y cómo hacer
que cambien los jugadores.
240
00:10:14,800 --> 00:10:17,360
Hay dos cosas acá
que suceden con el tiempo.
241
00:10:17,440 --> 00:10:19,040
Fíjense que acá tengo
242
00:10:19,120 --> 00:10:20,760
una cantidad de tiempo
243
00:10:21,040 --> 00:10:22,520
que se va disminuyendo
244
00:10:22,600 --> 00:10:25,000
y, no solo disminuye,
sino que me lo muestra en pantalla.
245
00:10:25,080 --> 00:10:27,240
Y además,
cuando ese tiempo llega a cero,
246
00:10:27,320 --> 00:10:28,440
fuerza un cambio de turno
247
00:10:28,520 --> 00:10:30,320
y hace que le toque
al jugador siguiente.
248
00:10:30,400 --> 00:10:32,280
Eso tiene que ver
con el manejo del tiempo
249
00:10:32,360 --> 00:10:34,920
y lo vemos en la clase siguiente.
Hasta luego.
250
00:10:35,000 --> 00:10:41,000
[Música de cierre]