CodeGym/Blog Java/Random-ES/Al principio había...
John Squirrels
Nivel 41
San Francisco

Al principio había...

Publicado en el grupo Random-ES
Al principio había... - 1 El período de prueba de mi primer trabajo terminó hace 3 años, pero solo ahora encontré tiempo para escribir un artículo. Pasé un año en diferentes departamentos de mi universidad: en mi primer semestre, estudié administración y en mi segundo semestre, cambié a ingeniería de software. Esperaba que me enseñaran a programar, pero me equivoqué. Entonces, recopilé materiales y decidí aprender todo por mi cuenta. La única razón por la que estoy agradecido con mi maestro es que me recomendó comenzar con el libro electrónico de Stephen Pratt "El lenguaje de programación C". Realmente es un buen libro con muchos ejercicios prácticos. Pasé alrededor de 2 meses en el libro, después de lo cual me encontré con este curso de Java en línea en los grupos de un amigo y así comenzó. Al principio, planeé convertirme en desarrollador de Android, pero el backend me parecía más interesante a medida que avanzaba en mi aprendizaje. Por cierto, me tomó 3 meses de estudio para llegar al Nivel 20, después de lo cual decidí intentar encontrar un trabajo. La primera orden del día era mudarse a otra ciudad.ya que el mío no tenía vacantes para un desarrollador junior de Java. Encontré una empresa, solicité y recibí una tarea de prueba, que me dieron una semana para completar. Tuve que escribir una aplicación web simple usando Hibernate, Servlet/JSP y MySQL. Al ver todos estos términos, solo sabía que MySQL era una base de datos. Al principio, estaba muy decepcionado. Incluso decidí buscar ofertas de trabajo en algún KFC, pero luego decidí tomar una oportunidad en la tarea de prueba. Después de todo, siempre podría conseguir un trabajo en KFC. Trabajé sin parar toda la semana y logré terminar la prueba. Envié mi solución, pero "no era bonita", así que la revisé 4 veces más. Mi última solución resultó ser correcta, pero los puestos ya se habían ocupado y no se aceptarían solicitudes adicionales durante 3 meses. ¿Qué vas a hacer, verdad? Durante los próximos 3 meses, Aprendí HTML, CSS, JS, SQL y PHP. ¿Por qué PHP? Necesitaba un idioma de servidor que respondiera a las solicitudes y demás. En ese momento, los servlets y jsp parecían demasiado complicados. Al final, produje una aplicación web completa con una interfaz terrible. Publiqué el código en GitHub para mi portafolio. Para este tiempo habían pasado 3 meses y la misma empresa me contactó nuevamente y me invitó a una entrevista, dándome otra tarea sencilla para probar mis conocimientos de SQL, la cual logré completar en pocas horas. La persona con la que estaba hablando sobre el empleo insinuó que me preguntarían sobre algoritmos y estructuras de datos, temas que aún no había tenido tiempo de dominar. Dicho esto, faltaban 15 días para la entrevista. ¡Tengo esto! El libro de Robert Lafore "Estructuras de datos y algoritmos en Java" me ayudó. yo no No tengo tiempo para leer y entender todo en dos semanas, pero aun así aprendí mucho. Y llegó el día de la entrevista. Llegué a la hora señalada. Dos hombres me saludaron y comenzó la entrevista. Decir que estaba preocupado sería quedarse corto. Mi voz tembló. Preguntaron sobre todo menos sobre algoritmos y estructuras de datos. Preguntaron sobre Spring, DI, IoC, Hibernate, cómo funciona la JVM, cómo funciona el recolector de basura; no pude responder ni una sola de estas preguntas. Solo respondí con éxito preguntas sobre Java Core (colecciones, excepciones, programación orientada a objetos, etc.). Mientras aún estaba en la entrevista, sabía que había fallado, pero aún estaba decepcionado de no recibir ningún comentario. En cambio, identifiqué lagunas en mi conocimiento y comencé a trabajar diligentemente para cerrarlas. Y llegó el día de la entrevista. Llegué a la hora señalada. Dos hombres me saludaron y comenzó la entrevista. Decir que estaba preocupado sería quedarse corto. Mi voz tembló. Preguntaron sobre todo menos sobre algoritmos y estructuras de datos. Preguntaron sobre Spring, DI, IoC, Hibernate, cómo funciona la JVM, cómo funciona el recolector de basura; no pude responder ni una sola de estas preguntas. Solo respondí con éxito preguntas sobre Java Core (colecciones, excepciones, programación orientada a objetos, etc.). Mientras aún estaba en la entrevista, sabía que había fallado, pero aún estaba decepcionado de no recibir ningún comentario. En cambio, identifiqué lagunas en mi conocimiento y comencé a trabajar diligentemente para cerrarlas. Y llegó el día de la entrevista. Llegué a la hora señalada. Dos hombres me saludaron y comenzó la entrevista. Decir que estaba preocupado sería quedarse corto. Mi voz tembló. Preguntaron sobre todo menos sobre algoritmos y estructuras de datos. Preguntaron sobre Spring, DI, IoC, Hibernate, cómo funciona la JVM, cómo funciona el recolector de basura; no pude responder ni una sola de estas preguntas. Solo respondí con éxito preguntas sobre Java Core (colecciones, excepciones, programación orientada a objetos, etc.). Mientras aún estaba en la entrevista, sabía que había fallado, pero aún estaba decepcionado de no recibir ningún comentario. En cambio, identifiqué lagunas en mi conocimiento y comencé a trabajar diligentemente para cerrarlas. Decir que estaba preocupado sería quedarse corto. Mi voz tembló. Preguntaron sobre todo menos sobre algoritmos y estructuras de datos. Preguntaron sobre Spring, DI, IoC, Hibernate, cómo funciona la JVM, cómo funciona el recolector de basura; no pude responder ni una sola de estas preguntas. Solo respondí con éxito preguntas sobre Java Core (colecciones, excepciones, programación orientada a objetos, etc.). Mientras aún estaba en la entrevista, sabía que había fallado, pero aún estaba decepcionado de no recibir ningún comentario. En cambio, identifiqué lagunas en mi conocimiento y comencé a trabajar diligentemente para cerrarlas. Decir que estaba preocupado sería quedarse corto. Mi voz tembló. Preguntaron sobre todo menos sobre algoritmos y estructuras de datos. Preguntaron sobre Spring, DI, IoC, Hibernate, cómo funciona la JVM, cómo funciona el recolector de basura; no pude responder ni una sola de estas preguntas. Solo respondí con éxito preguntas sobre Java Core (colecciones, excepciones, programación orientada a objetos, etc.). Mientras aún estaba en la entrevista, sabía que había fallado, pero aún estaba decepcionado de no recibir ningún comentario. En cambio, identifiqué lagunas en mi conocimiento y comencé a trabajar diligentemente para cerrarlas. Solo respondí con éxito preguntas sobre Java Core (colecciones, excepciones, programación orientada a objetos, etc.). Mientras aún estaba en la entrevista, sabía que había fallado, pero aún estaba decepcionado de no recibir ningún comentario. En cambio, identifiqué lagunas en mi conocimiento y comencé a trabajar diligentemente para cerrarlas. Solo respondí con éxito preguntas sobre Java Core (colecciones, excepciones, programación orientada a objetos, etc.). Mientras aún estaba en la entrevista, sabía que había fallado, pero aún estaba decepcionado de no recibir ningún comentario. En cambio, identifiqué lagunas en mi conocimiento y comencé a trabajar diligentemente para cerrarlas.Encontré un trabajo un mes después de mi entrevista fallida. Por cierto, encontré la vacante en discusiones sobre CodeGym ( CodeGym es la versión en ruso de CodeGym — nota del editor). Primero, hubo una entrevista por Skype con un reclutador (duró alrededor de 2 horas). Preguntaron sobre Java Core, recolección de basura (ahora sabía cómo funciona), bases de datos y estructuras de datos. El entrevistador me pidió que compartiera mi pantalla y escribiera una calculadora. Casi lloré de alegría, ya que había escrito una calculadora apenas una semana antes. Confiado en mí mismo, comencé la tarea. Pero ya sea por mi emoción o por alguna otra razón, olvidé parte del algoritmo. Mi pantalla fue compartida. Tenía miedo de consultar a Google. Afortunadamente, tenía mi teléfono móvil, que me salvó el culo. Al día siguiente me llamaron para una entrevista presencial y un par de días después recibí una oferta. No era una posición oficial. Mi papel era el de aprendiz de un propietario único. Escribimos un servicio de planificación de eventos, venta de entradas, etc. Recuerdo mi primer día de trabajo. Mi jefe se tomó 15 minutos para explicar lo que había que hacer. "¿Está todo claro?" preguntó. "Hmm, no realmente. ¿Puedes repasarlo una vez más?" Pregunté con gran preocupación. El jefe explicó todo de nuevo. "¿Está claro ahora?" "Sí, ahora lo es". En realidad, no entendí NADA. Pero tenía miedo de pedir otra explicación. Creo que cualquier empleado puede entender eso. La tarea se redujo a la migración de Thymeleaf a AngularJS. Afortunadamente, encontré un trozo de código terminado y lo usé como un ejemplo de qué hacer. No entendí cómo funcionaba, pero terminé la tarea. Posteriormente se me asignaron tareas directamente relacionadas con el backend. Solo después de una experiencia práctica con Spring comencé a comprender lo que leía en "Spring para profesionales". Trabajé allí durante 8 meses y luego me mudé a otra ciudad, donde rápidamente encontré un trabajo oficial, trabajé durante 2 años y cambié mi título de "junior" a "nivel medio" en el camino. Entonces enfrenté el hecho de que mi trabajo se había vuelto rutinario y no me daba ni una gota de placer. Así que me tomé un descanso. Para evitar que mis dedos se atrofiaran durante mi descanso, decidí probar suerte en otra área: el desarrollo de juegos. Más concretamente, desarrollo de juegos para móviles, retomando Android, ya que conocía Java. Y eso es de lo que voy a hablar en detalle ahora. Solo después de una experiencia práctica con Spring comencé a comprender lo que leía en "Spring para profesionales". Trabajé allí durante 8 meses y luego me mudé a otra ciudad, donde rápidamente encontré un trabajo oficial, trabajé durante 2 años y cambié mi título de "junior" a "nivel medio" en el camino. Entonces enfrenté el hecho de que mi trabajo se había vuelto rutinario y no me daba ni una gota de placer. Así que me tomé un descanso. Para evitar que mis dedos se atrofiaran durante mi descanso, decidí probar suerte en otra área: el desarrollo de juegos. Más concretamente, desarrollo de juegos para móviles, retomando Android, ya que conocía Java. Y eso es de lo que voy a hablar en detalle ahora. Solo después de una experiencia práctica con Spring comencé a comprender lo que leía en "Spring para profesionales". Trabajé allí durante 8 meses y luego me mudé a otra ciudad, donde rápidamente encontré un trabajo oficial, trabajé durante 2 años y cambié mi título de "junior" a "nivel medio" en el camino. Entonces enfrenté el hecho de que mi trabajo se había vuelto rutinario y no me daba ni una gota de placer. Así que me tomé un descanso. Para evitar que mis dedos se atrofiaran durante mi descanso, decidí probar suerte en otra área: el desarrollo de juegos. Más concretamente, desarrollo de juegos para móviles, retomando Android, ya que conocía Java. Y eso es de lo que voy a hablar en detalle ahora. donde rápidamente encontré un trabajo oficial, trabajé durante 2 años y cambié mi título de "junior" a "nivel medio" en el camino. Entonces enfrenté el hecho de que mi trabajo se había vuelto rutinario y no me daba ni una gota de placer. Así que me tomé un descanso. Para evitar que mis dedos se atrofiaran durante mi descanso, decidí probar suerte en otra área: el desarrollo de juegos. Más concretamente, desarrollo de juegos para móviles, retomando Android, ya que conocía Java. Y eso es de lo que voy a hablar en detalle ahora. donde rápidamente encontré un trabajo oficial, trabajé durante 2 años y cambié mi título de "junior" a "nivel medio" en el camino. Entonces enfrenté el hecho de que mi trabajo se había vuelto rutinario y no me daba ni una gota de placer. Así que me tomé un descanso. Para evitar que mis dedos se atrofiaran durante mi descanso, decidí probar suerte en otra área: el desarrollo de juegos. Más concretamente, desarrollo de juegos para móviles, retomando Android, ya que conocía Java. Y eso es de lo que voy a hablar en detalle ahora. Decidí probar suerte en otra área: el desarrollo de juegos. Más concretamente, desarrollo de juegos para móviles, retomando Android, ya que conocía Java. Y eso es de lo que voy a hablar en detalle ahora. Decidí probar suerte en otra área: el desarrollo de juegos. Más concretamente, desarrollo de juegos para móviles, retomando Android, ya que conocía Java. Y eso es de lo que voy a hablar en detalle ahora.Mi equipo. En poco tiempo, reuní un pequeño equipo de 4 personas (incluyéndome a mí): 2 desarrolladores, 1 diseñador de juegos y 1 ingeniero de sonido. Debido a que nadie en el equipo tenía experiencia en el desarrollo de juegos y debido a que mi tiempo de vacaciones era limitado, decidimos implementar un proyecto simple que definitivamente podríamos terminar. ¡Y así lo hicimos! Inicialmente, la fecha límite era el 15 de noviembre, pero como saben, terminar un proyecto a tiempo no es correcto. Entonces, lo terminamos con dos semanas de retraso. Nuestra pila de tecnología constaba de Java 8 y libGDX.

Desarrollo

El desarrollo comenzó el 17 de octubre. En total, pasamos 45 días durante los cuales:
  1. Aprendimos a usar libGDX.
  2. Escribimos código.
  3. Creamos gráficos.
  4. Creamos música.
Cualquiera que haya visto el juego podría preguntarse: "¿Por qué tomó tanto tiempo? El juego es tan simple". Sí, eso es cierto, y para ser precisos, la parte de desarrollo (escribir el código) tomó alrededor de una semana y media. El resto del tiempo se dividía entre:
  1. Dominar cómo usar el motor del juego.
  2. Dibujar y redibujar obras de arte.
  3. Escribiendo música.
  4. Búsqueda de sonidos en https://freesound.org .
  5. Leer montones de artículos sobre cómo promocionar juegos.
También tuvimos momentos de "tiempo de inactividad" por varias razones: alguien tuvo un examen, alguien más tuvo una prueba de recuperación, etc. Ciertamente podemos atribuir una semana y media o más al tiempo de inactividad. También se dedicó algo de tiempo a los "debates": casi a diario aparecían nuevas ideas sobre qué agregar al juego, por lo que debatíamos: "eso es superfluo", "eso no encajará", etc. Tiramos muchas ideas, por ejemplo, agregar cucarachas corriendo que podrían aplastarse para obtener puntos extra: en mi opinión, una de las cosas más difíciles fue decidir de antemano qué habría en el juego y ceñirse al plan sin tratar de agregar "solo una más". " característica. Así se acumularon estos 45 días. Un prototipo del juego estuvo listo después de una semana y media. Durante este período, realmente no teníamos ningún gráfico, Al principio había... - 2El juego es muy simple en un sentido técnico. Ni siquiera necesitábamos usar box2d (un motor de física). Podemos manejar colisiones y calcular la hipotenusa por nuestra cuenta. Los puntos más interesantes que destacaré son:
  1. Inicialmente, todos los elementos del juego se generaban aleatoriamente. En otras palabras, colocamos proveedores (de agujeros negros, tijeras, estrellas ninja, mina de lápiz, corazones) en una matriz, obtuvimos un proveedor aleatorio, obtuvimos un elemento con coordenadas aleatorias. Rápidamente quedó claro que este enfoque "no era realmente bueno". Los amigos que participaron en las pruebas nos dijeron lo mismo, recomendándonos el uso de plantillas. Para aquellos involucrados en el desarrollo de juegos, esta es probablemente una solución obvia. Pero como éramos principiantes en el campo, fue un consejo muy práctico para nosotros.

    Entonces creamos varias plantillas: un valle de tijeras; minas de lápiz: es genial recolectarlas súper rápido (zumbido, zumbido, zumbido con el dedo); y una plantilla más a la que no sé cómo llamar; solo les diré cómo llamamos a la clase en nuestro código: StraightForwardPattern.

    Al principio había... - 3

    Estas plantillas lo mejoraron, pero se volvió demasiado predecible de alguna manera. Es por eso que agregamos uno más: una plantilla aleatoria. En otras palabras, ahora tenemos algunas plantillas "estáticas" y una aleatoria (inserte aquí el meme "perfectamente equilibrado").

  2. Aquí está el principal problema que encontramos. LibGDX llama al método render (delta flotante) en un bucle infinito. Aquí es donde se dibujan todos los elementos. La línea de lápiz se dibuja de la siguiente manera: obtenemos las coordenadas de los dedos y dibujamos la textura allí. Por lo tanto, si moviéramos el dedo por la pantalla muy rápidamente, la línea tendría "brechas" debido a los milisegundos entre las llamadas al método render(delta).

    La solución fue bastante simple: recordamos las últimas coordenadas donde se dibuja la textura, obtenemos las siguientes coordenadas, y si la distancia entre ellas es mayor que X y el dedo no se ha soltado, entonces llenamos el espacio. Al principio, pensamos que esta opción podría no funcionar: las líneas serían angulares. Pero nuestros temores eran infundados, todo funcionó como debería.

Sobre el juego

La jugabilidad no pretende ser única, pero es bastante buena y puede atraer a los usuarios. Controlas un lápiz, dibujas literalmente en papel y esquivas obstáculos: tijeras, estrellas ninja y agujeros negros. Mientras tanto, la mina de tu lápiz se está acabando y necesitas recoger lápices pequeños. Si su lápiz se está acabando antes de recoger un pequeño lápiz, puede recoger un trozo de espejo. Durante unos segundos, en lugar de consumir la mina del lápiz, se restaurará, sin embargo, al mismo tiempo, los controles se reflejan: si su dedo se mueve hacia la izquierda, el lápiz se dibuja hacia la derecha. También puedes recoger un corazón que te permitirá golpear un obstáculo una vez y seguir con vida. Cuanto más tiempo muevas el lápiz sin levantar el dedo, mayor será tu combo, lo que significa que acumularás puntos más rápido. Al principio había... - 4La velocidad del juego también aumenta gradualmente. Lo único que falta son los pájaros enojados. Inicialmente, planeamos llamar al juego Karan Dash (la transliteración de la palabra rusa para lápiz es karandash, ¡ja! ¿entiendes?), pero luego cambiamos de opinión y nos decidimos por Pencil Dash. Hicimos esto porque este elegante juego de palabras solo sería entendido por una audiencia de habla rusa. Lanzamos el juego hace un par de días y ahora lo estamos promocionando. Aquí, también, nadie en el equipo tiene experiencia. Obtuvimos todo nuestro conocimiento sobre la promoción de juegos de varios artículos. Publicamos información sobre el juego en varios sitios web/foros de forma gratuita. Nuestros canales pagos incluían publicidad en 4pd, publicidad con un blogger, varias publicaciones en grupos públicos en VKontakte y publicidad en AdMob. Por cierto, esta publicación también es parte de nuestra promoción, así que con el permiso de la administración del sitio web, incluyo aquí un enlace al juego. Puedes encontrar el juego en Google Play aquí . Le agradecería que lo instalara (¡tal vez le guste!), y si deja una calificación, ¡prometo nombrar a un niño en su honor! :) Al principio había... - 6
Comentarios
  • Populares
  • Nuevas
  • Antiguas
Debes iniciar sesión para dejar un comentario
Esta página aún no tiene comentarios