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]