JavaRush /Blog Java /Random-ES /Al principio estaba JavaRush
Марат Каджаев
Nivel 20
Санкт-Петербург

Al principio estaba JavaRush

Publicado en el grupo Random-ES
Mi primer período de prueba terminó hace 3 años, pero recién ahora tengo tiempo para escribir un artículo. En la universidad pasé 1 año en diferentes facultades: el primer semestre estudié para ser gerente, en el segundo semestre me transfirí a ingeniería de software. Esperaba que me enseñaran a programar, pero me equivoqué, así que tomé los documentos y decidí aprender todo por mi cuenta. Lo único que le agradezco al profesor es que me aconsejó comenzar con el libro de Stephen Prat “El lenguaje de programación C”. Muy buen libro con muchos problemas prácticos. El libro tomó aproximadamente 2 meses, después de lo cual me encontré con JR en los grupos de un amigo y nos fuimos. Al principio planeé convertirme en desarrollador de Android, pero durante el proceso de aprendizaje el backend me pareció más interesante. Por cierto, la formación duró 3 meses, durante los cuales alcancé el nivel 20, tras lo cual decidí intentar encontrar trabajo. Primero que nada, me mudé a otra ciudad, porque... En el mío no había vacantes para un desarrollador junior de Java. Encontré una empresa, respondí y recibí una tarea de prueba, que me dieron una semana para completarla. Era necesario escribir una aplicación web sencilla utilizando Hibernate, Servlet\JSP y MySQL. De todas estas palabras, sólo sabía que MySQL es una base de datos. Al principio estaba muy molesto, incluso decidí buscar vacantes en algún KFC por ahora, pero finalmente decidí intentar cumplir con las especificaciones técnicas: siempre tendré tiempo para conseguir un trabajo en KFC. Hice la prueba sin parar durante toda la semana y lo logré. Envié la solución, pero estaba “fea”, así que la rehice 4 veces más. La última decisión resultó ser correcta, pero resultó que los desarrolladores ya habían sido reclutados y la próxima contratación sería en 3 meses. Shtosh, está bien. Durante los siguientes 3 meses aprendí html, css, js, sql y php. ¿Qué está haciendo PHP aquí? Necesitaba un lenguaje del lado del servidor que respondiera a las solicitudes y todo eso; los servlets y jsp me parecían demasiado complicados en ese momento. El resultado fue una aplicación web completa con una interfaz terrible, cuyo código publiqué en github para mi cartera. Recién en ese momento habían pasado 3 meses y me escribieron desde la misma empresa y me llamaron para una entrevista y me dieron otra tarea sencilla de prueba de conocimientos de SQL, que realicé en unas pocas horas. La persona con la que hablé sobre el trabajo insinuó que me preguntarían sobre algoritmos y estructuras de datos; todavía no dominaba este tema, pero faltaban 15 días para la entrevista, malditos corredores. El libro de Robert Laforet "Estructuras de datos y algoritmos en Java" me ayudó. No tuve tiempo de leerlo y entenderlo todo en dos semanas, pero aun así aprendí muchas cosas nuevas. Y luego llegó el día de la entrevista, llegué a la hora acordada, me recibieron 2 hombres y comenzó la entrevista. Decir que estaba preocupado es quedarse corto; incluso me temblaba la voz. Preguntaron sobre todo excepto algoritmos y estructuras de datos. Me preguntaron sobre Spring, DI, IoC, Hibernate, cómo funciona la JVM, cómo funciona el GC; no respondí ninguna de estas preguntas. Solo respondí preguntas sobre Java Core (colecciones, excepciones, POO, etc.). Ya en la entrevista me di cuenta de que había fallado, pero aún así fue decepcionante no recibir ningún comentario. Pero identifiqué lagunas de conocimiento y comencé a cerrarlas diligentemente. Encontré trabajo un mes después de la entrevista fallida. Por cierto, encontré la vacante en las discusiones sobre JavaRush. Primero hubo una entrevista por Skype con un reclutador (duró aproximadamente 2 horas). Preguntaron sobre Java Core, GC (ahora sabía cómo funciona), bases de datos, estructuras de datos. Luego el entrevistador me pidió que compartiera la pantalla y escribiera una calculadora. Casi grité de felicidad porque escribí en la calculadora literalmente una semana antes. Confiado en mí mismo, comencé la tarea, pero ya sea por emoción o por alguna otra razón, olvidé parte del algoritmo. La pantalla es compartida: da miedo acceder a Google. Por suerte tuve un 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.
Al principio estaba JavaRush - 1
El trabajo no era oficial, yo desempeñaba el papel de aprendiz de un empresario individual. Escribimos un servicio para crear eventos, vender entradas y todo eso. Recuerdo mi primer día de trabajo: el empresario individual dedicó 15 minutos a explicar lo que había que hacer. - Bueno, ¿está todo claro? - preguntó el IP - Mmm, realmente no, ¿podemos hacerlo una vez más? — Pregunté tremendamente preocupada. El IP volvió a explicar todo. - ¿Ya está claro? - Ahora sí. La verdad es que no entendí NADA. Pero tenía miedo de volver a pedir una explicación; creo que todos los que consiguieron un trabajo me entenderán. La esencia de la tarea era reescribir desde thymeleaf a AngularJS. Afortunadamente, encontré parte del código ya preparado, seguí el ejemplo e hice lo mismo. Entonces no entendí cómo funcionaba, pero logré afrontar la tarea. Luego vinieron las tareas relacionadas directamente con la parte backend. Sólo después de la experiencia práctica con Spring comencé a comprender lo que estaba escrito en el libro "Spring for Professionals". Trabajé allí durante 8 meses, después de lo cual me mudé a otra ciudad, donde rápidamente encontré un trabajo oficial, trabajé durante 2 años y al mismo tiempo cambié mi puesto de trabajo de “Junior” a “Middle”. Ahora me enfrento al hecho de que el trabajo se ha convertido en una rutina y no me produce ni un ápice de placer. Por eso, en ese momento me tomé un descanso, y para evitar que mis dedos se atrofiaran durante el descanso, decidí probar en otro campo: el desarrollo del juego. Es decir, desarrollo de juegos móviles, para empezar, Android, porque... Conozco Java. Te contaré esto ahora en detalle. Sobre nosotros En poco tiempo, se formó un pequeño equipo de 4 personas (incluyéndome a mí): 2 desarrolladores, 1 diseñador de juegos, 1 ingeniero de sonido. Porque Nadie en el equipo tenía experiencia en el campo del desarrollo de juegos y mi tiempo libre era limitado, decidimos implementar un proyecto simple que definitivamente llevaríamos a cabo hasta el final. ¡Ellos lo hicieron! Inicialmente, la fecha límite era el 15 de noviembre, pero, como sabes, terminar un proyecto en la fecha límite original es un pecado. Así que lo terminamos dos semanas después. Según esos La pila es: Java 8 y libGDX.

Sobre el desarrollo

El inicio del desarrollo se puede considerar el 17 de octubre. En total estuvimos 45 días, durante los cuales:
  1. aprendí a trabajar con libGDX;
  2. escribió el código;
  3. dibujó gráficos;
  4. hizo música;
Aquellos que ya han visto el juego pueden tener una pregunta: ¿por qué lleva tanto tiempo si el juego es simple? Sí, esto es cierto y, para ser completamente precisos, el desarrollo en sí (escribir el código) tomó aproximadamente una semana y media. El resto del tiempo se puede dividir entre:
  1. dominar el motor;
  2. hacer dibujos y luego volverlos a dibujar;
  3. escribiendo música;
  4. buscando sonidos en https://freesound.org ;
  5. leer un montón de artículos sobre cómo promocionar juegos
Además, hubo momentos de "tiempo de inactividad" por varias razones: alguien tuvo un examen, alguien tuvo que volver a tomarlo, etc. Puede pasar con seguridad una semana y media, o incluso más, en "tiempo de inactividad". Otra parte del tiempo se dedicaba a los “debates”: casi todos los días surgían ideas sobre qué añadir al juego, por lo que surgían disputas sobre “esto sería superfluo”, “esto no encajaría”, etc. Por lo tanto, abandonamos muchas ideas, por ejemplo, agregar cucarachas corriendo que puedes aplastar y obtener más por ello. puntos: Al principio estaba JavaRush - 2En general, una de las cosas más difíciles, en mi opinión, es decidir de antemano qué habrá en el juego y seguir este plan sin intentar agregar "otra" característica. Así acumulamos estos 45 días. El prototipo del juego estuvo listo después de una semana y media. Durante este período, todavía no teníamos gráficos, así que tomamos algunas cosas del dominio público (por ejemplo, tomamos prestada una hoja de papel de fondo de Doodle Jump) y otras las creamos nosotros mismos en pintura. Al principio estaba JavaRush - 3El juego es técnicamente muy simple: ni siquiera necesitábamos usar box2d (motor de física), podíamos manejar colisiones y calcular la hipotenusa nosotros mismos. De los puntos más interesantes, destacaré los siguientes.
  1. Inicialmente, todos los elementos del juego se generaban aleatoriamente. Aquellos. tenemos proveedores de agujeros negros, tijeras, shurikens, varillas, corazones; los colocamos en una matriz y luego tomamos un proveedor aleatorio y obtenemos un elemento con coordenadas aleatorias. Rápidamente quedó claro que este enfoque “no era muy bueno”, nuestros amigos que participaron en las pruebas nos dijeron lo mismo y nos aconsejaron usar plantillas. Seguramente para aquellos involucrados en el desarrollo de juegos esta es una solución obvia, pero… Somos nuevos en esta área y este fue un muy buen consejo para nosotros.

    Así surgieron varios patrones: valle de tijeras; varillas diagonales: es muy divertido ensamblarlas a alta velocidad (swish-swish-swish con el dedo); y una plantilla más, no sé cómo llamarla; la llamaré como se llama la clase en el código: StraightForwardPattern.

    Al principio estaba JavaRush - 4

    Se volvió más agradable con las plantillas, pero era demasiado predecible o algo así. Por tanto, el mismo azar se convirtió en otra plantilla. Aquellos. Ahora tenemos plantillas “estáticas” y una aleatoria. (aquí hay un meme sobre el equilibrio perfecto).

  2. El principal problema que encontramos fue este. LibGDX llama al método render(float delta) en un bucle sin fin, en el que realmente ocurre toda la renderización de elementos. Trazamos una línea con lápiz de la siguiente manera: tomamos las coordenadas del dedo y colocamos allí la textura. Entonces, si movíamos el dedo por la pantalla muy rápidamente, se formaban “agujeros” porque terminábamos en esos milisegundos en los que el método render(delta) ya había funcionado y aún no había sido llamado nuevamente. El problema se resolvió de manera bastante simple: recordamos la última coordenada en la que se dibujó la textura, obtenemos la siguiente, y si la distancia entre ellas es mayor que X y el dedo no se soltó, llenamos este espacio. Al principio pensamos que esta opción podría no funcionar: las líneas serían angulares, pero nuestros temores fueron en vano: todo funciona como debería.

    En realidad, sobre el juego.

    La jugabilidad no pretende ser única, pero es bastante buena y puede resultar adictiva. Controlas un lápiz, literalmente dibujas en papel, esquivas obstáculos: tijeras, shurikens, agujeros negros. En este caso, el núcleo del lápiz se acaba y es necesario recoger lápices pequeños. En caso de que la varilla llegue a su fin y aún no queden lápices, puedes coger un fragmento de un espejo. Tendrá un efecto durante unos segundos: en lugar de desperdiciar la varilla, se restaurará, pero al mismo tiempo el control se reflejará: te mueves hacia la izquierda y el lápiz se dibuja hacia la derecha. También puedes recoger un corazón que te permitirá encontrar un obstáculo una vez y mantenerte con vida. Cuanto más tiempo mantengas sin levantar el dedo de la pantalla, mayor será el combo, lo que aumenta la velocidad de ganar puntos. Además, la velocidad del juego aumenta gradualmente. A menos que no puedas robar a los korovanos. Al principio estaba JavaRush - 5Inicialmente, planeamos llamar al juego Karan Dash (un lápiz, jajaja, ¿entendido, verdad?), pero luego cambiamos de opinión y nos decidimos por Pencil Dash. La motivación era que este elegante (digo) juego de palabras fuera comprensible sólo para una audiencia de habla rusa. Lanzamos el juego hace un par de días y ahora lo estamos promocionando. Nadie en el equipo tampoco tiene experiencia en esto; todos los conocimientos sobre promoción los hemos obtenido de varios artículos. Publicamos información sobre el juego en varios sitios web/foros de forma gratuita. En cuanto a los canales pagos, solicitamos publicidad en 4PD, a un blogger, varias publicaciones en las páginas públicas de VK y AdMob. Por cierto, esta publicación también es parte de la promoción, así que con el permiso de la administración dejo aquí un enlace al juego. Página del juego en Google Play: haz clic . También dejaré un enlace a nuestro grupo VK, donde puedes dejar reseñas/sugerencias y no perderte ninguna actualización. Haz clic en Te agradeceré que lo instales (¿y si te gusta?), ¡Y para una reseña con una calificación, prometo encender una vela por tu salud! Haz preguntas, si tienes alguna, te responderé.Al principio estaba JavaRush - 6

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION