Desarrollo de juegos Java: libera la creatividad en la codificación | Alexandru Rosu | Skillshare
Buscar

Velocidad de reproducción


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Desarrollo de juegos Java: libera la creatividad en la codificación

teacher avatar Alexandru Rosu, Technology matters

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Lecciones en esta clase

    • 1.

      Descripción general

      1:09

    • 2.

      Primeros pasos

      6:10

    • 3.

      Comencemos de manera simple

      9:49

    • 4.

      Diviértete con imágenes

      11:24

    • 5.

      Eventos de usuarios

      9:20

    • 6.

      Construcción de la escena

      13:20

    • 7.

      Adivina la palabra

      27:11

    • 8.

      ¿Inténtalo de nuevo?

      5:04

    • 9.

      Guardar las palabras

      15:01

    • 10.

      Cómo agregar un menú

      7:38

  • --
  • Nivel principiante
  • Nivel intermedio
  • Nivel avanzado
  • Todos los niveles

Generado por la comunidad

El nivel se determina según la opinión de la mayoría de los estudiantes que han dejado reseñas en esta clase. La recomendación del profesor o de la profesora se muestra hasta que se recopilen al menos 5 reseñas de estudiantes.

4

Estudiantes

--

Proyecto

Acerca de esta clase

Resumen de la clase:

¡Bienvenidos a "Desarrollo de juegos Java: libera la creatividad en la codificación"! Esta clase está diseñada para ofrecer un viaje emocionante y educativo a los jóvenes que desean explorar el mundo de la codificación a través del desarrollo de juegos. Centrándose en la programación, la creatividad y los proyectos prácticos en Java, esta clase tiene como objetivo que el aprendizaje de la programación sea agradable y enriquecedor.

Lo que aprenderás:

  • Conceptos básicos de programación Java:
  • Sienta una base sólida en la programación Java con lecciones divertidas e interactivas diseñadas para jóvenes estudiantes.
  • Introducción al desarrollo de juegos:
  • Explora el fascinante mundo del desarrollo de juegos y aprende los conceptos básicos que subyacen a la creación de juegos interactivos y atractivos.
  • Creatividad desatada:
  • Fomenta la creatividad a través de la codificación mediante el diseño y el desarrollo de tus propios juegos Java.
  • Habilidades de resolución de problemas:
  • Desarrolla habilidades de pensamiento crítico y resolución de problemas a medida que abordas los desafíos de codificación en el contexto del desarrollo de juegos.

Conoce a tu profesor(a)

Teacher Profile Image

Alexandru Rosu

Technology matters

Profesor(a)

Hi,

My name is Alex and I am happy to join skillshare as an teacher.

I have a bachelor degree in Computer Science and a Master Degree in Multi modal distributed virtual environments.

With a strong passion for programming, I enjoy finding solutions to various IT related problems.

My favorite programming language? I can tell you that it's Java, but I have also worked with other languages such as NodeJS, Angular, Typescript, Python, etc in my previous 10 years of experience.

Will be happy to share my knowledge and create great content for everybody who wants to join my classes.

Let's build awesome things together :)

Ver perfil completo

Habilidades relacionadas

Desarrollo Lenguajes de programación Java
Level: Beginner

Valoración de la clase

¿Se cumplieron las expectativas?
    ¡Superadas!
  • 0%
  • 0%
  • Un poco
  • 0%
  • No realmente
  • 0%

¿Por qué unirse a Skillshare?

Mira las galardonadas Skillshare Originals

Cada clase tiene lecciones cortas y proyectos prácticos

Tu membresía apoya a los profesores de Skillshare

Aprende desde cualquier lugar

Ve clases sobre la marcha con la aplicación de Skillshare. Progresa en línea o descarga las clases para verlas en el avión, el metro o donde sea que aprendas mejor.

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.