20250311 GUI_Ejer2_ArranqueAhorcado - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Vale, nos vamos a la pestaña diseño, que mal se me ve aquí todo, así mejor, vale, y ahora ya, vamos a trabajar solamente con un panel, el panel por defecto, pues este mismo, botón para arrancar el juego, pues venga, nos vamos a componentes, botón para arrancar, bueno, primero que no se nos olvide en el panel ponerle como gestor de ubicación absoluto.
00:00:03
si tú quieres colocar
00:00:31
los componentes donde te dé la gana
00:00:35
y darles el tamaño que tú quieras, sí
00:00:37
porque si pones otro gestor de ubicación
00:00:38
imagínate que pones el de grid
00:00:40
te va a obligar
00:00:42
a colocarlos en una
00:00:44
posición de rejilla, no te va a dejar en cualquier
00:00:47
sitio, ves
00:00:49
te obliga aquí porque es la primera posición de la rejilla
00:00:49
entonces tú no quieres ahí
00:00:53
entonces, absoluto
00:00:54
vale, pues entonces
00:00:57
como ya lo tenemos absoluto, queremos colocarlo a mano
00:00:59
venga, botoncito de jugar, pues el botoncito
00:01:01
de jugar
00:01:03
en medio
00:01:03
vale
00:01:05
el nombre de variable que le ha dado es feísimo
00:01:09
como veis a la izquierda
00:01:13
le ha dado como nombre de variable
00:01:14
btn new button, no nos gusta nada
00:01:16
vamos a cambiárselo a
00:01:18
botón jugar, por ejemplo
00:01:20
y el texto que ha puesto arriba
00:01:22
por defecto tampoco nos gusta
00:01:27
pues vamos a cambiárselo aquí en propiedades
00:01:28
a jugar
00:01:31
bueno, pues este es el botón de jugar
00:01:33
que no nos gusta el tipo de letra
00:01:39
no nos gusta el borde
00:01:41
pues se lo cambiaríamos
00:01:42
vale
00:01:45
¿qué más tiene que tener esto?
00:01:47
pues cuando se dé a jugar, cambiará jugando
00:01:51
ahí no aparecerá, pero nos tiene que dar
00:01:53
la opción de meter el número
00:01:55
para adivinarlo, pues el número para
00:01:57
adivinarlo en un área de texto
00:01:59
Pues venga, en un área de texto, el número para adivinar
00:02:00
Entonces vamos a ponerle una etiqueta para que sepa que ahí tiene que meter el número
00:02:10
Y a esta etiqueta le ponemos el texto
00:02:14
Introduzca número
00:02:19
Introduzca número
00:02:26
A ver, se me ha colado una
00:02:36
No me deja ir a la derecha para cambiar eso
00:02:43
Ahí, introduzcan
00:02:56
Vale, ya está
00:02:58
Entonces el usuario irá metiendo numeritos aquí
00:03:02
Cuando acierte
00:03:07
De alguna manera le tienen que avisar
00:03:09
Entonces, en principio
00:03:11
Con lo que hemos visto, pues pondríamos una etiqueta
00:03:13
Para que avisara, has acertado
00:03:16
Pero en lugar de con una etiqueta
00:03:17
Lo vamos a hacer con
00:03:19
Con una ventanita emergente
00:03:20
Que quede más bonito, has terminado
00:03:23
Entonces no ponemos la etiqueta
00:03:25
¿cómo haremos la ventana emergente?
00:03:27
pues la ventana emergente no es un componente
00:03:29
que se meta aquí, porque la ventana emergente
00:03:31
es algo que se va a abrir
00:03:33
solamente en un momento concreto
00:03:34
¿es más fácil que esa parte?
00:03:36
no, es más fácil que eso
00:03:39
la posibilidad de abrir una, no, porque
00:03:40
si es otro JFrame estaría
00:03:43
o sea, la aplicación tiene un único
00:03:45
JFrame y a ese se asocia todo lo demás
00:03:47
entonces, se le puede asociar una ventana
00:03:49
emergente, no todas las ventanas tienen que ser
00:03:51
frame, pueden estar, puede ser
00:03:53
un jdialog, un j no sé qué, que están asociados
00:03:55
a ese frame, pero lo que pasa es que
00:03:57
nosotros queremos que aparezca
00:03:59
solo en un momento concreto
00:04:01
que es cuando ha acertado
00:04:03
cuando se verifica que ha acertado
00:04:05
se podría poner una ventana que esté siempre ahí
00:04:06
se haga visible y no, pero
00:04:11
hay una forma sencilla de hacerlo, que es
00:04:12
en el momento en el que se verifique la condición
00:04:14
de acierto, se instancia la
00:04:17
ventana y ya está
00:04:19
entonces como lo vamos a hacer así, que es más sencillo
00:04:20
pues aquí ya no hay más componentes que poner
00:04:23
¿Vale? Entonces como no hay más componentes que poner
00:04:25
Pues se ha quedado así solamente
00:04:28
Jugar, se pondrá jugando
00:04:30
Introduzca número, enter, enter, enter
00:04:31
Y nos irá diciendo
00:04:34
Si no, si no
00:04:36
Y cuando se ha acertado, pues avisa
00:04:37
¡Hala! Como ya no vamos a poner más en la interfaz gráfica
00:04:39
Pues
00:04:43
Ahora ya vamos a hacer el
00:04:44
Comportamiento
00:04:46
¿Qué necesita
00:04:46
Tener respuesta?
00:04:49
El hacer clic al botón jugar
00:04:52
necesita respuesta, porque cuando hagamos clic
00:04:53
al botón jugar, se tiene que crear
00:04:55
un número aleatorio y además
00:04:58
tiene que cambiar el texto del botón
00:04:59
por ejemplo
00:05:01
se puede poner este
00:05:07
set visible aquí
00:05:09
esto que esté en
00:05:11
false y esta
00:05:16
también
00:05:17
que esté en false
00:05:18
entonces se le habilite, se le haga visible
00:05:20
después de haber dado a jugar
00:05:23
entonces inicialmente esta interfaz
00:05:25
bueno, no, la ha puesto
00:05:27
habilitada, no visible
00:05:29
pero bueno, lo podemos dejar así, para que vea el usuario
00:05:30
que está inhabilitada, que no puede introducir número
00:05:33
hasta que no estemos jugando
00:05:35
vale, entonces esto
00:05:36
efectivamente si nos vamos a la pestaña
00:05:39
de fuente
00:05:41
pues aquí al text fill le ha puesto
00:05:42
un
00:05:45
false
00:05:46
entonces no tenemos que buscar el método
00:05:47
que tampoco sería tan complicado
00:05:50
buscar el método
00:05:52
ya con el window builder lo tenemos más fácil
00:05:53
nos viene aquí esto
00:05:55
a recordar que el nombre de variable
00:05:58
de este campo de texto es muy feo
00:05:59
en este caso que es una aplicación tan pequeña
00:06:02
pues no importa
00:06:03
pero en una aplicación más grande sería un rollo
00:06:04
entonces se lo podemos cambiar
00:06:07
y en lugar de que se llame text field
00:06:08
eso
00:06:10
número, es el campo para meter el número
00:06:11
Número del usuario, ya está
00:06:16
Número usuario, yo que sé
00:06:18
Lo que fuera, vale
00:06:20
Bueno, pues entonces
00:06:22
Evento del botón
00:06:24
El botón, ¿cómo va a responder?
00:06:26
Generando el número aleatorio
00:06:29
Cambiando el texto a jugando
00:06:30
Y habilitando estas dos cosas
00:06:32
Para que ya sean accesibles
00:06:35
Pues ahora ya que tenemos claro
00:06:36
Lo que tiene que tener que jugar, solamente eso
00:06:39
Pues venga, vamos a hacerle un
00:06:40
añadirle un
00:06:44
even handler
00:06:46
es que
00:06:47
igual está más abajo
00:07:08
y como tengo el
00:07:09
claro
00:07:10
no es que
00:07:12
donde está el even handler
00:07:16
aquí
00:07:18
que no, que no es
00:07:18
Mira, sí, claro
00:07:23
Pero yo es que lo quiero para el botón
00:07:26
¿Por qué no me sale para el botón at even hander?
00:07:27
¿En select?
00:07:30
Que es que me tendría que salir
00:07:32
De aquí directamente
00:07:33
¿Por qué no es un botón y ya por eso lo has aplicado?
00:07:34
No, es que
00:07:38
Pero si normalmente sale
00:07:39
Claro, de toda la vida ha salido
00:07:41
¿Por qué no me sale?
00:07:44
Está desconocido
00:07:46
Está desconocido
00:07:46
A lo mejor es por eso
00:07:48
Porque está desconocido
00:07:51
¿Y por qué está desconocido?
00:07:53
No sé
00:07:56
¿Por qué no sale?
00:07:56
Lo tengo guardado
00:08:02
Qué raro
00:08:04
Si me salen todos los...
00:08:06
A ver, no pasa nada
00:08:10
Lo hacemos a mano y ya ves tú qué problema
00:08:11
Pero no pasa nada
00:08:13
Vamos a hacerlo a mano
00:08:15
A ver, vámonos al botón
00:08:15
Venga
00:08:18
Botón jugar
00:08:20
setEnableTrue
00:08:21
que es por defecto la
00:08:24
y vamos a añadirle el listener
00:08:25
pues venga, a mi botón
00:08:27
jugar le vamos a añadir
00:08:30
una actionListener
00:08:32
que sea una nueva instancia
00:08:34
de este
00:08:36
una nueva instancia de este
00:08:38
entonces si va a ser una nueva instancia
00:08:42
de actionListener pues tenemos que
00:08:44
primero
00:08:46
Pero, new action, eh, pero espérate, aquí está pasando algo un poco raro, jbutton value, java x swing, espera, se lo voy a poner a mano a ver si se calla, public void,
00:08:48
Están pasando cosas extrañas
00:09:15
Bueno, espera
00:09:33
Espera, voy a importar a
00:09:34
Ah, ya sé lo que me está pasando
00:09:36
Eh
00:09:39
No, a ver
00:09:40
Esto, yo creo que me está pasando
00:09:47
Por como he hecho el proyecto
00:09:49
Porque como, vale
00:09:50
Es que, acción lisa
00:09:52
vale, entonces ahora ya me deja
00:10:01
importar
00:10:05
y ahora, acción
00:10:07
más simplemente dije acción performance
00:10:09
acción event
00:10:13
public void, acción performance
00:10:15
acción event, vale
00:10:17
entonces
00:10:18
yo juraría que lo he escrito igual
00:10:20
pero bueno
00:10:24
vale, ya está
00:10:24
bueno, me obliga a hacer la mano
00:10:28
pero
00:10:29
enseñanza
00:10:30
muchas veces
00:10:34
entonces, no confiemos siempre
00:10:38
en que, ah, implementame
00:10:41
el método, no sé qué, importame, no, tenemos
00:10:42
que saber dónde hacer las cosas
00:10:44
bueno, pues nada, lo hemos añadido
00:10:46
mucho a la clase, he tenido que hacer el import
00:10:49
a mano, del ActionListener
00:10:51
y ya está
00:10:53
vale
00:10:55
eh?
00:10:56
Vale, pues entonces, ¿qué necesitábamos hacer en el botón?
00:11:02
Ahora vamos a ver por curiosidad, a ver si aquí me apetece.
00:11:05
Fijaos que listo.
00:11:10
Ahora ya sí me aparece, ahora ya sí me aparece la Diven Handler y me aparece que aquí he añadido yo uno en la línea 55, que es este.
00:11:11
No sé por qué antes no me aparecía, pero no pasa nada.
00:11:22
Lo importante es que nosotros lo sabemos.
00:11:24
Sí, tendría igual algo que ver con eso.
00:11:28
Conclusión, menos mal que sabemos hacer las cosas
00:11:30
¿Seguro? A ver, dímela
00:11:34
Bueno
00:11:41
Vale, pues a ver, vámonos a lo que acabamos de hacer
00:11:44
Ahora, ¿qué queríamos hacer aquí?
00:11:48
Queríamos, primero, generar un número aleatorio
00:11:51
Entonces, uno hace aquí
00:11:54
Aleatorio
00:11:57
Vale
00:11:59
Para que el juego no nos estemos mil horas con él
00:12:03
Vamos a
00:12:06
Hacer un número aleatorio entre 1 y 10
00:12:08
Solo, ¿verdad?
00:12:09
¿No?
00:12:15
¿Os parece un aleatorio entre 1 y 10?
00:12:15
Sí, sería random
00:12:18
Es que lo confundo con
00:12:19
Con otros lenguajes
00:12:21
Que esto lo cambia cada vez
00:12:24
¿Eh?
00:12:25
Sí, para que esté entre 1 y 10
00:12:30
¿Vale? Entonces va a generar uno entre 1 y 10
00:12:32
Si lo pones dentro del paréntesis de math random
00:12:34
En plan, si pones
00:12:37
El int
00:12:39
No, no, dentro del math random del paréntesis
00:12:40
Creo que ahí te deja meter el argumento
00:12:42
¿Sí?
00:12:44
¿Puede ser?
00:12:44
Yo pensaba que lo ibas a entrar
00:12:47
Igual hay otro método
00:12:49
Pero no el random
00:12:51
¿Puedo ir aquí adentro?
00:12:51
A lo mejor
00:12:54
Pues
00:12:54
El método random
00:12:58
para math no se aplica para el argumento entero
00:13:02
entre 0 y
00:13:04
no, pero a ver, lo que me está diciendo es que el método random
00:13:05
no aplica
00:13:08
para el argumento entero
00:13:10
pero a ver, que math tiene muchos más métodos para generar
00:13:11
cosas aleatorias, igual tiene uno
00:13:14
que si
00:13:16
no lo sé
00:13:17
bueno
00:13:18
pero como le va a dejar, que no le puede dejar
00:13:21
es imposible
00:13:24
vale, entonces
00:13:25
¿qué más cosas había que hacer? poner el texto
00:13:28
del botón a jugando, bueno pues el botón
00:13:30
menos mal que le hemos puesto
00:13:32
ya un nombre que entendemos
00:13:34
con lo cual podemos
00:13:36
jugando
00:13:37
y estaría bien
00:13:41
a este botón
00:13:44
ahora ponerle en enable
00:13:46
da false, porque a este botón
00:13:48
no le queremos, el usuario ya no le tiene
00:13:49
que dar más mientras se está jugando
00:13:52
entonces pues aquí a lo mejor
00:13:53
tendría sentido hacer
00:13:55
Pues si quiere dejar de jugar
00:13:57
Entonces el juego te lo tendrían que haber explicado de la manera
00:14:02
Se hace otro botón de
00:14:04
Me voy o lo que sea
00:14:06
Vale, a jugando
00:14:07
False y se habilitan los otros
00:14:11
Componentes que estaban deshabilitados
00:14:14
Que eran la etiqueta, que a la etiqueta no la habíamos
00:14:15
Cambiado el nombre
00:14:18
La etiqueta, veis aquí
00:14:18
El botón
00:14:22
Está local al método, no está como propiedad
00:14:23
De la clase frame
00:14:26
está local, pero
00:14:27
al ser clase anónima y estar
00:14:29
aquí dentro, tiene acceso
00:14:31
porque la clase anónima
00:14:33
tiene como ventaja, como truquito
00:14:34
que está dentro del método
00:14:38
la clase interna nunca puede estar dentro
00:14:39
de un método, la clase interna está dentro de una clase
00:14:41
entonces al estar dentro de una clase
00:14:44
solamente puede acceder a las variables de la clase
00:14:45
pero la clase anónima
00:14:47
está dentro de un método, entonces puede
00:14:49
acceder a lo que está en el método
00:14:51
y botón jugar es accesible
00:14:53
desde aquí
00:14:55
no hemos tenido que sacarlo fuera
00:14:56
vale, que lo podríamos haber sacado
00:14:58
pero no ha hecho falta
00:15:02
vale, la etiqueta del texto
00:15:03
para habilitarla, pues la etiqueta
00:15:06
del texto se llama
00:15:08
un nombre raro
00:15:09
porque no se lo hemos cambiado
00:15:12
¿dónde está la etiqueta?
00:15:13
la etiqueta no se puede llamar text field
00:15:16
se llamará, es esta
00:15:18
label blue new label
00:15:19
pero claro, esta etiqueta
00:15:21
sí que está después
00:15:23
entonces esta no la va a reconocer
00:15:25
¿veis?
00:15:27
la etiqueta
00:15:29
el window builder
00:15:29
te la ha metido aquí después del botón
00:15:32
con lo cual si yo me hago este action list
00:15:35
como clase interna aquí dentro
00:15:37
el compilador me va a decir ¿quién es?
00:15:38
porque aún todavía
00:15:42
el compilador es una regla muy estricta
00:15:43
entonces dice
00:15:45
a ver esto no sé todavía lo que es
00:15:47
entonces no pasa nada pues todo esto
00:15:48
lo ponemos delante
00:15:50
y ya está
00:15:52
lo ponemos aquí, por ejemplo
00:15:54
vale
00:15:56
bueno, porque cuando nosotros
00:15:59
hemos construido, hemos ido, primero
00:16:02
hemos añadido el botón, luego hemos añadido no sé qué
00:16:03
vale, y ahora
00:16:06
aquí, el sedenable de este
00:16:08
pues a true
00:16:10
y el texto que se llamaba
00:16:11
número usuario
00:16:16
el sedenable
00:16:17
a true también
00:16:22
entonces, este
00:16:24
evento, esa parte la hace
00:16:28
y funciona, pues si
00:16:30
lo ponía jugando
00:16:32
vale
00:16:33
esa parte está, ahora
00:16:35
necesitamos el action performance
00:16:38
de este
00:16:40
porque cada vez que el usuario
00:16:42
meta un numerito, hay que verificar
00:16:43
si es el número correcto
00:16:46
sin avisarte si lo es
00:16:48
o si no lo es, y si además lo fuera
00:16:50
volver a reiniciar el juego
00:16:52
bueno, pues aquí si que me ofrece
00:16:54
el event handler
00:16:56
¿Qué evento queremos?
00:16:57
El por defecto del text fill
00:17:02
Que es darle al enter
00:17:04
Pues venga, action performer
00:17:04
¿Qué tenemos que hacer aquí?
00:17:07
Verificar
00:17:10
Coger el numerito
00:17:10
Que haya introducido el usuario
00:17:13
El numerito que haya introducido el usuario
00:17:15
Llamémosle en esta, en el área de texto
00:17:18
Que se llama número usuario
00:17:19
Pues entonces
00:17:21
Número usuario
00:17:23
vamos a coger el texto que tiene el metido
00:17:26
get test, vale
00:17:28
pero eso nos va a dar
00:17:30
el número en formato texto, en formato cadena
00:17:32
en formato cadena lo queremos
00:17:34
pero sabemos como convertir un numerito
00:17:35
que está en formato cadena
00:17:38
al integer que representa
00:17:39
que es esto
00:17:42
usuario
00:17:44
vale
00:17:51
lo ponemos
00:17:53
ahí abajo
00:17:54
ala, pues ya hemos leído el número
00:17:56
que ha metido el usuario
00:17:59
lo hemos cogido del text fill y lo hemos convertido en t
00:18:00
y ahora es cuando
00:18:03
tenemos que compararlo con el número aleatorio
00:18:05
que se generó
00:18:07
pero
00:18:08
tenemos un problema, ¿dónde está ese número aleatorio
00:18:10
que se generó?
00:18:13
está aquí
00:18:16
ese número apareció y cuando el evento
00:18:17
terminó desapareció, luego esto no tiene sentido
00:18:21
¿qué tenemos que hacer
00:18:23
con esta variable?
00:18:25
sacarla
00:18:29
a un ámbito de variable
00:18:29
que sea accesible tanto desde aquí
00:18:31
como desde aquí
00:18:33
entonces no será aquí donde lo tengamos que declarar
00:18:34
aquí le damos valor, eso sí
00:18:37
pero la declaración la hacemos
00:18:38
en el ámbito superior a esas dos
00:18:40
por ejemplo
00:18:42
aquí al principio del método
00:18:44
como variable de clase depende
00:18:47
de nuestras necesidades
00:18:49
uy, que tontería esa
00:18:51
vale, quería darle un valor cualquiera
00:18:59
para que no me dijeran
00:19:01
podría estar sin inicializar
00:19:03
Vale, entonces
00:19:04
Como las dos clases que acceden a él
00:19:06
Son internas
00:19:09
A este método
00:19:10
Son anónimas y que están dentro
00:19:11
Podríamos meterlo aquí dentro
00:19:14
Normalmente cuanto más local
00:19:15
Sea una variable dentro de lo posible
00:19:18
Mejor porque menos va a afectar al resto
00:19:20
Vale
00:19:22
Bueno, pues entonces
00:19:24
Más bien
00:19:26
Vale, vale
00:19:29
Vale, sí
00:19:31
No, pero en este caso no podemos declararla ahí
00:19:34
Porque
00:19:36
Sí, ya, ya
00:19:37
Pero
00:19:42
Claro, no, pero
00:19:44
Tenemos que ponerla como variable de clase
00:19:52
Porque
00:19:55
No sabría
00:19:56
Decírtelo con precisión
00:20:05
¿Por qué?
00:20:07
¿por qué el ámbito
00:20:07
de aquí
00:20:10
no se considera un ámbito
00:20:10
interno a este?
00:20:14
vale
00:20:17
si abriéramos un if o un for
00:20:17
ahí estaría claro
00:20:19
pero este ámbito que hemos abierto es un ámbito especial
00:20:20
porque es un ámbito de una clase interna
00:20:23
una clase anónima
00:20:26
sí, pero según eso
00:20:27
tampoco nos tendría que haber dejado acceder
00:20:33
a los botones
00:20:35
y eso sí que nos deja
00:20:37
entonces a esto sí que nos deja
00:20:38
y no se ha dejado hacer el número aleatorio
00:20:40
no sabría precisar
00:20:42
exactamente por qué
00:20:47
habría que
00:20:48
en cualquier caso la solución está clara
00:20:49
que es ponerlo como variable de clase
00:20:52
y ya está
00:20:54
lo ponemos como variable de clase
00:20:55
y ahí siempre va a poder acceder
00:20:57
vale
00:20:59
ahora ya sí
00:21:01
Ahora ya sí, lo que le faltaba al ActionPerformer del texto, que era si n es igual al número aleatorio, pues si es igual, entonces el juego ha terminado.
00:21:05
¿Y qué significa que el juego haya terminado?
00:21:23
Primero avisamos.
00:21:25
Avisamos con una ventanita emergente.
00:21:27
¿Cómo hacemos sacar una ventana emergente sencilla asociada al frame?
00:21:29
Eso es muy fácil.
00:21:33
sacar una ventana emergente
00:21:34
asociada a un frame
00:21:37
en una
00:21:39
situación concreta
00:21:42
se puede hacer a través de un método
00:21:44
estático de la clase
00:21:46
JOptionPanel
00:21:48
vale
00:21:49
la clase JOptionPanel
00:21:55
esta clase que es otra clase de Java
00:21:57
XSwing
00:21:59
esta es una clase que tiene métodos estáticos
00:22:00
para sacar ventanas aleatorias
00:22:03
son todas estas que empiezan con el
00:22:05
Show, Confirm, Dialog, Show Message.
00:22:07
Son ventanitas aleatorias.
00:22:09
Esta es la típica para confirmar la que te sale.
00:22:11
Aceptar, cancelar.
00:22:13
Las hay solamente para informar,
00:22:16
como es la Show Message, que está más abajo.
00:22:18
Las hay para que además te ofrezca un texto
00:22:21
y tú le metas un texto.
00:22:23
Y entonces vamos a simplemente elegir la de informar.
00:22:25
Podéis explorar todas las otras para que sirven.
00:22:28
Vamos a elegir la de informar, que es esta.
00:22:30
Vale.
00:22:35
pues esta te saca
00:22:35
una ventanita de diálogo solamente para
00:22:39
informar y que parámetro
00:22:41
le pones, pues como primer
00:22:43
parámetro
00:22:45
como primer parámetro
00:22:45
se le pone el frame al que esa ventana
00:22:48
va asociado, si le ponemos null es el frame
00:22:51
en el que está, ese método
00:22:53
declarado, luego le ponemos null siempre y ya está
00:22:55
y aquí el mensajito que
00:22:57
queramos ponerle
00:22:59
ala
00:23:01
ya está
00:23:03
Has ganado
00:23:03
Como estamos en español
00:23:06
Pues interrogación tanto antes como después
00:23:08
Perdón, exclamación
00:23:11
La niebla mental
00:23:15
Vale, y ahora ya pues ya está
00:23:16
Poner al botón, le volvemos a habilitar
00:23:18
Le volvemos a cambiar el texto
00:23:21
Para que ahora tenga
00:23:33
Jugar
00:23:38
Sí, claro
00:23:39
Claro, vamos
00:23:44
O a la forma que tú lo hicieras
00:23:46
Pero tendría mucho sentido, efectivamente
00:23:48
Claro, si has decidido
00:23:50
Si no has definido los estados
00:23:52
Pues efectivamente un estado 1 te construye el estado 1
00:23:53
Y cuando tú has lanzado el evento
00:23:56
Pues llamas al método que te lo construye
00:23:57
Claro, efectivamente
00:23:59
Vale
00:24:01
Botón jugar, set test
00:24:02
Y ahora hay que deshabilitar lo otro
00:24:05
Que lo otro era
00:24:07
la lbl
00:24:09
newlajlabel
00:24:10
tal vez
00:24:12
pues no
00:24:13
newlabel
00:24:17
eso era lo siguiente que iba a probar
00:24:20
vale, esta si era
00:24:22
vale, pues set enablet
00:24:25
false
00:24:28
y el texto que este era
00:24:29
número
00:24:34
usuario
00:24:35
enablet false
00:24:37
otra vez
00:24:42
Bueno, pues si el jugador ha ganado, bien
00:24:43
Y si no, pues mostramos la ventanita emergente y nada más
00:24:50
Pero diciendo que no ha acertado
00:24:56
Bueno, lo comparas y le dices más alto o más bajo
00:24:59
Sí
00:25:03
Que era de hecho lo que decía denunciada
00:25:06
Vale
00:25:10
Pues el save
00:25:12
Si el número es menor
00:25:14
pues ala, se lo gritamos
00:25:22
es mayor
00:25:29
y en el único
00:25:35
caso que resta
00:25:39
pues lo otro
00:25:41
y ya está, ya no hay nada más que hacer en este
00:25:42
en este evento
00:25:56
ya no hay nada más que hacer
00:25:58
el numerador ya está
00:26:01
3
00:26:03
7
00:26:04
37 no va a ser
00:26:07
7
00:26:09
5, a ver
00:26:10
nos ha faltado una cosa
00:26:13
que es volver a poner
00:26:15
pues cuatro, no hay otra
00:26:16
cuatro
00:26:18
vale, entonces volver a poner
00:26:20
el área de texto vacía para que no lo tenga que borrar
00:26:23
todo el rato es un detalle
00:26:25
entonces
00:26:26
aquí cuando
00:26:28
el set test
00:26:30
volverlo a poner a cero pues directamente
00:26:33
cuando acaba este
00:26:35
if
00:26:37
de aquí, en cualquiera de los casos
00:26:39
Pues
00:26:41
Número aleatorio
00:26:43
Punto
00:26:47
Sextest
00:26:48
Uy, número aleatorio no, número usuario
00:26:49
Sextest
00:26:51
Vacío
00:26:57
Es que está fuera de list
00:26:58
O sea, en cualquiera de los casos
00:27:05
En cualquiera de los casos
00:27:06
Ya te lo va a poner
00:27:08
Vale, y ya está
00:27:09
Pues nada, así nos
00:27:11
Lógicamente el procedimiento óptimo es empezar por la mitad
00:27:13
¿Verdad? Vas acotando
00:27:21
Claro
00:27:22
Siempre por mitad
00:27:23
¿Qué es eso?
00:27:25
¿Qué es lo que se llama?
00:27:27
No para de ganar
00:27:29
No para de ganar
00:27:30
Jolín, pues
00:27:32
Yo nunca puedo ir peor
00:27:36
Siempre es por mitad
00:27:39
Por mitad es
00:27:41
Sí, lo que pasa es que si el número está justo
00:27:41
en el extremo, si es 9 o 2
00:27:47
es la peor
00:27:50
sí, sí, sí, pero que en mi caso
00:27:51
siempre me está generando como aleatorio o el 9 o el 2
00:27:53
así que no hay una
00:27:56
vale, pues ya está
00:27:57
bueno
00:27:58
pues ya está
00:28:00
esto, una tontería
00:28:03
porque es meter números
00:28:05
e ir mostrando
00:28:07
la media que llevas acumulada
00:28:10
aquí lo único es que tendrás que tener una variable
00:28:11
también de clase
00:28:14
que cada vez que le das al enter
00:28:15
pues te incorpora ese numerito
00:28:17
a la media y ya está
00:28:19
claro y aparte tienes que hacer un contador
00:28:21
efectivamente y cada intento se incrementa
00:28:25
divides, entonces este tampoco tiene
00:28:27
y es que este nada, metes aquí
00:28:28
a cada evento del botón, pues coges
00:28:31
lo que hay en el text field, haces la operación
00:28:33
que sea y la pones como resultado
00:28:35
vale
00:28:37
vale, pues a ver
00:28:39
Vamos a plantear ahora el juego
00:28:43
Ese del arcado, que está muy chulo
00:28:45
Para que
00:28:47
Se me ha ocurrido sobre la marcha
00:28:47
¿Qué vista podría tener?
00:28:50
Y luego ya hacéis el comportamiento vosotros
00:28:54
Claro, claro
00:28:56
Es que si no es una locura
00:29:00
La idea del juego es
00:29:01
Hacer una raid string
00:29:03
Una raid además, que a ti te encantará
00:29:05
Y no pasa nada, le decimos a ChagPT
00:29:07
Generanos una raid string
00:29:10
Con 200 palabras
00:29:13
con todas las palabras del diccionario español
00:29:14
espérate
00:29:16
no, con todas no sé si va a ser capaz de hacerlo
00:29:20
a ver
00:29:22
un par de palabritas
00:29:23
a ver, es el mejor esclavo que he tenido nunca
00:29:25
si te pide todas las palabras del diccionario español
00:29:32
no te vas a echar
00:29:35
prepárate
00:29:35
pues no, claro que no
00:29:37
a ver
00:29:40
Uy, le estoy gritando
00:29:47
Esto no le gusta, pero bueno, da igual
00:30:01
No le gusta que le griten
00:30:03
¿A ti te gusta que te griten?
00:30:05
Venga, todas las del diccionario
00:30:10
No, es que me da miedo, porque voy a colgar el ordenador
00:30:12
hala pues
00:30:13
ya está
00:30:22
van a ser 200 frutas
00:30:23
no me lo puedo creer
00:30:26
bueno pues
00:30:27
papa
00:30:32
papa
00:30:33
claro claro
00:30:46
pero tenemos que aprender a leer de ficheros
00:30:47
que ese es el siguiente tema
00:30:49
vale, pero bueno, ya vemos de qué
00:30:50
coge a él, no, mira, ha cambiado
00:30:53
a silla, mesa, periódico, cojín, manta
00:30:55
colchón, estantería
00:30:57
vale, pues bueno
00:30:59
este array nos podría valer, para la aplicación
00:31:01
en orden
00:31:03
inmenso
00:31:05
que no, que luego se cree que me río de él
00:31:06
a ver, que yo me gusta tener contentos a los esclavos
00:31:09
sí, sí, para que no sea
00:31:11
no, pues por ética
00:31:12
no se trata mal a nadie
00:31:15
la ética es
00:31:18
inteligencia artificial
00:31:22
interesante pregunta
00:31:22
pero según eso tampoco lo llames inteligencia artificial
00:31:24
es que es complejo
00:31:28
el concepto de inteligencia
00:31:30
claro, porque es complejo
00:31:31
el concepto de ser humano también
00:31:33
¿dónde está la frontera?
00:31:35
vale, bueno, pues a ver, entonces
00:31:38
¿cómo nos podríamos plantear el juego del ahorcado?
00:31:39
vamos a arrancarlo y luego lo seguís
00:31:42
Por ejemplo, venga
00:31:44
Ahorcado
00:31:46
Vale
00:31:52
Entonces tendrá un botoncito
00:31:53
Arrancar juego
00:31:57
Vale, eso está claro
00:31:58
Vale
00:32:01
Frame
00:32:08
No sé que estoy haciendo
00:32:10
Bueno, es una clasecita
00:32:12
Entonces
00:32:14
Vale
00:32:15
entonces, ahora
00:32:27
el botoncito de arrancar juego es el más sencillo
00:32:30
de pensar
00:32:32
pero
00:32:33
luego nos viene ya la parte interesante
00:32:36
botón
00:32:38
el leyado que siempre se me
00:32:40
olvida
00:32:45
de verdad
00:32:46
que estrés
00:32:48
vale
00:32:51
botoncito
00:32:54
jugar, venga
00:32:56
y ahora, ¿cómo se os
00:33:04
ocurriría. La idea es que cuando
00:33:06
le demos a jugar
00:33:08
se selecciona aleatoriamente
00:33:10
una palabra
00:33:14
de esa bolsa de palabras que tiene la aplicación
00:33:15
que efectivamente, como
00:33:17
dice Pablo, sería mejor en lugar
00:33:19
de tenerlas en una raíz de string así de largo
00:33:21
tenerlas en un fichero y leer
00:33:23
del fichero. Pero en realidad es una
00:33:26
cuestión estética, porque
00:33:27
tener una raíz de string así de largo
00:33:29
en mi
00:33:31
programa es
00:33:33
mucho más eficiente que conectarme a un fichero
00:33:35
y leer lo del fichero. Lo que pasa es que
00:33:37
mi programa es así, pero eso a Java
00:33:39
le da lo mismo. Las líneas de código.
00:33:41
Claro, depende
00:33:48
de cómo leas del fichero. Claro, si vas a
00:33:49
volcar todo el fichero, le da igual.
00:33:51
Si vas a ir leyendo de una en una, va a ser siempre
00:33:53
mejor ir leyendo de una en una el fichero que tener todo
00:33:55
el array en RAM. Pero en cualquier caso,
00:33:57
como ahora no tenemos,
00:33:59
no sabemos leer de ficheros,
00:34:01
pues no tenemos esa opción, pero la tendremos en breve.
00:34:03
¿Vale? Bueno, pues entonces
00:34:05
ahora que se os ocurre, cuando vemos al botón
00:34:07
jugar, está claro que habrá
00:34:09
que seleccionar una palabra aleatoria
00:34:11
de todo ese stream
00:34:13
y luego, esto debería
00:34:14
hacer aparecer, debería hacer visible
00:34:17
tantos huequitos
00:34:19
como tantas
00:34:21
letras tenga esa palabra
00:34:23
cada huequito podría
00:34:25
ser un text field de tamaño 1
00:34:27
¿verdad? un text field de tamaño 1
00:34:29
luego, ahora
00:34:31
pregunto yo, pregunto
00:34:33
¿cómo se os ocurriría eso?
00:34:35
de conseguir
00:34:37
Juanjo, escucha
00:34:39
ahora
00:34:40
que se las apañe con sus llaves
00:34:42
tú tus llaves, controlalas
00:34:47
¿vale? pero en el examen has tenido que controlar
00:34:49
solo las llaves
00:34:51
entonces la pregunta es
00:34:51
¿cómo se os ocurriría a vosotros
00:34:55
hacer que cuando le deis
00:34:57
al botón jugar
00:34:59
aparezcan aquí, pum
00:35:00
tantos textfield con tamaño 1
00:35:02
como sean necesarios
00:35:04
para la palabra que aleatoriamente
00:35:06
has seleccionado?
00:35:08
Bueno, cuentas
00:35:10
cuentas el tipo de
00:35:10
sacas el número y el número ese
00:35:13
lo utilizas para formar el número de
00:35:16
habilitas, creas un
00:35:18
y habilitas solo
00:35:20
claro, no instanciarlo
00:35:21
en ese momento, porque entonces se está convirtiendo
00:35:24
en una variable local
00:35:26
claro, esa es una buena opción
00:35:28
tú piensas
00:35:31
de mi bolsa de palabras, ¿cuál es
00:35:32
la más larga, la palabra más larga
00:35:34
tiene 12, pues me voy
00:35:37
a hacer yo aquí 12 textfield
00:35:39
pero los voy a dejar
00:35:40
ocultos, los voy a dejar ocultos
00:35:42
y ahora ya después del botón jugar
00:35:44
selecciono la palabra aleatoriamente
00:35:46
cuento cuantos caracteres tiene
00:35:48
y hago visibles tantos textfield
00:35:50
como necesite
00:35:53
para eso lo mejor es que
00:35:54
toda esa colección de textfield
00:35:56
esté metida en una array de textfield
00:35:58
para yo luego en un bloque
00:36:00
ir haciendo set visible
00:36:01
pa pa pa hasta que termine con eso
00:36:03
¿no?
00:36:05
¿no sería esa la mejor opción?
00:36:07
entonces, eso si los queremos
00:36:09
dejar aquí colocaditos, tampoco es trivial
00:36:11
los dejaríamos primero colocaditos, él me los va a generar
00:36:13
como variables separadas, pero luego lo retocas
00:36:15
tú en el código
00:36:17
claro, entonces una vez que
00:36:17
ya está y luego ya
00:36:21
el text field tiene que tener
00:36:23
un evento cada vez que tú
00:36:25
pones una
00:36:27
bueno, luego tienes que tener una letra
00:36:29
un espacio abajo para la letra
00:36:31
entonces el espacio abajo para la letra
00:36:33
cuando hayas puesto la letra
00:36:35
él tiene que verificar
00:36:38
en la palabra en cuanto está
00:36:39
en la posición en que haya visto que está
00:36:41
colocar esa letra en el text field
00:36:43
¿vale?
00:36:45
bueno, pues os veis capaces de hacerlo
00:36:47
si verdad
00:36:49
tenéis claro lo que habría que hacer
00:36:50
¿no? que es la clave
00:36:54
pues venga, arrancadlo
00:36:55
a ver hasta donde llegamos
00:36:57
en un rato vamos a ver por donde vamos
00:36:58
venga, no seáis perezosos
00:37:01
ni vagos
00:37:03
ahora
00:37:04
no, no, no, no, HGPT lo queremos
00:37:07
yo solo puedo hablar
00:37:11
con HGPT
00:37:13
porque yo soy vuestra intermediaria
00:37:14
con HGPT
00:37:17
la verdad es que la palabra es imprescindible
00:37:18
entonces, a ver
00:37:22
vamos a, si queréis arrancarlo hasta llegar a la raíz
00:37:25
de texto y luego ya vais siguiendo
00:37:27
vosotros, vale
00:37:29
A ver, se me está hablando sobre la marcha.
00:37:30
Igual lo que yo hago aquí también son borradas.
00:37:32
Vamos a colocar, por ejemplo,
00:37:35
tantos text field como máximo.
00:37:37
A ver, nos vamos a quedar con este array de chat GPT.
00:37:40
¿Nos ha gustado?
00:37:42
¿Se lo habéis pedido vosotros y os ha dado el mismo?
00:37:46
No, ¿verdad?
00:37:49
Bueno, pues poned vosotros el que os haya dado vosotros.
00:37:50
Da igual.
00:37:53
Yo voy a copiar el mío.
00:37:54
Venga, yo voy a copiar mi array.
00:37:59
y este array se va a quedar aquí
00:38:01
en una clase
00:38:04
aparte, para no emborronar
00:38:06
esto, para no emborronarlo
00:38:08
voy a ponerlo en una clase aparte
00:38:10
palabras, y ahí pongo las palabras, porque es que
00:38:12
si no, mi frame, mi vista, se queda
00:38:14
ahí con un array horroroso
00:38:16
entonces, vamos a hacer, vais a
00:38:18
hacer una clase aparte
00:38:20
para las palabras
00:38:22
palabras
00:38:23
y en esta clase aparte, palabras
00:38:27
Como variable estática
00:38:33
Está este string
00:38:35
Y ya está
00:38:36
Y yo cuando tenga que acceder a mi array de palabras
00:38:38
Accedo aquí
00:38:40
La verdad es que lo de la tilde
00:38:43
Nos ha jodido un montón
00:38:45
Con perdón
00:38:47
Porque para hacer la comparación
00:38:48
Entonces le voy a decir a hgpt que me las escriba sin tilde
00:38:50
Porque es que luego para comprobar si está
00:38:52
Tienes que ver
00:38:55
No hay un método que te diga si es variable
00:38:55
Es que eso es muy raro
00:38:59
Claro, entonces vamos a decirle a CharGPT
00:39:01
Pero sin las tildes
00:39:07
Venga, pedíselo también vosotros sin las tildes
00:39:18
No ha dicho claro, como siempre
00:39:23
Porque no le gusta nada lo de hacer faltas de ortografía
00:39:26
Vale
00:39:28
Sería capaz, si le digo esto mismo
00:39:32
Pero con palabrotas, sería capaz de pensar en 200 palabrotas
00:39:41
O sea, existen estas palabrotas
00:39:43
Venga, pues esto ya nos ha gustado más
00:39:48
Prueba, prueba
00:39:51
A ver qué te dice
00:39:52
Venga
00:39:53
Este stream ya me gusta más
00:39:57
No nos leas las 200
00:40:11
Por favor
00:40:13
Vale, ahora ya tenemos palabras sin tilde
00:40:14
Y palabras bonitas. Manta, micrófono, auriculares, genial. Vale. Ahora. Que se está grabando, claro que se está grabando. Vale, ahora.
00:40:17
que es lo siguiente
00:40:38
que es lo siguiente que necesitamos
00:40:42
el tamaño de la palabra
00:40:46
más larga, para los 3 fin
00:40:48
dígame
00:40:50
lo puse en una clase aparte como variable estática
00:40:51
para que no esté en la misma
00:40:58
porque es que si no, si tengo que poner todo
00:41:00
esta array en mi aplicación
00:41:02
me queda un código ahí horrible
00:41:04
entonces lo pongo en una clase aparte
00:41:06
como variable estática y accederé a ese string
00:41:08
con palabras.palabras
00:41:10
y ya está, ahora
00:41:12
sería interesante saber
00:41:14
cuál es la más larga
00:41:16
pero pedirse la char gpt
00:41:17
ya es el colmo de la vaguería
00:41:20
a ver, hombre
00:41:22
¿no haríais rápidamente aquí un código
00:41:26
rapidísimo
00:41:28
para devolver la más
00:41:30
larga?
00:41:32
venga, los que estén flojos
00:41:41
programando
00:41:43
Que aproveche
00:41:44
¿Cómo harían esto?
00:41:45
Pues la más larga es
00:41:51
Pues ya está, claro, efectivamente
00:41:53
El código de toda la vida
00:41:54
La más larga inicialmente es la primera
00:41:56
Que es palabras de cero
00:42:03
Inicialmente esta es la más larga
00:42:06
Y ahora ya recorremos
00:42:08
no creo que es una fobia
00:42:10
la fobia de las palabras largas
00:42:25
si
00:42:26
palabras de i
00:42:27
punto len
00:42:30
es mayor
00:42:32
que la más larga
00:42:34
entonces
00:42:37
menos i
00:42:43
perdón, menos i, perdón
00:42:45
palabras punto len, Dios mío
00:42:47
supenso
00:42:49
vale
00:42:50
entonces pues ya está
00:42:52
que más larga
00:42:54
punto led
00:43:09
y ahora ya cuando este fuera terminado
00:43:10
ala todo el mundo
00:43:14
habría sabido hacer este
00:43:18
este
00:43:20
pequeño programita ¿no?
00:43:22
de la primera evaluación
00:43:23
se supone que ya esta parte la tenemos
00:43:25
recuperada. Todo el mundo habría sabido hacer esto, ¿no?
00:43:28
Vale, vamos a hacernos un main
00:43:30
rápido para que nos lo diga.
00:43:32
Venga, vamos a ejecutar
00:43:53
este main a ver cuál es la más larga de todas.
00:43:54
La más
00:44:00
larga de las que ha seleccionado ChadGPT
00:44:00
es Enciclopedia.
00:44:02
A ver.
00:44:05
¿Cuál es
00:44:08
la más larga de las
00:44:08
que me has dicho?
00:44:11
Electrodoméstico
00:44:12
Pero no está en la lista
00:44:19
De las palabras que existen
00:44:20
Auriculares y micrófono
00:44:24
Ah, puede ser que enciclopedia
00:44:25
Tenga más que auriculares
00:44:28
Vale, bueno, pues ya está
00:44:29
Pues pídele más
00:44:33
De hecho enciclopedia
00:44:37
Tiene una más
00:44:38
enciclopedia tiene más que auriculares
00:44:40
no lo sé
00:44:43
1, 2, 3, 4, 5, 6, 7, 8, 9, 10 y 11
00:44:45
y enciclopedia
00:44:49
que está en mi array claramente
00:44:51
tiene 4, 4 y 4
00:44:52
bueno pues efectivamente la intuición
00:44:55
se ha equivocado
00:44:57
y si lo decimos, pues no es enciclopedia
00:44:57
a ver que me dice
00:45:00
pues no, es enciclopedia
00:45:01
Vale, pues ya está
00:45:05
Entonces, ¿para qué te pregunto?
00:45:12
Vale, enciclopedia
00:45:14
¿Veis?
00:45:16
No ha sido casual
00:45:17
No ha sido casual
00:45:19
ChatGPT, como bien sabéis, se equivoca muchísimo
00:45:21
Una barbaridad
00:45:27
Entonces
00:45:28
Aquí
00:45:30
Yo no quería preguntárselo, porque vete a saber
00:45:31
Siempre que algo lo podéis hacer vosotros
00:45:35
De forma sencilla, hacedlo
00:45:38
No confiéis tanto en él
00:45:39
Bueno, pues ya está
00:45:40
La más larga es Enciclopedia, que tiene 12
00:45:42
Pues ya está
00:45:44
Lo único que queríamos saber era cuál era efectivamente
00:45:45
La más larga de todas
00:45:48
Para ahora poner aquí
00:45:49
En nuestra aplicación
00:45:52
Tantos textfield
00:45:54
Como necesitamos
00:45:58
12, pues ala, venga
00:46:00
A poner 12 de tamaño 1
00:46:01
Ala, con paciencia
00:46:04
Ya tenemos aquí uno
00:46:06
Hay que poner doce
00:46:10
Otro
00:46:12
No lo sé
00:46:32
Venga
00:46:33
3, 4, 5, 6, 7, 8
00:46:37
9
00:47:02
¿Cuántas y?
00:47:11
Yo, uno, dos, tres, cuatro, cinco, seis, siete, ocho, nueve, diez, once, una.
00:47:12
¡Hala!
00:47:20
Vale, aquí yo sé de uno que va a necesitar un valium.
00:47:22
Sí, Pablo de la Plaza, hasta que consiga que estén todos simétricamente distribuidas.
00:47:27
Entonces, a las doce de la noche que él habrá conseguido que estén todas simétricamente distribuidas,
00:47:33
ya podemos continuar la clase.
00:47:37
Una que te guste, control-t y control-v.
00:47:38
Sí, no es tan fácil
00:47:40
No es tan fácil
00:47:42
Vale, pues entonces
00:47:43
Ahora, nos gustaría
00:47:46
Trabajar con todas estas en modo array
00:47:50
Para poder
00:47:52
Habilitar, pues
00:47:54
Si tengo que habilitar tres, pues recorrer la array
00:47:56
Hasta tres y habilitar las tres primeras
00:47:58
Si tengo que
00:48:00
¿Qué te pasa?
00:48:01
Dime, dime, ¿qué pondrías?
00:48:03
En vez de poner textil para mostrar las palabras
00:48:04
Podría label
00:48:06
Y luego lo sustituiría por la letra
00:48:06
Ah, bueno
00:48:09
Vale, pero no
00:48:14
Es que a mí estos agujericos me gustan
00:48:18
Pero bueno, lo puedes hacer con un label
00:48:21
Pero a este agujero le puedes poner
00:48:23
A todos ellos que te aparezca un asterisco
00:48:25
Bueno, yo con lo que me ha costado ponerlo
00:48:27
Yo no lo voy a cambiar, pero tú pon lo que quieras
00:48:31
¿Vale? Entonces estaría bien
00:48:33
Si nos pudiéramos poner un array
00:48:35
vámonos al código fuente
00:48:37
el código, a ver
00:48:39
para
00:48:43
fijaos
00:48:43
que horrible esto
00:48:47
vale
00:48:48
entonces, aquí lo ideal sería
00:48:49
meterlo en un array
00:48:55
y ahora, habría que ir a cada una
00:48:56
de estas y cuando estés bien, sustituirlo
00:48:59
por la T1
00:49:01
la T0, la T1, vale
00:49:03
bueno, todo el mundo está situado
00:49:04
a ver, ahora querríamos
00:49:07
sustituir todo esto
00:49:11
por un array, ¿verdad?
00:49:13
por un array
00:49:15
bueno, porque yo he añadido 12
00:49:15
pues me aparecen 12
00:49:19
no, no, no
00:49:20
no te disculpo
00:49:23
las cosas no son tan fáciles
00:49:24
en la vida no es así todo
00:49:26
perdóname, ya estás perdonado
00:49:29
letras
00:49:31
venga
00:49:32
new
00:49:33
j
00:49:36
text
00:49:37
field
00:49:40
de 12
00:49:41
vale, pues entonces
00:49:46
¿hay que meter
00:49:50
todo eso?
00:49:52
no, hay que meterlos no, ahora hay que instanciarlos
00:49:54
pero eso es fácil, y luego, que ahora
00:49:56
sí que viene lo jodido, es
00:49:58
sustituir, no, bueno, no es tan difícil
00:50:00
porque lo podemos hacer con un
00:50:02
sustituir cada operación de textfield
00:50:03
por letras 0, cada aparición
00:50:06
de textfield 1 por letras 1
00:50:08
¿vale? que no es tantas veces
00:50:10
porque es solamente cuando se pone el código
00:50:12
no es tan complicado, pero primero
00:50:14
vamos a hacer el
00:50:16
for para instanciarlo
00:50:18
dentro de mi app, vamos a hacer primero un for
00:50:20
para instanciar cada textfield
00:50:22
pues venga, vamos a recorrernos
00:50:23
para cada
00:50:26
cuidado con el for each, estamos instanciando
00:50:28
nunca jamás lo haríamos con un for each
00:50:30
con un for de índice
00:50:32
Está claro eso, ¿no?
00:50:33
Pues, ¿qué hacemos?
00:50:45
Ahora, ¿qué está pasando?
00:50:47
Que estamos instanciando todos y cada uno
00:50:48
de los text field de mi array.
00:50:50
Y lo ponemos con tamaño 1.
00:51:01
Lo ponemos con tamaño 1.
00:51:03
Uy, perdón, que le he puesto corchetes, paréntesis.
00:51:05
Ya están instanciados.
00:51:09
Ya tenemos letras 0, letras 1, letras 2.
00:51:11
Y ahora hay que colocarlos.
00:51:13
Vale, pues ya está
00:51:15
Donde estaba textfield, ponemos letras 0
00:51:17
Donde estaba textfield 1, letras 1
00:51:19
Donde estaba textfield 2, letras 2
00:51:22
Y así todo el rato
00:51:24
Bueno, porque este constructor
00:51:25
Si tú le das un parámetro
00:51:30
Lo que te fijas es el tamaño de ese textfield
00:51:31
Como solo va a haber una letra, pues le pongo 1
00:51:33
Para que solo quepa una letra
00:51:35
Y ahora, vamos a sustituir
00:51:36
Cada aparición de textfield
00:51:38
Esto
00:51:41
Refactor
00:51:43
rename
00:51:44
y luego la quitamos.
00:51:45
La vamos a llamar letras cero.
00:51:48
A ver si...
00:51:50
Letras cero.
00:51:51
A ver si me deja...
00:51:55
Claro, no me lo deja porque
00:51:58
no es un identificador válido.
00:51:59
Pues claro.
00:52:01
Yo no puedo declarar una variable así.
00:52:03
No me deja.
00:52:05
No pasa nada. Vamos a mano.
00:52:06
Sí son tres.
00:52:08
O sea, son estas cuatro solo
00:52:09
Pues aquí en estas cuatro hay que poner letras cero
00:52:16
Y ya está
00:52:19
Pues venga
00:52:20
Letras cero
00:52:21
Y ahora este letras cero
00:52:25
Seguramente hay una forma más eficiente de hacerlo
00:52:31
Pero vosotros que
00:52:33
Sois los que os gustan
00:52:34
Los atajos
00:52:37
Pues lo ponéis en práctica
00:52:39
Letras 0 y ya está
00:52:41
Vamos con letras 1
00:52:42
No pasa nada, tú puedes
00:52:44
Letras 1, vamos con letras 1
00:52:49
Que no, hombre, que no
00:52:51
Que hasta yo que voy en plan a lo lento
00:52:58
Vamos a ver
00:53:01
No sé cómo referíais
00:53:06
Pero a mí no me lo han hecho
00:53:10
Pero te admite
00:53:11
un...
00:53:15
No, es que no te lo admite porque no es un identificador válido.
00:53:16
Con corchetes no es válido.
00:53:19
Tiene que ser un nombre de variable válido, identificador.
00:53:21
Esto es mejor
00:53:25
yendo como editor de texto
00:53:26
un sustituir.
00:53:28
Usando esto como un editor de texto, sin más.
00:53:30
Lo copias a un blog de notas, lo usas como editor de texto
00:53:32
y lo vuelves a pegar.
00:53:34
Claro, y seguramente este propio editor
00:53:36
tenga también un sustituir que no esté asociado
00:53:38
al refactor a lo mejor
00:53:40
entonces
00:53:41
pero bueno, que ya llevamos 4
00:53:43
tampoco es tanto
00:53:48
letras 4
00:54:04
Vamos a ver qué pasa
00:54:05
Porque el builder nos da un poco igual
00:54:13
En realidad
00:54:15
Es solamente para construir
00:54:16
Si luego no nos aparece la pestaña de diseño
00:54:18
Porque no le gusta el nombre de identificador que hemos puesto
00:54:22
Pues que le den por saco
00:54:23
No sé
00:54:25
Tiene sentido que se vuelva loco
00:54:31
Y esa parte no nos la quiera mostrar
00:54:33
porque ese identificador no se ha válido para ella.
00:54:34
Sí, se hace un poco pesado, la verdad.
00:55:04
el que de arriba, los de arriba hay que quitarlos directamente
00:55:08
letras
00:55:21
la verdad es que si la palabra más larga hubiera sido más corta
00:55:26
pues habría sido todo más sencillo
00:55:31
pero esto es una prueba de fuego para vuestra
00:55:34
eso, para claro
00:55:39
para cuando tengáis que hacer algo
00:55:43
Absolutamente infumable y aburridísimo
00:55:47
Sí, sí, sí
00:55:49
Como te habías que hacer una migración
00:55:55
La has cagado
00:55:57
Eso nos pasa por improvisar
00:55:58
Venga
00:56:09
Letras 10
00:56:10
Ya casi, ya casi
00:56:12
Letras 11 es la última
00:56:14
pero a ver, vosotros que
00:56:16
sabéis hacer esos atajos
00:56:24
de que te seleccionan hasta el final
00:56:26
y esas cosas
00:56:28
han nacido mayor ya
00:56:28
tú naciste viejo
00:56:35
venga, a ver, lo que estamos es en una situación muy real
00:56:46
te han pedido hacer algo, lo estamos haciendo
00:56:52
sobre la marcha, a ver cómo vamos resolviendo
00:56:54
ala, ya tenemos
00:56:56
todos los textfield
00:56:58
y esto a la porra
00:57:00
hombre, claro
00:57:02
todo esto fuera, ya tenemos 10 letras
00:57:04
colocadas
00:57:09
en su sitio correspondiente
00:57:10
y ahora
00:57:12
Eso es que me está dando miedo, por eso estoy posponiendo
00:57:14
Un momento
00:57:16
¿Ves? No las reconoce
00:57:17
No variable, no variable, no variable
00:57:20
Nos da lo mismo
00:57:21
Pero es que nos da igual
00:57:22
Sí, pero
00:57:25
No las veo, pero que me da igual
00:57:27
Que me aparezcan o no, si yo esto es para construir la interfaz
00:57:30
Ahora tengo que añadir el
00:57:32
Colocar el botoncito
00:57:34
Para que el usuario introduzca el texto
00:57:35
Que estas se vean o no aquí
00:57:38
Me da lo mismo
00:57:39
Bueno, ¿qué? ¿Cómo vais?
00:57:40
Amigos míos, ¿ya habéis terminado?
00:57:43
Lo que sí que estaría bien que comprobáramos, vamos a ejecutar la aplicación a ver si se ven los desfiles bien y están bien colocados, claro.
00:58:00
aquí están, mirad que array tan bonito
00:58:07
de textfield
00:58:14
magnífico
00:58:14
les voy a poner un asterisco
00:58:20
mientras vosotros
00:58:23
acabáis que sois lentitos
00:58:25
si
00:58:27
en el momento del array
00:58:28
le voy a poner que ponga un asterisco
00:58:33
para que
00:58:35
Letras de
00:58:36
Punto
00:58:42
Sextest
00:58:44
Asterisco
00:58:45
¿Por qué no me pone asterisco?
00:58:48
Sextest asterisco
00:58:55
Letras de i
00:58:56
Ah, no, letras de i es el textfield
00:58:57
Un nuevo jtxtfield
00:59:01
¿Y por qué no me pone el asterisco?
00:59:04
Sextest
00:59:05
Añadir
00:59:06
¿Por qué no aparece el asterisco?
00:59:10
A ver, no estoy en la pestaña de diseño
00:59:20
En diseño no aparece
00:59:22
Pero es que se me da igual
00:59:22
La que me importa es mi aplicación
00:59:24
Esto es una ayuda para colocar
00:59:26
Pero no en la vida
00:59:27
Yo lo ejecuto
00:59:29
Lo que no entiendo es por qué no me los ha puesto
00:59:31
Con un asterisco ahí
00:59:33
No sé, ¿por qué no me pone el asterisco?
00:59:34
Ni el guión tampoco
00:59:50
Bueno, vale
00:59:51
¿Estamos ya?
00:59:57
El array de las letras
00:59:57
Está en otra clase aparte
01:00:06
Ah, está como variable de la clase.
01:00:08
Es un array de TextField.
01:00:12
Este.
01:00:14
Tiene sus 12...
01:00:17
Esto es un array para tener 12 TextField.
01:00:23
Luego ya, cuando ya he entrado en mi aplicación,
01:00:26
en mi constructor,
01:00:29
he recorrido el array para instanciar los TextField.
01:00:30
Y ahora ya los he ido colocando en el...
01:00:32
Y ya está.
01:00:37
vale, pues nos vamos a
01:00:38
entonces verificamos ejecutando esto
01:00:42
que efectivamente están aquí mis 12 textfield
01:00:44
ahora con este truquito
01:00:46
tan tonto hemos conseguido ahora poder manejarlos
01:00:48
todos de golpe, con un array
01:00:50
recorrer, no que si estaban sueltos era un rollo
01:00:52
bueno, pues entonces
01:00:54
¿qué más le falta a esta interfaz?
01:00:56
un área de texto para que el usuario
01:00:58
ponga la letra
01:01:00
con la que quiere probar, pues un área de texto
01:01:01
vámonos a diseño
01:01:04
y ese área de texto
01:01:05
se la vamos a poner aquí abajo por ejemplo
01:01:08
vale
01:01:11
vamos a llamarla
01:01:14
letra usuario por ejemplo
01:01:16
usuario
01:01:18
un poco más pequeñita
01:01:19
ahí letra usuario
01:01:23
y vamos a poner una etiqueta arriba que ponga
01:01:26
introduzca letra y ya está
01:01:30
vamos a poner una etiquetita
01:01:32
una etiqueta
01:01:35
con el texto
01:01:45
pruebe letra
01:01:46
vale, pues si ejecuto
01:01:49
vale, prueba letra
01:01:59
bueno, un poco feo pero da igual
01:02:01
entonces inicialmente estaría bien
01:02:02
hacer lo que esto fuera visible false
01:02:07
y que se hiciera visible true
01:02:09
cuando ya le hemos dado a jugar
01:02:11
y se ha seleccionado la palabra
01:02:13
vale
01:02:14
entonces desde el código
01:02:16
del prueba letra pues vamos a hacerle
01:02:19
aquí un set visible false
01:02:21
a la label new label
01:02:22
esta
01:02:29
un set visible
01:02:29
falso para que no me aparezca de partida
01:02:37
solo me aparezca cuando ya
01:02:40
he dado a jugar y también
01:02:42
un set visible falso de este
01:02:44
de este también un set visible falso
01:02:45
ahora ya cuando
01:02:52
arranquemos no lo vemos
01:02:58
y cuando le demos a jugar cuando hayamos hecho
01:02:59
el evento ya se aparecerá
01:03:02
está pero no está visible
01:03:03
Lo he puesto como no visible
01:03:05
Hasta que no se haya dado al botón de jugar
01:03:07
Bueno, pues nos va a hacer falta algo más
01:03:10
En la interfaz
01:03:13
No, no, jugar
01:03:15
Aparecerán tantos huequitos
01:03:17
Como letras tenga la palabra
01:03:18
Pruebe letra, damos letra
01:03:20
Y no necesita nada más en la interfaz gráfica
01:03:23
Este juego, ¿verdad?
01:03:27
El usuario pondrá letra, le aparecerán en los textfield
01:03:29
y cuando ya tenga la palabra completa
01:03:31
pues que le aparezca un
01:03:35
habría que añadir
01:03:37
entonces
01:03:42
de la interfaz ya no hay nada más que añadir
01:03:44
ya está, no hay nada más que poner
01:03:47
ahora, lo que tenéis que hacer
01:03:49
vosotros ahora, es añadirle
01:03:51
el comportamiento
01:03:53
vale, pues a ver, el botón
01:03:54
jugar, cuando se dé
01:03:57
al botón jugar. ¿Cómo responder
01:03:59
a ese clic? Seleccionando
01:04:02
aleatoriamente una palabra
01:04:04
de la bolsa de palabras.
01:04:05
Mirando
01:04:09
cuántos caracteres tiene y haciendo
01:04:10
visibles
01:04:12
tantos que inicialmente estarán
01:04:13
sin ser visibles.
01:04:15
Haciendo visibles tantos
01:04:18
textfield como sean necesarios
01:04:20
para la palabra. Entonces, yo ahora mismo
01:04:22
lo tengo puesto para que siempre
01:04:24
sean visibles 12. No, tendríamos que hacerlos
01:04:26
invisibles. Entonces,
01:04:28
no porque es un for
01:04:29
ventajas del for
01:04:32
entonces
01:04:35
ahora podemos poner
01:04:36
aquí
01:04:39
para cada j text
01:04:39
fill
01:04:45
text fill en letras
01:04:46
que hacemos
01:04:51
text fill punto set
01:04:53
visible
01:04:56
set visible
01:04:57
false para que arranque
01:04:59
sin que tu lo veas
01:05:01
¿vale? o sea
01:05:02
esto arranca
01:05:05
sí, sí, sí, yo de hecho
01:05:06
lo tengo para que cuando arranca mi aplicación
01:05:13
solo se vea el botón jugar
01:05:15
entonces, cuando uno vea el botón jugar
01:05:16
¿qué tendrá que ocurrir cuando uno vea el botón jugar?
01:05:18
habrá que
01:05:22
seleccionar aleatoriamente una palabra
01:05:23
de la bolsa de palabras
01:05:25
contar cuantos caracteres tiene
01:05:27
hacer visibles
01:05:29
tantos textfields de estos que están aquí ocultos
01:05:31
como sean necesarios
01:05:33
para cubrir la palabra.
01:05:35
Hacer visible la etiqueta y el textfield
01:05:37
para el usuario.
01:05:39
Y ya está.
01:05:42
Nada más. Eso es lo único que habrá
01:05:43
que hacer cuando sea el botón jugar.
01:05:45
¿Qué otro componente
01:05:48
tiene que responder con evento?
01:05:49
El del enter del usuario, el textfield este.
01:05:51
¿Vale?
01:05:54
Este de aquí. Ese también tendrá
01:05:57
que tener un evento. Este de aquí abajo.
01:05:59
¿Cuál será el evento de este?
01:06:01
Pues cuando el usuario del enter
01:06:03
Que tendrá que hacer la aplicación
01:06:04
Coger la letra que hay ahí
01:06:06
En la palabra que tiene aleatoriamente seleccionada
01:06:08
Mirar en qué posiciones está la letra
01:06:11
En las que haya encontrado que está
01:06:13
Colocar esa letra
01:06:15
En el text field correspondiente
01:06:17
Y ya está
01:06:18
Y contar el intento
01:06:19
Porque vamos a hacerlo con un contador de intentos
01:06:22
Lo vamos a dejar hasta el infinito
01:06:24
Le vamos a decir 5 intentos
01:06:25
Entonces incorporar un contador de intentos
01:06:28
Eso es lo que tendrá que hacer el ente
01:06:30
Coger la letra, verificar en qué posición está
01:06:31
En las que esté, colocarla en el textfield
01:06:34
Y contar el intento
01:06:36
Si se ha pasado de intentos
01:06:38
Parar el juego
01:06:41
Y decir se acabó
01:06:42
Si se ha parado de intentos, decirle se acabó
01:06:43
Y si no se ha pasado de intentos
01:06:45
No tiene que hacer nada más
01:06:47
Bueno, en el caso de que haya completado ya todos los textfield
01:06:48
Tiene que avisar, has ganado, la palabra era esta
01:06:51
Eso, efectivamente
01:06:53
Venga
01:06:56
Vale, pues ese es el enter de aquí
01:07:00
Luego lo único que tenéis que hacer ahora vosotros
01:07:06
Es el evento del botoncito jugar
01:07:08
Que es el más sencillo
01:07:10
Y el evento de este de aquí
01:07:11
Y ya se acabó el ahorcado
01:07:13
Elige lo que tú quieras
01:07:14
Pues venga
01:07:20
- Materias:
- Programación
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado superior
- Primer Curso
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 16
- Fecha:
- 17 de marzo de 2025 - 10:21
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 1h′ 07′ 23″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 318.96 MBytes