1 00:00:00,200 --> 00:00:06,200 [Música de presentación] 2 00:00:09,120 --> 00:00:11,040 (Profesor) Hola. En la clase de hoy, 3 00:00:11,120 --> 00:00:14,160 vamos a ver un juego bastante completo. 4 00:00:14,280 --> 00:00:15,360 Fíjense. 5 00:00:15,440 --> 00:00:17,920 En un escenario posapocalíptico, 6 00:00:18,000 --> 00:00:22,000 tengo a mis amigos, el zombi y el esqueleto, 7 00:00:22,080 --> 00:00:23,560 que compiten por comer 8 00:00:23,640 --> 00:00:26,000 una de las pocas galletitas que quedan. 9 00:00:26,080 --> 00:00:28,480 Con el teclado hago que avancen. 10 00:00:28,560 --> 00:00:32,480 No sé si notan, tengo una cantidad de tiempo que se va reduciendo. 11 00:00:32,560 --> 00:00:35,000 Cuando llego a cero, cambia el turno, 12 00:00:35,080 --> 00:00:36,480 le toca al otro. 13 00:00:36,560 --> 00:00:38,960 A medida que me como las galletitas, 14 00:00:39,040 --> 00:00:40,480 que llego hacia ellas, 15 00:00:40,560 --> 00:00:43,800 el puntaje se incrementa, como pueden ver acá. 16 00:00:43,880 --> 00:00:46,360 Ahí cambia el turno, le toca al otro. 17 00:00:46,440 --> 00:00:48,640 También, cuando me canse de usar el turno, 18 00:00:48,720 --> 00:00:50,320 puedo apretar "Enter" 19 00:00:50,400 --> 00:00:51,920 y le toca al otro jugador. 20 00:00:52,000 --> 00:00:53,280 Y, además, me preocupé 21 00:00:53,360 --> 00:00:55,480 porque no puede atravesar los objetos. 22 00:00:55,560 --> 00:00:56,680 No sé si lo notan. 23 00:00:56,760 --> 00:00:58,520 Como ven, es un juego bastante completo 24 00:00:58,600 --> 00:01:00,080 y lo que les voy a explicar hoy 25 00:01:00,160 --> 00:01:02,640 es cómo programar un juego como este 26 00:01:02,720 --> 00:01:05,200 y lo vamos a ver paso a paso. 27 00:01:05,440 --> 00:01:06,480 Empecemos. 28 00:01:06,560 --> 00:01:08,240 Hay varias cosas interesantes para contar. 29 00:01:08,320 --> 00:01:10,400 No las vamos a ver todas en la clase de hoy, 30 00:01:10,480 --> 00:01:12,800 pero empecemos por el principio. 31 00:01:13,200 --> 00:01:14,720 Lo primero que quiero que vean 32 00:01:14,800 --> 00:01:18,680 es que la parte de las teclas que controla a los personajes 33 00:01:18,760 --> 00:01:21,520 se parece a lo que veníamos haciendo en clases anteriores, 34 00:01:21,600 --> 00:01:23,320 donde hacíamos que una tecla-- 35 00:01:23,400 --> 00:01:25,960 mejor dicho, mientras se presiona una tecla, 36 00:01:26,040 --> 00:01:28,520 se llame a un método. 37 00:01:28,600 --> 00:01:30,040 Los métodos de "girar a la izquierda" 38 00:01:30,120 --> 00:01:32,640 y "girar a la derecha" no tienen nada interesante. 39 00:01:32,720 --> 00:01:34,720 Lo que es un poco más interesante es lo que sucede 40 00:01:34,800 --> 00:01:38,080 cuando presionamos las teclas para avanzar y para retroceder. 41 00:01:38,160 --> 00:01:42,840 Fíjense. En ambos casos, utilizo un "Mientras tal tecla es presionada" 42 00:01:42,920 --> 00:01:46,360 y una cosa que es muy llamativa es que, en ambos casos, 43 00:01:46,440 --> 00:01:49,120 en el "durante" voy a llamar al mismo método. 44 00:01:49,200 --> 00:01:50,320 Sí, al mismo método. 45 00:01:50,400 --> 00:01:52,160 Voy a llamar al método "avanzar", 46 00:01:52,240 --> 00:01:55,200 al que le paso como parámetro un personaje, 47 00:01:55,280 --> 00:01:56,360 acá pasa lo mismo, 48 00:01:56,440 --> 00:01:59,520 pero fíjense que también le paso una dirección. 49 00:01:59,600 --> 00:02:01,800 Claro, cuando se presiona la flecha hacia adelante, 50 00:02:01,880 --> 00:02:03,680 le digo que la dirección es hacia adelante 51 00:02:03,760 --> 00:02:05,360 y, cuando se presiona la otra flecha, 52 00:02:05,440 --> 00:02:07,320 le digo que la dirección es hacia atrás. 53 00:02:07,440 --> 00:02:09,960 Veamos cómo está programado ese método. 54 00:02:10,440 --> 00:02:12,480 Veamos el método "avanzar". 55 00:02:12,560 --> 00:02:17,360 Fíjense que acá estoy utilizando una función, 56 00:02:17,440 --> 00:02:19,960 pero no es una función que ya venga con Alice. 57 00:02:20,040 --> 00:02:22,640 Es una función que creé yo. 58 00:02:22,920 --> 00:02:24,520 ¿Y para qué la estoy usando? 59 00:02:24,600 --> 00:02:29,080 Bueno, resolví dentro de esa función todo lo que tiene que ver 60 00:02:29,160 --> 00:02:32,160 con si un personaje choca o no contra un obstáculo. 61 00:02:32,240 --> 00:02:34,720 ¿Cómo lo hice? Igual que lo habíamos hecho en las clases anteriores. 62 00:02:34,800 --> 00:02:36,480 Ahora, en seguida, lo vamos a analizar, 63 00:02:36,560 --> 00:02:39,800 pero presten atención al concepto. ¿Qué es una función? 64 00:02:39,880 --> 00:02:42,280 Una función es como un método 65 00:02:42,360 --> 00:02:43,800 –vamos a empezar a verla–, 66 00:02:43,880 --> 00:02:45,600 que toma algunos parámetros, 67 00:02:45,680 --> 00:02:48,240 hace unos cálculos y devuelve un resultado. 68 00:02:48,520 --> 00:02:50,000 Es muy parecida al método. 69 00:02:50,080 --> 00:02:53,120 La única diferencia es que nos devuelve un resultado. 70 00:02:53,200 --> 00:02:55,440 Esta es una función booleana, 71 00:02:55,520 --> 00:02:58,440 es decir, que nos devuelve algo que es verdadero o falso. 72 00:02:58,520 --> 00:03:01,040 Y fíjense que acá lo que le estamos diciendo es que si-- 73 00:03:01,120 --> 00:03:03,840 Estamos revisando toda nuestra lista de obstáculos, 74 00:03:03,920 --> 00:03:06,080 igual que lo habíamos hecho en la clase anterior, 75 00:03:06,160 --> 00:03:07,200 y, si el personaje 76 00:03:07,280 --> 00:03:09,960 está demasiado cerca de algunos de los obstáculos, 77 00:03:10,040 --> 00:03:11,760 devolvemos "true", "verdadero". 78 00:03:11,840 --> 00:03:14,240 Significa que se choca contra ese obstáculo. 79 00:03:14,320 --> 00:03:16,520 Si luego de recorrer toda la lista, 80 00:03:16,600 --> 00:03:20,960 determinamos que todavía no devolvimos nada, 81 00:03:21,040 --> 00:03:23,400 es decir, que el código se sigue ejecutando, 82 00:03:23,480 --> 00:03:25,920 bueno, es hora de devolver "falso" 83 00:03:26,000 --> 00:03:28,480 porque significa que el personaje 84 00:03:28,560 --> 00:03:30,760 no se choca contra ninguno de los obstáculos. 85 00:03:30,840 --> 00:03:32,880 Entonces, analicemos el código "avanzar". 86 00:03:32,960 --> 00:03:35,400 Fíjense que toda la decisión 87 00:03:35,480 --> 00:03:37,000 de si el personaje puede avanzar o no 88 00:03:37,080 --> 00:03:39,360 se resume a llamar a esta función. 89 00:03:39,440 --> 00:03:41,200 Es decir, preguntamos: 90 00:03:41,280 --> 00:03:43,880 "¿Choca contra algún obstáculo nuestro personaje?". 91 00:03:43,960 --> 00:03:47,400 Pero, claro, si choca, es que no puede avanzar. 92 00:03:47,560 --> 00:03:50,800 Para eso, negamos la función, ¿sí? 93 00:03:50,880 --> 00:03:53,560 Negamos el resultado de la función, usamos el "no" 94 00:03:53,640 --> 00:03:57,160 y eso lo hicimos utilizando la parte lógica 95 00:03:57,240 --> 00:03:59,280 y eligiendo la opción "no". 96 00:03:59,880 --> 00:04:03,520 ¿Está bien? Entonces, el personaje solo puede avanzar 97 00:04:03,600 --> 00:04:05,760 cuando no choca contra ningún obstáculo. 98 00:04:05,840 --> 00:04:08,560 En ese caso, se mueve hacia adelante, 99 00:04:08,640 --> 00:04:11,480 pero, en realidad, fíjense que acá no dice "hacia adelante". 100 00:04:11,560 --> 00:04:14,280 Dice que se mueve en una dirección. 101 00:04:14,360 --> 00:04:15,480 ¿Qué es la dirección? 102 00:04:15,560 --> 00:04:18,080 Bueno, notemos que nuestro parámetro, 103 00:04:18,160 --> 00:04:19,360 que nuestro método, perdón, 104 00:04:19,440 --> 00:04:23,160 tenía un parámetro de tipo "Objeto" y otro de tipo "Dirección". Miren. 105 00:04:23,240 --> 00:04:24,680 Este aparece acá 106 00:04:24,760 --> 00:04:29,440 cuando selecciono la lista posible de tipos de los parámetros 107 00:04:29,520 --> 00:04:31,200 puedo elegir tipo "Dirección". 108 00:04:31,280 --> 00:04:33,800 Y eso es lo que a mí me permitió, a la hora de llamarlo, 109 00:04:33,880 --> 00:04:37,680 decir que se mueva hacia adelante cuando aprieto esta tecla 110 00:04:37,760 --> 00:04:40,240 y hacia atrás cuando presiono esta otra. 111 00:04:40,320 --> 00:04:41,480 ¿Y por qué hago eso? 112 00:04:41,560 --> 00:04:44,360 Bueno, porque, si no, el código sería exactamente igual 113 00:04:44,440 --> 00:04:46,600 tanto para avanzar como para retroceder, 114 00:04:46,680 --> 00:04:48,800 excepto por muy pequeños detalles. 115 00:04:48,880 --> 00:04:50,960 ¿Para qué voy a escribir el código duplicado? 116 00:04:51,040 --> 00:04:52,560 Si lo tuviese duplicado, 117 00:04:52,640 --> 00:04:55,520 cada error que encontrase lo tendría que corregir dos veces 118 00:04:55,600 --> 00:04:57,880 y cada mejora que quisiese hacer 119 00:04:57,960 --> 00:05:02,120 la tendría que mejorar dos veces. Así, tengo todo en un único lugar. 120 00:05:02,200 --> 00:05:04,240 Entonces, le digo que se mueva 121 00:05:04,320 --> 00:05:06,280 de acuerdo a la dirección que es parámetro, 122 00:05:06,360 --> 00:05:08,960 si puede avanzar, y, si no puede avanzar-- 123 00:05:09,040 --> 00:05:11,760 Claro, yo tengo acá otra variable ya preparada, 124 00:05:11,840 --> 00:05:15,000 que es la dirección del rebote que empieza haciendo hacia atrás, 125 00:05:15,080 --> 00:05:17,000 pero, si la dirección original 126 00:05:17,080 --> 00:05:19,120 en la que yo me tenía que mover era hacia atrás, 127 00:05:19,200 --> 00:05:20,680 el rebote es hacia adelante. 128 00:05:20,760 --> 00:05:22,480 Entonces, eso es lo que hago 129 00:05:22,560 --> 00:05:24,480 y, una vez que determiné eso, 130 00:05:24,560 --> 00:05:27,120 como el personaje no podía avanzar, 131 00:05:27,200 --> 00:05:29,800 lo hago moverse un poquito para atrás 132 00:05:29,880 --> 00:05:31,360 en la dirección del rebote. 133 00:05:31,440 --> 00:05:34,720 ¿Se entiende cómo funciona esto? Bien. 134 00:05:34,800 --> 00:05:37,720 En las próximas clases, vamos a preocuparnos 135 00:05:37,800 --> 00:05:40,480 por cómo colocar las galletitas al azar 136 00:05:40,560 --> 00:05:42,960 y cómo hacer que los personajes las coman. 137 00:05:43,040 --> 00:05:45,920 Vamos a ir viendo, uno a uno, todos los aspectos del juego. 138 00:05:46,000 --> 00:05:48,520 Los espero en la próxima clase. Nos vemos. 139 00:05:48,600 --> 00:05:54,600 [Música de cierre]