Transcripciones
1. Descripción general: Hola, chicos, y
bienvenidos a mi curso, donde construiremos desde cero un
invitado completo el mundo,
también conocido como un juego
y en Java, mediante el uso de la tecnología Springbood, MySQAL
y Java Swing y Bajo las siguientes secciones, conseguirás interactuar con diversos aspectos de la
construcción del juego, como definir el ecosistema, de trabajar con
Springboard framework, uno de los frameworks
más
populares del mercado, y además, lograrás crear
la app de manera modular, como cada característica está separada en un paquete
correspondiente Vamos a definir varios
componentes como parte de este juego, pero no te preocupes,
ya que te mostraré exactamente cómo hacer que
interactúen entre sí. Por último, pero no menos importante, ya que se trata de un simulador de verdugo, tendremos que almacenar
en alguna parte las palabras Para ello, agregaremos los datos bajo la base de datos
releccional de Moser Así que comencemos.
2. Primeros pasos: El primer paso en nuestro proceso de
desarrollo es crear una aplicación de
arranque de resorte. Entonces fui a iniciar
ese punto primaveral IO, y por aquí, ves que tienes varias opciones
que puedes elegir. El tipo de proyecto, la versión de arranque de
primavera, el lenguaje Java y ahora
para los metadatos del proyecto. Podemos establecer un grupo específico, y lo llamaremos
llamado así ahorcado Para el artefacto,
lo llamaremos juego. Igual para el nombre
en la descripción. Podemos llamarlo simulador de
juego Hangman. Para el nombre del paquete, podemos ir con el juego C y Man, el frasco de empaque, y
para la versión Ja, elegimos la versión 11. También tenemos la capacidad de
agregar dependencias específicas. Pero por ahora, no debemos
ir en esta dirección ya que esas dependencias se
sumarán manera manual en un
momento posterior del curso Podemos ir a generar
el proyecto. L et's abren esta carpeta. En realidad, vamos a extraer el
zip en una carpeta específica. Y cortemos esta carpeta
debajo de los proyectos de aquí. Por supuesto, puedes elegir ubicación
que prefieras. Ahora, tenemos la
opción de importar este proyecto de Maven a nuestro ID Y el siguiente paso
será crear los paquetes correspondientes que usaremos como parte
de este curso. Entonces esta es la
estructura base de los paquetes. Entonces llamemos a este tipo de paquete y marco desde la interfaz
gráfica de usuario. Un nuevo paquete llamado Coman Game Guy and Listeners donde almacenaremos nuestros oyentes
correspondientes Otro paquete para menú. Estoy configurando un nuevo paquete
ahora para los paneles que se agregarán al
marco principal de la aplicación. Estoy tratando de estructurar
lo más posible este proyecto en
diferentes secciones. Vamos a crear un
paquete llamado model. Un repositorio número 14
donde almacenaremos nuestro repositorio
correspondiente GPA de datos de primavera Uno para el servicio,
donde mantendremos nuestro
servicio principal de lógica de negocios para el servicio IMPL Bajo el servicio, tendremos una interfaz bajo el IMPL Tendremos la implementación
correspondiente. Y un último paquete para t. por aquí junto a la dependencia del arrancador de
Springboard Tenemos la opción de agregar
una nueva dependencia aquí. Vamos a configurar el ID de grupo para la bota O spring framework. El ID del artefacto
será boot starter web. Ya que desde que en realidad quiero que la instancia de don't get
se ejecute detrás de escena. La aplicación estará en funcionamiento sin ninguna interacción
del usuario. Comencemos ya la aplicación. Escogeremos la aplicación Spring Boot, y la
aplicación Spring Boot
comenzará a usar una instancia de
tomcat incrustada, y tenemos la
opción de verificar esto Vamos a nuestro navegador y
tecleemos el host local A ocho, y veremos una página de error
predeterminada.
3. Comencemos de manera simple: Ahora, dado que tenemos
la estructura principal de la aplicación
establecida en términos de paquetes, deberíamos comenzar a construir
nuestros componentes reales. El primer paso es navegar por los paneles de chicos de juego de hombre por debajo de la mano
y crear una clase sencilla Llamémoslo panel vacío. Lo primero es
anotar esta clase con el estereotipo de componente
para que se registre con el resorte como un componente simple y pueda
inyectarse posteriormente en el marco
correspondiente Esta clase en realidad
extenderá el panel. Esto es útil para
nosotros para crear el panel real como un componente
separado. Ahora, agreguemos un constructor
simple. Y tenemos la referencia
al panel J usando la palabra clave di y queremos establecer el tamaño preferido a una dimensión específica,
500 por 100. También establecemos el color
de
fondo del panel en negro. Y podemos configurar un
diseño simple para nuestro panel. Y vamos con
un diseño de codicia. Dos y uno. Voy a detener la
ejecución inicial de la aplicación. Ahora, ya que tenemos este
sencillo panel en su lugar, podemos ir al marco de chico del
juego Changan y crear el marco real de nuestra aplicación que
mantendrá todos los paneles Podemos hacer click sobre el patrón
terminado. También para nuestro marco ahorcado, debemos
anotarlo con componente para que sea
recogido por el resorte Esta clase
extenderá el marco J. J frame es clase
del paquete Java swing. Y tenemos la opción de cablear
automáticamente el panel vacío. Una vez más, ya que el
panel vacío es un componente, podemos inyectarlo directamente aquí. Y también crearemos un
panel llamado panel principal. También agreguemos un comentario. Dado que este panel principal mantendrá todos nuestros paneles importados que se agregarán
al marco principal. Imagine que importaremos
todos nuestros paneles creados, agregaremos, los agregaremos al panel principal, y este panel principal se
agregará directamente al marco J. También configuramos un constructor
simple. Y vamos a crear un método
llamado create Min guy, y tendremos que
anotarlo con
post constructo para que este método sea invocado
automáticamente Importamos el paquete
de
notación Java para usar correctamente la notación
post constructo. Ahora vamos a definir algunas propiedades
específicas para nuestro marco J principal. Tenemos que establecer los
límites a 170100500. No permitiremos que el usuario
redimensione este j frame
como opción El siguiente paso será agregar un
oyente de ventana específico a este fotograma J. Tendremos que instanciar
el adaptador de Windows. Eliminar estos comentarios. Y necesitaremos implementar el método correspondiente
llamado cierre de ventana. Como parámetro, este
recibirá el evento de ventana. Cuando el usuario haga clic en el botón x
para cerrar esta ventana, en realidad
nos desharemos
de la aplicación, salimos de la aplicación y
liberamos todos los recursos. Ahora, necesitamos instanciar
el panel principal. Y debajo del panel principal, necesitamos establecer el diseño. Y para este caso, usaremos el diseño del borde. Ahora podemos agregar
el panel vacío debajo del panel principal usando
la opción de diseño de
borde así. Por lo que este panel vacío
se agregará en la parte inferior. Y también agregaremos el panel
principal al marco J,
el marco J principal, y estableceremos el marco J como visible para
el usuario correspondiente. Ahora, comencemos
la aplicación. Vamos a guardar el panel vacío, y ves que recibimos un error El resorte
no funciona bien con los componentes
correspondientes del swing, y ves el error aquí
que está relacionado con headless Para solucionar esto, necesitamos navegar
al método principal principal
correspondiente desde nuestra aplicación de juego, y eliminé la declaración
inicial, y necesitaremos usar el generador de aplicaciones de
primavera. Voy a crear un nuevo objeto para el constructor de
aplicaciones de primavera. Como instancia,
recibiremos la
aplicación del juego dot class. Necesitamos establecer el headless
para el constructor como false y ejecutar este constructor Y ya estamos listos para iniciar la aplicación ya que la opción headless
se fijó en caídas Y ves aquí en ellos, colocamos el panel vacío, y también tenemos la opción de
cerrar el marco J.
4. Diviértete con imágenes: Ahora, antes de comenzar a construir el siguiente panel sin lista,
el panel de imágenes. Necesitamos algunas imágenes con
las que jugar. Te configuré dos imágenes, 14 sonrisa y 14 set. Lo primero a tener en cuenta
es que necesitamos
crear carpeta bajo los recursos principales de
origen, y llamémoslo imágenes. No te preocupes. Te proporcionaré
tanto el set como las imágenes de
Sonrisa para trabajar en
este proyecto con ellas. Dicho esto. Vamos a crear
el siguiente panel en nuestra lista. Monté una clase
llamada panel de imágenes. Esta clase también deberá ser anotada con el
componente para que
sea recogida por el contenedor de
muelles y lo mismo al panel, necesitamos extender el panel G. Como eliminar estos comentarios. Necesitamos establecer una
lista de etiquetas G. Vamos a llamarlo lista de imágenes. Esto se utilizará con el
fin de almacenar nuestras imágenes. Ahora vamos a crear un constructor
simple llamado panel de imagen, por supuesto, y el método que
será anotado con un post constructo
para que sea invocado automáticamente
por spring con el fin configurar todas las propiedades
para nuestro panel de imágenes Lo primero
será instanciar la lista de imágenes como una lista Y también establecer el tamaño
referido en 100100 como un
objeto de dimensión para nuestro panel G. Arreglemos esto ya
que no se llama imágenes, en realidad
es la lista de imágenes. Bien. Vamos a establecer un
color de fondo específico para el panel como blanco. Y también estableceremos
un diseño específico como diseño cuadrícula con cinco
filas y una columna. Vamos a establecer algo de espacio aquí. Ahora, me gustaría hacer un bucle de cuatro iniciando
0-4 inclusive Así que menos de cinco y
vamos a crear una etiqueta. Imagina que necesitamos
almacenar cinco imágenes. Creamos algunos
objetos simples para nuestra etiqueta J. L et's también van al juego del verdugo
C teal y crean un ayudante simple Ya que me gustaría
guardar algunas referencias tanto
a sonrisas como a imágenes tristes
bajo esta clase auxiliar. Así que anoté esta
clase con componente. Vamos a configurar algunos iconos de imagen
simples. Este será un
icono de imagen que tendrá una referencia a la imagen de la sonrisa. Necesitamos crear un icono de imagen. Y usaremos la ayuda
get class loader. Obtener recurso. Y si recuerdas, configuramos la imagen debajo de
las imágenes, Sonríe JPG. Hagamos también algo
similar con la imagen sat. Nuevo icono de imagen,
el mismo proceso, ayuda a obtener cargador de clases,
obtener imágenes de recursos. Ahora establece ese PNG. Entonces tenemos revance a
ambas imágenes. Ahora vamos al panel
de imágenes, y por aquí, como parámetro
para el constructor de etiquetas J. En realidad podemos usar
la referencia a la imagen de sonrisa auxiliar, ya que por defecto o
las imágenes tendrán el tipo correspondiente establecido
para ellas y obtendrán imagen. Pero ves que
recibimos un error, así que necesitamos
transformar de alguna manera esta referencia a un formato específico
que el nivel
G realmente pueda
usar correctamente. Para ello, vamos a
crear un método sencillo. S dos. Que volveremos
en icono de imagen. Llamémoslo escala que recibamos la
fuente de la imagen como referencia. Básicamente a partir de esta
fuente de imagen a partir de esta imagen, volverá en el icono de imagen. Estableceremos el ancho y la
altura dos propiedades 250, otra variable para el tipo, y el tipo será tipo edad
puffer en RGB Oh Ahora vamos a crear una imagen en búfer llamada
DST desde el destino. Nueva imagen de búfer que
recibimos con 50 altura 50 en el
tipo como tipo en GB. Tendremos que usar
los gráficos y basado en el destino de la
imagen en búfer invocaremos el método create
graphics Ahora podremos dibujar
una imagen desde los gráficos hasta
el objeto y
será la fuente cero,
cero, la anchura
altura, y esto. Y también tendremos que invocar el método dispose en
los gráficos para objetar Como paso final, podemos devolver el icono de la imagen desde este método. Por aquí, solo necesitamos
usar el método scale
y ves que el problema se ha solucionado
y esa etiqueta
en realidad apuntará a un
icono de imagen para la imagen de sonrisa. También necesitamos agregar la
etiqueta de imagen a la lista de imágenes. Para código de meta bit. Volvamos al marco
de mano hombre. Ya que ya tenemos este panel de
imágenes en su lugar. Inyectémoslo usando
el cableado automático. Panel de imagen de imagen privada. Similar al panel vacío, puede agregarlo al panel principal. Este panel principal
agrega panel de imágenes, y usaremos el
diseño de borde como para este. Por lo que esto se almacenará en la parte
derecha de la pantalla. Comencemos la aplicación. Y se puede ver que se ha configurado el panel de
imagen. Cerremos esto, instancia. Vamos a mover esta consola a
la parte inferior de la pantalla.
5. Eventos de usuarios: Antes de continuar y comenzar a implementar el tercer
panel en la lista, necesitaremos configurar algunas clases de componentes
específicos como parte de nuestro proceso de
desarrollo. Así que quiero C
Hangman paquete de juego. Vamos a crear una clase
llamada sp Context. Haga clic en terminar. Tendremos que
anotar esta clase con un estereotipo de componente También agreguemos un comentario
descriptivo, como este componente se
utilizará para auto el
contexto de aplicación de primavera dentro la clase no correspondiente. Verás en un momento posterior este curso cómo se utilizará esta
clase. Spring context
necesita implementar el contexto de aplicación consciente. También usaremos la denotación
auto wird. Agreguemos una variable como variable estática de tipo contexto de
aplicación, y llamémosle contexto de
aplicación. Asegúrese de importarlo
del paquete
correspondiente del framework. Y también necesitaremos anular
el método set application
context ya que implementamos el contexto de
aplicación consciente. Este método recibe el parámetro de contexto de
aplicación y el tipo de ejecución de Bins Importé la excepción de Bins. Ahora usaremos el contexto
spring, ese
contexto de aplicación para que sea igual
al contexto de aplicación recibido
como parámetro en el método set
application context. También devolvamos el contexto de la
aplicación usando un método estático. Por aquí, estamos devolviendo
solo el contexto de la aplicación. Avancemos y trabajemos en los oyentes que se
utilizarán en nuestra aplicación Tendremos un oyente de ratón
y también un oyente de botones. Así que vamos a pasar por debajo ahorcado juego chico oyentes
y crear nuestro oyente de ratón que responderá
a eventos de ratón para nuestros botones que se
crearán en Esta clase de escucha de mouse necesita extender
el adaptador de mouse Configuré un simple
constructor vacío o nuestra clase. Agreguemos un comentario para
el método que configuramos, manejemos el caso cuando el mouse
ingresa a un patrón específico. El método necesita
llamarse mouse ingresado de tipo void y recibe un evento
mouse como parámetro. Tendremos que conseguir el
fondo que seleccionamos. En realidad, el botón que
desencadenó este evento del mouse. Cuando ingresemos en el
botón con el mouse, este evento se generará
automáticamente. Si el botón está habilitado, y pasamos con el mouse sobre él para
básicamente pasar el botón Necesitamos establecer el
color de fondo como efecto. Y pongámoslo en blanco
para que el usuario sepa en qué
botón rondaba Ahora agreguemos un nuevo
método que
manejará el caso cuando el
mouse salga del botón. Tenemos que llamarlo mouse
salido de tipo void, mismo al mouse centrado, este recibe un evento mouse Y necesitamos verificar si
el botón elegido está habilitado establecerá un color de fondo
específico a este botón también. Nos st el color de fondo. Vamos a crear una nueva clase
llamada botón oyente. Esta clase de escucha de botones necesita implementar el oyente de acción También agreguemos un método que
necesita implementarse, acción realizada que
recibe un evento de acción E. Necesitamos obtener el
botón actual en el que hicimos clic Usando el mismo
proceso. Obtener de origen. Simularemos el hecho de que no
queremos que se vuelva
a seleccionar el botón, así que lo deshabilitamos y también establecemos el color de
fondo en verde. También necesitaremos obtener la letra correspondiente del botón ya que cada botón
tendrá una letra. Haremos esto usando el
get text to chary of zero. Esto de hecho nos conseguirá la primera y única letra
existente a ese botón que se
agrega a ese botón. Ahora bien, si recuerda el contexto de la
aplicación, la clase de contexto de primavera se
utilizará aquí para el contexto de la
aplicación. Y en un momento
posterior de este capítulo, verás una vez que configuremos
todos los botones en su lugar, cómo podremos usar este contexto de aplicación
dentro de nuestro módulo.
6. Construcción de la escena: Ahora, estamos listos para crear
nuestro tercer panel en la lista. Así que vamos a navegar a C
hangman game Guy panels, paquete
correspondiente, y
crear una clase de panel de letras Deberíamos seguir el enfoque
similar para anotar esta clase con el estereotipo de componente para que sea
recogida por Esta clase necesitará extender el componente de oscilación del panel G. Ahora, necesitaremos crear
un mapa específico que mantenga los pares de letras
de valor clave y el botón
correspondiente. Ya que intentaremos simular todo
el teclado de nuestra computadora de escritorio o a computadora depende del caso del usuario. Estoy creando un
mapa simple con la clave siendo una cadena y siendo
el valor el botón
correspondiente, y lo llamaremos mapa de letras. Ahora, para el constructor de
patentes de letras, estableceremos un diseño simple
de un diseño de cuadrícula donde usaremos la estructura de diseño de
cuadrícula correspondiente libre y cero. Vamos a establecer en su lugar crear método de
panel que se anota
con post constructo Para que este método sea
automáticamente invocado por spring y comenzaremos a definir lista de correspondientes
desde nuestro teclado La primera lista contendrá todas las letras de
Q a P inclusive. Estoy agregando aquí todas
las letras de la Q a la p en nuestro teclado. Vamos con un
enfoque similar para el segundo y
configuraremos letras de A a L. Recordemos
que todas las letras son. J, K y también L. Vamos a poner en su lugar la
última fila de z a M. Es una lista V B y la letra final M. Definimos listas libres de
cadenas que harán un seguimiento de las filas de nuestro teclado
e incluirán todas las letras. Ahora, debemos agregar un comentario descriptivo
como por cada letra de la lista. Necesitamos crear un botón
correspondiente. Ahora, me gustaría configurar
un método que creará un panel J para lista de letras que
se establecerá como parámetro. Recibiremos cada una de las tres letras y
con base en esas cartas. Crearemos el panel
correspondiente, y ese panel
tendrá un conjunto de botones que
coincidirán con esas letras. Estoy creando aquí
un panel de cartas. Esto actuará como panel
intermedio. Queremos crear
un oyente de botones, instancia
correspondiente, instancia
correspondiente, y agreguemos también
un oyente de mouse Nuevo oyente de ratón. Ahora, por cada
letra de la lista. Queremos crear un botón y los datos correspondientes
deben ser mapeados a él. Hagamos una iteración en la lista de letras que se recibe como parámetro
a este método Y por cada letra,
intentaremos crear un botón que
recibimos como parámetro al constructor
la letra. Vamos a querer crear algunas
propiedades para este patrón, como establecer el tamaño preferido, y también establecer el color de
fondo. 100. Ahora debemos agregar
el oyente de acción, como este botón
responderá a eventos específicos, y también el oyente del mouse para que este botón
pueda responder a los
eventos del mouse en el centro del mouse y la salida del mouse También agreguemos una
fuente específica a este botón. Creamos aquí variable. Vamos a llamarlo fuente. Yo y nosotros
instanciaremos una nueva fuente. Pero no debemos
olvidarnos del tipo, entonces esta es f la
variable name font, y para la fuente,
usaremos negrita y 26. Usemos la
clase helper para esto, esto es
variable constante, fuente auxiliar. Establecemos la fuente para nuestro botón. Y ahora para el botón de la letra. De hecho, agreguemos un
botón de letra al panel de letras, y necesitamos
agregarlo también al mapa de letras, la letra será la clave, y el botón de letra
será el valor correspondiente para que mantengamos todos
los botones en un solo lugar, es
decir letras Mapa. Ya que creamos este panel
intermedio, necesitamos devolverlo y bajo
el método create panel, necesitamos invocar el panel create letter para
cada una de nuestras tres listas Vamos a crear una variable
llamada panel QP que
devolvemos un panel de botones
de la lista QP Lo mismo para la segunda
lista de A a L. Y también para la tercera lista. Z dos. Tenemos tres
paneles definidos. Y agregaremos estos tres paneles
intermedios al panel de
la letra s principal
usando este keyord, ya que tiene una referencia
al panel principal Eliminemos los espacios. Y ahora tenemos el panel de la
letra s en su lugar. Pero también queremos
tener los métodos setter y
getter para nuestro mapa de letras que
guarden una referencia a todos nuestros botones que se
agregaron al panel de letras Este es el método get. Agreguemos también el método set. L et's hacen esto manualmente, ya que el ID del traje de herramienta de resorte
puede hacerlo automáticamente, pero podemos
anotarlo por nuestra cuenta. Entonces este mapa de letras
equivale a mapa de letras. Y vamos al marco
del ahorcado. Inyectemos el panel de letras s. M. Usaremos la notación auto
ward. Letra privada spanel,
panel de letras como variable. Y por aquí, necesitamos
agregar la letra spanel
al panel principal Pero esta vez, usaremos el diseño de
borde que centro. Para que agreguemos esta spanel en el
centro de nuestra pantalla Comencemos la aplicación. Y se puede ver el
panel en su lugar. También el
oyente del ratón está en su lugar. Ves que cuando
tengo un botón, se cambia
el color. También el
oyente de acción está en su lugar. Cuando hago clic en el botón, el botón se cambia a verde.
7. Adivina la palabra: Bajo este video, crearemos nuestro cuarto panel a partir de
nuestra lista de paneles. Vamos a navegar a nuestro
paquete de paneles y crear una nueva clase. Esto se llamará panel de palabras. Bueno anota esta clase con un estereotipo de resorte de componente, y también necesitaremos
extender la clase de panel También agreguemos un ID de versión
serie por defecto. Tendremos que
configurar una nueva variable que será una lista de botón G, y lo llamaremos lista
de palabras
generadas que cada letra de nuestra palabra generada se asigne a un botón específico que se
agregará a esta lista, una nueva variable llamada palabra
generada que mantendrá nuestra palabra generada
correspondiente, y el número de intentos que el usuario intentó
adivinar el mundo. Bajo esta clase de panel J, necesitaremos una referencia
al panel de la letra s, así lo inyectaremos. También otra referencia
al panel de imagen. Así que inyecte ambos
usando la notación automática. He creado un
constructor simple y aquí, estableceremos propiedades específicas
del panel. Agregué el diseño de conjunto
como un diseño de flujo simple. El tamaño preferido
para nuestro panel. Tendremos que establecer el color
de fondo en negro. Ahora vamos a anotar
un nuevo método con un post constructo para que
sea automáticamente invocado por el resorte este método creará panel Hasta el momento, tendremos que
instanciar la palabra generada
con una palabra predeterminada, ya que no tenemos nada
en su lugar que genere
automáticamente de manera
aleatoria Entonces vamos a ir con algo
sencillo en esta etapa. Entonces la
palabra generada será juego. L et's también instancia la lista de palabras generada
como una nueva lista R A, y el número de
intentos debe ser cero, ya que acabamos de comenzar el juego. Ahora, como tenemos
una palabra en su lugar, aunque sea la palabra de juego
predeterminada, necesitamos obtener la primera
y la última letra de ella. Por lo que estas serán variables
específicas del gráfico. Para la primera letra de palabra, extraeremos del gráfico de palabras
generado de cero. Para la última letra en palabra, obtendremos el gráfico de palabras
generado generado longitud de palabra menos uno. Ahora tenemos tanto la primera como
la última letra de la palabra. Y necesitaremos iterar
sobre la palabra generada Y crear un botón para cada letra en el mundo
generado patrón final más llamarlo LB es instanciado
a nuevo patrón, y por defecto, usaremos ese signo para simular que la letra no se
muestra al usuario Estableceremos el tamaño
preferido del botón y también la fuente
correspondiente del botón. Además, pongamos el color de
fondo blanco y no lo habilitemos. Debe estar deshabilitado por
defecto para que no
responda a ningún evento de clic o
evento de mouse. Añadiremos este botón a
la lista de palabras generada, y también al panel
correspondiente. Ahora, ya que tenemos la
primera y última letra extraída de la palabra
generada. También necesitamos
mostrarlos a la
interfaz gráfica de usuario al usuario. Ya que como ustedes saben, estamos
haciendo una simulación de ahorcado, y las primeras y
últimas letras
del mundo del mundo deben
estar expuestas al usuario Entonces expongo la primera letra. Y además, expongamos la última letra al usuario
usando el método set text. Ahora necesitamos iterar sobre la palabra generada
usando un bucle de cuatro Para llamo cero, bajó y generó
longitud de palabra menos uno más más. Y necesitamos obtener cada
letra de la palabra. También agreguemos aquí un comentario. Y lo que estamos
tratando de hacer aquí es exponer la
letra actual al usuario, si la letra actual
coincide con la primera letra de la palabra generada o la última letra de
la palabra generada. Entonces, si la letra actual
es igual a la primera letra, o la letra actual es igual
a la última letra. Necesitamos obtener la lista de palabras
generada, la
referencia del botón correspondiente y establecer el texto a la letra actual. ¿Bien? Y ahora necesitamos
desactivar las letras que inicialmente
están expuestas en
la palabra que generamos. De esta manera, necesitamos desactivar la primera y última letra
del panel de letras, ya que
ya están expuestas al usuario y el usuario no
debería poder
hacer clic en ellas. Vamos a n al panel de letras. T y crea el método aquí. Vamos a llamarlo letras
predeterminadas deshabilitadas. Esta carta debe recibir
la primera letra en palabra y también la
última letra en palabra. Vamos a crear algunas cadenas
basadas en los dos gráficos que recibimos como parámetros para la primera letra y
uno para la última letra. ¿Bien? Y ahora, deberíamos
desactivar la primera letra. Necesitamos obtener una referencia a la primera letra en el botón de palabra. Para ello, si recuerdas, tenemos el mapa de letras que tiene referencias a
todos nuestros botones, y obtendremos el botón
correspondiente usando la primera letra
esa mayúscula. Con base en la clave de mapa de letras, podremos extraer el valor correspondiente del botón
J, y básicamente necesitamos
desactivar este botón. Y también establecer el color de
fondo en
verde simularlo de
una manera para el usuario. debe seguir un enfoque similar para la última letra que recibimos como parámetro
para este método. Entonces vamos a crear la última
letra en botón de barrio. Y del mapa de letras, obtendremos la última letra. Que la mayúscula. Arreglemos esto. el valor correspondiente del botón J y necesitamos
desactivarlo y también establecer el color de
fondo en verde. Hagamos esto. Establecer
fondo verde, y eso es básicamente todo. Volvamos al
panel de palabras e invoquemos ese método. Tenemos la referencia de
lapso de letras que inyectamos anteriormente
en este componente. Llamemos a la letra de
desactivación spanel usando la primera letra en
palabra y la última letra en palabra Ahora somos el panel que
creamos a partir de este método. Como siguiente paso, necesitamos un
método que verifiquemos si letra
seleccionada está presente
en la palabra generada. Por ejemplo, cuando
seleccionaremos letra
del panel de letras s, necesitamos verificarla si está presente en la palabra
generada o no. En base a esto,
haremos algo. Así que vamos a configurar un valor bleen
la letra encontrada por defecto será falso e iterar
sobre la palabra generada Necesitamos obtener la letra
actual de la
palabra generada Garrat de I. Y necesitamos verificar si
la letra actual coincide con la letra que seleccionamos Y si es así, vamos a invocar la
lista de palabras generada que get of I set text string
value of letter Entonces expondremos la letra
seleccionada ya que se encuentra en
la palabra generada. Por lo que la letra seleccionada
será expuesta al usuario, simulando el hecho de que
pudo encontrar la carta Y como el usuario
pudo encontrar la letra, a lo
mejor estabas en el caso de que se ha encontrado toda la
palabra. Entonces, si se encontró la carta, sin embargo, no debemos
olvidar cambiar la. Entonces, si se encontró la letra, también necesitaremos un método check completed word para ver si todas las letras de
la palabra generada fueron f. vamos a implementar esto
completado, un método sencillo. Entonces, hagamos que el
comentario verifique si se han encontrado
todas las letras de la
palabra. Entonces este es un método privado, verificar palabra terminada,
y necesitaremos los mecanismos para
averiguar si se han encontrado todas las letras de la
palabra. Y para ello, si tenemos al menos uno de esos símbolos
que simulan que la letra no se
muestra al usuario, significa que la palabra no
está completada. Entonces hagamos una búsqueda
de cuántas letras con ese símbolo tenemos en
la palabra generada que queda. Entonces número de letras encontradas, vamos a extraer de la lista de palabras
generada. Haremos st filtro, y para cada botón, verificamos que el texto del botón sea igual a ese
símbolo en cuenta. Y yo número de letras
encontradas mayor a cero, significa que la palabra no
está terminada. Pero de hecho,
cambiemos esta variable a número de letras no encontradas, ya que es más descriptiva. Y si se encontraran todas
las letras, volveremos verdaderas. Así que volviendo a esta afirmación, si letras si
se encuentra letra y palabra completada, tendremos que invocar el panel de letras y
obtener el mapa de letras, y para cada letra
en el mapa de letras,
Por favor, recuerde que las claves son cadenas y los valores
son patrones G. Por cada botón, lo
deshabilitará para que el usuario ya no
pueda hacer
clic en ningún botón
del panel. Además, debemos mostrar un mensaje emergente usando el pin de opción G, mostrar diálogo de
mensaje. Y vamos a informar al
usuario que pudo encontrar la palabra en este caso,
y vamos a felicitar Y vamos al
caso S, si se encuentra carta. No es verdad. El usuario no pudo
identificar una carta. Necesitamos simular esto en
la interfaz gráfica de usuario. Si recuerdas la
lista de imágenes, necesitamos actualizar una
referencia de imagen de sonrisa a set. Lo haremos usando
el panel de imágenes. Y en el panel de imágenes, necesitamos una referencia
a la lista de imágenes. Entonces necesitamos crear el método getter para esto
bajo el panel de imágenes Tener una referencia una
vez más a esas cinco imágenes que se utilizan para simular cinco
posibles intentos al usuario de adivinar
la palabra completa. Esto devolverá
la lista de imágenes. También agreguemos un
método setter para esto. Establecer lista de imágenes, que
recibimos una lista etiqueta OJ, y esta lista de imágenes
es igual a la lista de imágenes. Entonces volviendo al panel de palabras, tenemos acceso ahora
a la lista de imágenes. Y vamos a conseguir el intento
actual. Por favor, recuerden que el
número de intentos es cero cuando iniciamos el juego
y pondremos el icono. Bueno, de hecho, cambia
el ícono de una imagen de sonrisa predeterminada
a una imagen triste. También aumentaremos el
número de intentos. Y como aumentamos
el número de intentos, también
debemos verificar si
alcanzamos el máximo de intentos
permitidos. En este caso, el número
máximo de intentos es igual
al panel de imágenes, obtener imágenes tamaño de lista. En nuestro caso cinco. Entonces, si iteraremos sobre las letras
del panel de letras s, usando el mismo enfoque
descrito anteriormente, y deshabilitaremos todos los
botones
para que esto permita al usuario
hacer clic en cualquier botón de la izquierda, y también le informaremos que no pudo
encontrar la palabra Es decir, que perdió el juego. La palabra se generó palabra. Hasta el momento tan bueno. Esto se ve bien. Si recuerdas, configuramos
aquí un método de carta de cheque, pero en realidad no lo llamamos. Pero tenemos un oyente de acción
para cada uno de nuestros botones, y ahora bajo el listener de
botones, necesitamos invocar ese método
check letter usando la clase context que
definimos anteriormente Entonces necesitamos obtener la
instancia del panel de palabras, ya que ves que el oyente de
botones no es un componente de resorte
y el panel de palabras, es un componente de resorte y usando
la clase de contexto spring, podremos
invocar correctamente el método desde
el panel de palabras usando
este oyente de botones Entonces ves la palabra panel, revisa letra de letra. Por lo que ahora también podremos
invocar contenedores correspondientes de resorte a invocar contenedores correspondientes de resorte partir de un componente que
no esté asociado al contenedor de
muelles El último paso será
cablear automáticamente el panel de palabras debajo del marco maan manual y agregarlo en el panel principal
debajo de la sección norte Hagamos esto. También
iniciemos ahora la aplicación. Guardamos la palabra panel. Y ves por defecto, tenemos todos los paneles en su lugar
y esa palabra de juego por defecto. ve que los intentos están en
su lugar a partir de una imagen de sonrisa, imagen ha estado en
el panel de imágenes. Oh.
8. ¿Inténtalo de nuevo?: Tenemos el juego en su lugar, pero parece que
no tenemos ninguna opción para regenerar el juego una vez que lo terminemos con
éxito o fracaso Entonces, vamos a trabajar en esto. Tenemos que trabajar en los paneles, y para el panel vacío, no
necesitamos hacer nada ya que es solo un panel vacío. Pero a partir
del panel de imágenes, necesitamos crear una forma de
regenerar los componentes
en la pantalla Entonces, vamos a establecer un método simple,
un método de claro de vacío público. Y bajo este método, primero
eliminaremos
todos los componentes del panel
de imágenes, y también volveremos a invocar el método
create panel que básicamente creará todos los componentes y
los agregará al Sigamos lo mismo
para el panel de letras. Vacío público despeja esta eliminación, y volvamos a invocar el método
create panel, y lo mismo
para el panel de palabras Vacío público claro, esta remoción, y este gran panel. Así que ahora necesitamos la
forma de
llamar realmente a todos estos tres métodos
desde el panel de imágenes, panel letras y panel de palabras. Pasemos bajo el marco del ahorcado, y en la parte inferior aquí, crearemos un método privado de paneles claros
vacíos, si recuerda que el marco andman tiene referencias a
todos nuestros paneles, e invocaremos el método
clear para el panel t s, el panel palabras y el panel Y también necesitaremos el método que se
llamará nuevo juego. Bajo este método, primero
desecharemos el marco j actual. Tendremos que obtener las
coordenadas x e y de nuestra posición
actual de j frame, y también tendremos que
invocar el
método clear panels para que despeje
y regenere los J. Una vez que hayamos hecho eso, estableceremos la ubicación de
nuestro marco J y lo volveremos a colocar para que sea visible para el usuario con todos los paneles regenerados de
manera correcta Ahora tenemos que invocar de alguna manera este
nuevo método de juego de marco hanman, e iremos debajo del panel de palabras y tendremos una
instancia el marco handman Este es un componente,
por lo que se puede inyectar. Entonces tenemos dos ubicaciones donde podemos generar
este nuevo juego. En el caso de que el usuario haya encontrado la palabra y también en el caso de que el usuario no haya
podido encontrar la palabra. Ahora, todo debería estar en
su lugar y tenemos la opción regenerar los componentes básicamente para reiniciar el juego Se ve que el juego se ha reiniciado automáticamente
y todos los paneles se regeneraron
9. Guardar las palabras: Bajo este video,
me gustaría
implementar un mecanismo
que nos
permita extraer palabras aleatorias
de una base de datos en lugar de usar la
palabra de juego predeterminada cada vez. Entonces, como primer paso, tenemos que pasar por debajo de POM dot XML. Y por aquí, necesitamos agregar algunas dependencias específicas
La primera dependencia tendrá el framework group ID
pork spring Eso puso. Para el ID de artefacto, así que inicia GPA, y ahora
la segunda dependencia, tendremos el ID de grupo Para el ID del artefacto, necesitamos configurar el conector de
chillido M Ya que tenemos esta
dependencia en su lugar, tendremos que ir bajo paquete de modelo de juego
como Hangman y crear una clase simple, y llamémosla palabra Esta clase actuará como entidad GPA y nos
permitirá interactuar
con la base Entonces, vamos a expresarlo
con la entidad. Asegúrese de usar el paquete de entidades Java
Persistent. También agreguemos el
nombre de la tabla como las palabras. Ahora necesitaremos configurar una variable específica
que actuará como clave primaria para
nuestra tabla de palabras. Entonces lo anotamos con el
ID y el valor generado. Usaremos el tipo de generación
str como la identidad. Entonces hagámoslo. Ahora, agreguemos una variable privada de ID larga. También me gustaría
configurar un valor de cadena privada. Pero primero, con la
Columna n 16 y es decir. Ahora agregaremos constructor
público,
un constructor predeterminado, que
se requiere para las entidades GPA Usemos el ID para
generar los getters y
setters para nuestro campo de valor El siguiente paso es crear un repositorio de
palabras correspondiente. Por lo que esto está relacionado con
nuestros datos de primavera GPA. Esto necesita ser anotado con el estereotipo del repositorio Y claro, debería
extender el repositorio de JPA. Y como parámetros, necesitamos
configurar la clase modelo y el tipo de la
clave primaria en nuestro caso largo. Para la clase modelo,
de, la palabra clase. El siguiente paso será
crear un servicio para nuestra interacción con la lógica de negocio
y nuestra entidad GPA Entonces llamemos a este
servicio word service, y vamos a configurarlo bajo el paquete de servicio de juegos C
Han Man. Vamos a cambiarlo a una interfaz, y vamos a definir dos métodos. En eso se almacenará
una lista de palabras en la base de datos cuando la aplicación se
ejecutará por primera vez. Otro método es extraer la palabra aleatoria del dabse Necesitaremos una implementación de
clase concreta para implementar realmente
estos métodos. Creé Word service MPL y anoté con seriotipo de
servicio Y esta clase implementa
la interfaz word service. L et's también agregan método
no implementado hasta el momento. Y vamos a inyectar también
el repositorio de palabras. Para la lista de palabras, ya
preparé
para usted una lista de una palabra que se
almacenará en la base de datos. Así que solo puedes copiar y pegar esto sin escribirlos. Ya ves, hay muchas palabras con las
que puedes jugar. Y necesitamos el mecanismo para almacenar
realmente esta
lista de palabras. Bajo el método de base de datos segura, primero
verificaremos si el
método de conteo de repositorio de palabras devuelve cero. Esto significa que no tenemos ninguna palabra almacenada
hasta ahora en la base de datos. Dividiremos la lista de palabras
en una matriz separada por co. Y vamos a iterar sobre esta matriz de palabras Y guarda cada palabra en la base de datos usando el método de guardado del
repositorio de palabras. Para ello, vamos a crear un constructor simple que reciba el valor como parámetro. Este valor es igual a valor y
esto debería solucionar nuestro problema. Almacenaremos directamente una palabra en la base de datos
relacional Muscular L et's se mueven ahora al método
get random word. Para ello, vayamos
al repositorio y
configuremos un método específico. Esto devolverá una palabra, y llamémosla
buscar palabra aleatoria, y usaremos la
notación específica y seleccionaremos. Llamemos a nuestra base de datos ahorcado, ya que el juego es ahorcado, e invoquemos las
palabras andman orden por rand,
límite uno, y la consulta nativa
debe establecerse Esto extraerá
una palabra aleatoria de nuestra base de datos andman que
configuraremos más adelante y de la palabra sable
que configuramos anteriormente en la palabra clase modelo
correspondiente Así que volviendo al servicio de
palabras MPL, usemos el método recién
creado desde el repositorio de palabras Entonces repositorio de Word,
encuentra una palabra aleatoria y recuperemos
el valor de cadena usando el método get value. Ahora, ya que tenemos estos
dos métodos en su lugar, necesitaremos una forma de invocarlos
realmente Para el primer método,
vayamos a la aplicación del juego, y por aquí cuándo comenzará la
aplicación. Primero inyectaremos el servicio correspondiente utilizando
la anotación de cable automático Por supuesto, usando el método
post constructo, Spring invocará automáticamente este método y en esta etapa, vamos a guardar en DV llamada
desde el servicio de palabras De esta manera, todas las palabras se
almacenarán en la base de datos. Ahora, necesitamos la forma invocar este método get
random word Y si recuerdan
en el panel de palabras, nos sentamos por defecto ese juego
como la palabra generada, y necesitamos cambiar esto. Vamos a cablear automáticamente la instancia de servicio de
palabras. Y en lugar de usar el texto del
juego por aquí, usemos el servicio de palabras, obtenga el método de palabras aleatorias. Así que cada vez
que generemos este panel, se extraerá
una nueva palabra
de la base de datos. Ahora un paso importante es
establecer propiedades específicas bajo nuestro archivo de
propiedades de aplicación para que spring pueda
comunicarse con
la base de datos de mSW Entonces estableceremos el nombre de clase del controlador de
fuente de datos de primavera como el nombre de clase que corresponde
a la instancia Muscular. Necesitamos establecer la URL de los datos de
primavera. Esta URL coincide con la
instancia Muscular que configuramos localmente y se conecta a una base de datos de
ahorcado que
creamos Para el nombre de usuario de la fuente de
datos de primavera,
tenemos el nombre de usuario de la
instancia de Mice establecido en root y la
contraseña establecida en contraseña Por supuesto, esto
depende de tu instancia de Mcal. Mostraremos los SQL que
se generan en los registros, y usaremos la actualización
automática DDL en términos de posibles cambios
que serán de a la clase word model para
ser automáticamente almacenados bajo la instancia correspondiente Ahora vamos a establecer el dialecto MSQel. Dialecto Org Hibernate. Empecemos el archivo, MQ igual 57 dialecto Ahora, fui a mi instancia de
Miquel y todo lo que necesitas hacer es crear una base de datos simple
llamada Hand Man una sola vez Comencemos la aplicación. O veamos los registros. Ves que se
están insertando todas las palabras. Este proceso ocurre
solo una vez, y ves que ya tenemos una palabra aleatoria extraída de la base de datos en la interfaz
gráfica de usuario. También podemos revisar el hecho que todas las palabras
han sido
insertadas en la base de datos utilizando un
conteo de la tabla de palabras. Y se ve una sola palabra. Y ahora el juego funciona
mucho más fluido en términos de poder generar palabras aleatorias
cada vez. Se ven palabras largas, palabras
cortas, y así sucesivamente.
10. Cómo agregar un menú: En este video, me
gustaría agregar la opción proporcionar un menú para nuestra interfaz
gráfica de usuario. Cerremos la
instancia actual de la aplicación
y bajo el menú de Guy del juego Cohen
Man Vamos a crear una
clase simple llamada menu. Esta clase será y con el estereotipo de
resorte componente Debe extender la barra de menú J. Este es un componente de
un paquete de columpios Javac. Ahora, necesito
cablear automáticamente el marco hanman. Componente principal. Arreglemos esto y retiremos los cometas. O crea un constructor
para nuestra clase de menú. Después de esto, configuraremos in
place create menu method, bajo nuestro constructor, llamemos a este método
create menu. Bajo este método recién creado, primero
definiremos el menú G
llamado Menú Opciones, y almacenaremos las cadenas de
opciones. Cadena de opciones junto a ella. Ahora vamos a crear algunos elementos de menú
simples que se agregarán
al menú de opciones. Para la opción uno. Tendremos la posibilidad de
generar la palabra, y para la segunda opción, tendremos el caso de uso
para salir de la aplicación. Esta es una forma alternativa de
presionar sobre el patrón x. Ahora, me gustaría agregar también oyentes
clave a nuestros elementos del menú Control más n para
la nueva opción de juego y Control más E
para la opción de salida. Hagamos esto. Opción uno, necesitamos invocar
el acelerador set Y como parámetro, necesitamos
establecer la pulsación de tecla y obtener pulsación de
tecla y tecla de evento clave y n, y necesitamos agregar el
evento de acción como máscara de control Similar para la opción
dos de nuestro menú. Establecer acelerador,
todavía usaremos la pulsación de tecla, y ahora usaremos el evento clave con el evento
E y acción, lo
mismo, máscara de control. Necesitamos implementar la lógica de
negocio para nuestras opciones. Añadiremos oyentes de acción
para ambos. Entonces, para la opción uno
o el generar mundo, necesitaremos implementar
el
método action perform y recibir
un evento de acción E. Y aquí, usamos
la instancia
del juego Hand maan e
invocamos el nuevo juego Para la opción dos,
agregaremos un oyente de acción. Firma del mismo método,
acción realizada, evento de
acción E como parámetro, y esta vez
superaremos la aplicación. Ahora necesitamos agregar tanto la opción uno como la opción
dos al menú de opciones. Y agrega este menú de opciones
al componente de menú principal j
que esta clase extiende. Para poder
utilizar correctamente este menú, necesitaremos inyectarlo
bajo el marco de los hombres. Hagamos esto. Primero tendremos que
usar la notación
auto cableada, menú
privado, ya que nuestra
clase se llama de esta manera. Y por aquí, vamos a invocar
esta barra de menú del conjunto J, y para el parámetro,
usaremos el menú Ahora iniciaremos
la aplicación. Y se puede ver que
los menús de opciones presentan con dos opciones
distintas, generar palabra y salir, presioné sobre la palabra generar. Se ha generado una nueva palabra, y también tienes la
opción de usar pulsaciones de teclas. Usémoslos para
la opción de salida.