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]