JavaRush /Blogue Java /Random-PT /No começo havia JavaRush
Марат Каджаев
Nível 20
Санкт-Петербург

No começo havia JavaRush

Publicado no grupo Random-PT
Meu primeiro período de estágio terminou há 3 anos, mas só agora tenho tempo para escrever um artigo. Na universidade passei 1 ano em diferentes faculdades: no primeiro semestre estudei para ser gestor, no segundo semestre me transferi para engenharia de software. Esperava que me ensinassem a programar, mas me enganei, então peguei os documentos e resolvi aprender tudo sozinho. A única coisa pela qual sou grato ao professor é que ele me aconselhou a começar com o livro de Stephen Prat “The C Programming Language”. Livro muito bom, com muitos problemas práticos. O livro demorou cerca de 2 meses, depois disso me deparei com JR em grupos de amigos e lá fomos nós. No início planejei me tornar um desenvolvedor Android, mas durante o processo de aprendizagem o backend me pareceu mais interessante. Aliás, o treinamento durou 3 meses, durante os quais cheguei ao nível 20, depois dos quais decidi tentar encontrar um emprego. Primeiro de tudo, mudei para outra cidade, porque... Não havia vagas para desenvolvedor Java júnior na minha. Encontrei uma empresa, respondi, recebi uma tarefa de teste, que tive uma semana para ser concluída. Foi necessário escrever uma aplicação web simples utilizando Hibernate, Servlet\JSP e MySQL. De todas essas palavras, eu só sabia que MySQL é um banco de dados. No começo fiquei muito chateado, até resolvi procurar vagas em algum KFC por enquanto, mas depois finalmente resolvi tentar cumprir as especificações técnicas - sempre terei tempo para conseguir um emprego no KFC. Fiz o teste sem parar durante toda a semana e consegui. Mandei a solução, mas estava “feia”, então refiz mais 4 vezes. A última decisão acabou por ser correta, mas descobriu-se que os desenvolvedores já haviam sido recrutados e o próximo recrutamento seria em 3 meses. Shtosh, ok. Nos 3 meses seguintes aprendi html, css, js, sql e php. O que o PHP está fazendo aqui? Eu precisava de uma linguagem do lado do servidor que respondesse às solicitações e tudo mais - servlets e jsp pareciam muito complicados para mim naquela época. O resultado foi um aplicativo web completo com uma interface péssima, cujo código postei no github para meu portfólio. Só nessa época já se passaram 3 meses e eles me escreveram da mesma empresa e me chamaram para uma entrevista e me deram outra tarefa simples de teste de conhecimento de SQL, que concluí em poucas horas. A pessoa com quem conversei sobre o trabalho deu a entender que iriam perguntar sobre algoritmos e estruturas de dados - eu ainda não tinha dominado esse assunto, mas faltavam 15 dias para a entrevista, malditos sejam os pilotos. O livro de Robert Laforet "Estruturas de Dados e Algoritmos em Java" me ajudou. Não tive tempo de ler e entender tudo em duas semanas, mas ainda assim aprendi muitas coisas novas. E aí chegou o dia da entrevista, cheguei na hora marcada, 2 homens me encontraram e a entrevista começou. Dizer que eu estava preocupado é um eufemismo; minha voz estava até trêmula. Eles perguntaram sobre tudo, exceto algoritmos e estruturas de dados. Perguntaram sobre Spring, DI, IoC, Hibernate, como funciona a JVM, como funciona o GC - não respondi nenhuma dessas perguntas. Eu só lidei com perguntas sobre Java Core (coleções, exceções, POO, etc.). Já na entrevista percebi que havia falhado, mas ainda assim foi decepcionante não receber nenhum feedback. Mas identifiquei lacunas no conhecimento e comecei a fechá-las diligentemente. Encontrei um emprego um mês depois da entrevista fracassada. Aliás, me deparei com a vaga nas discussões do JavaRush. Primeiro houve uma entrevista por Skype com um recrutador (durando cerca de 2 horas). Perguntaram sobre Java Core, GC (agora eu sabia como funciona), bancos de dados, estruturas de dados. Então o entrevistador me pediu para compartilhar a tela e escrever uma calculadora. Quase gritei de felicidade porque escrevi a calculadora literalmente uma semana antes. Confiante em mim mesmo, iniciei a tarefa, mas por entusiasmo ou por algum outro motivo esqueci parte do algoritmo. A tela é compartilhada - é assustador ir ao Google. Felizmente eu tinha um celular que me salvou. No dia seguinte me ligaram para uma entrevista pessoal e alguns dias depois recebi uma oferta.
No começo havia o JavaRush - 1
O trabalho não era oficial, eu fazia o papel de aprendiz de empresário individual. Escrevemos um serviço de criação de eventos, venda de ingressos e tudo mais. Lembro-me do meu primeiro dia de trabalho - o empresário individual passou 15 minutos explicando o que precisava ser feito. - Bem, está tudo claro? - perguntou o IP - Mmm, na verdade não, podemos fazer isso mais uma vez? — perguntei extremamente preocupado. O IP explicou tudo novamente. - Agora está claro? - Agora sim. Na verdade, não entendi NADA. Mas tive medo de pedir explicação novamente - acho que todo mundo que conseguiu um emprego vai me entender. A essência da tarefa era reescrever do thymeleaf para AngularJS. Felizmente encontrei parte do código pronto e segui o exemplo e fiz o mesmo. Não entendi como funcionava, mas consegui dar conta da tarefa. Depois vieram as tarefas relacionadas diretamente à parte de backend. Só depois da experiência prática com o Spring é que comecei a entender o que estava escrito no livro “Primavera para Profissionais”. Trabalhei lá por 8 meses, depois me mudei para outra cidade, onde rapidamente encontrei um emprego oficial, trabalhei 2 anos e ao mesmo tempo mudei meu cargo de “Júnior” para “Médio”. Agora me deparo com o fato de que o trabalho virou rotina e não traz nenhum prazer. Portanto, no momento em que fiz uma pausa, e para evitar que meus dedos atrofiassem durante o intervalo, resolvi tentar outra área - o desenvolvimento de jogos. Ou seja, desenvolvimento de jogos mobile, para começar, Android, porque... Eu conheço Java. Vou falar sobre isso agora em detalhes. Sobre nós Em pouco tempo, uma pequena equipe de 4 pessoas (inclusive eu) se reuniu: 2 desenvolvedores, 1 designer de jogos, 1 engenheiro de som. Porque Ninguém da equipe tinha experiência na área de desenvolvimento de jogos e meu tempo livre era limitado, decidimos implementar um projeto simples que com certeza iríamos até o fim. Eles fizeram isso! Inicialmente o prazo era 15 de novembro, mas, como vocês sabem, terminar um projeto no prazo original é pecado. Então terminamos duas semanas depois. De acordo com aqueles A pilha é: Java 8 e libGDX.

Sobre o desenvolvimento

O início do desenvolvimento pode ser considerado em 17 de outubro. No total passamos 45 dias, durante os quais:
  1. aprendi a trabalhar com libGDX;
  2. escreveu o código;
  3. desenhou gráficos;
  4. fez música;
Quem já viu o jogo pode ter uma dúvida - por que demora tanto, o jogo é simples? Sim, isso é verdade e, para ser totalmente preciso, o desenvolvimento em si (escrever o código) demorou cerca de uma semana e meia. O resto do tempo pode ser dividido entre:
  1. dominar o motor;
  2. fazer desenhos e depois redesenhá-los;
  3. escrever música;
  4. procurando sons em https://freesound.org ;
  5. lendo vários artigos sobre como promover jogos
Além disso, houve momentos de “tempo de inatividade” por vários motivos - alguém fez um exame, alguém fez uma nova tentativa, etc. Você pode passar com segurança uma semana e meia, ou até mais, em “tempo de inatividade”. Outra parte do tempo era gasta em “debates”: ideias sobre o que acrescentar ao jogo surgiam quase todos os dias, então havia disputas sobre “isso seria supérfluo”, “isso não caberia”, etc. Assim, abandonamos muitas ideias, por exemplo, adicionar baratas correndo que você pode esmagar e ganhar um extra por isso. pontos: No começo havia o JavaRush - 2Em geral, uma das coisas mais difíceis, na minha opinião, é decidir com antecedência o que estará no jogo e seguir esse plano sem tentar adicionar “outra” funcionalidade. Foi assim que acumulamos esses 45 dias. O protótipo do jogo ficou pronto depois de uma semana e meia. Durante esse período, ainda não tínhamos gráficos, então pegamos algumas coisas de domínio público (por exemplo, pegamos emprestada uma folha de papel de fundo do Doodle Jump) e algumas criamos nós mesmos em pintura. No começo havia o JavaRush - 3O jogo é tecnicamente muito simples - nem precisávamos usar o box2d (mecanismo de física), poderíamos lidar com colisões e calcular a hipotenusa nós mesmos. Dos pontos mais interessantes, destacarei o seguinte.
  1. Inicialmente, todos os elementos do jogo foram gerados aleatoriamente. Aqueles. temos provedores de buracos negros, tesouras, shurikens, bastões, corações - nós os colocamos em uma matriz e então pegamos um provedor aleatório e obtemos um elemento com coordenadas aleatórias. Rapidamente ficou claro que esta abordagem “não era muito boa”; nossos amigos que participaram dos testes nos disseram a mesma coisa e nos aconselharam a usar modelos. Certamente para aqueles envolvidos no desenvolvimento de jogos esta é uma solução óbvia, mas... Somos novos nesta área e este foi um conselho muito bom para nós.

    Assim surgiram vários padrões: vale de tesoura; hastes diagonais - é muito divertido montá-las em alta velocidade (swish-swish-swish com o dedo); e mais um modelo, não sei como chamá-lo - vou chamá-lo como a classe é chamada no código: StraightForwardPattern.

    No começo havia o JavaRush - 4

    Ficou mais agradável com os templates, mas era muito previsível ou algo assim. Portanto, o mesmo aleatório tornou-se outro modelo. Aqueles. Agora temos modelos “estáticos” e um aleatório. (aqui está um meme sobre equilíbrio perfeito).

  2. O principal problema que encontramos foi este. LibGDX chama o método render(float delta) em um loop infinito, no qual realmente ocorre toda a renderização dos elementos. Desenhamos uma linha a lápis da seguinte forma: pegamos as coordenadas do dedo e colocamos a textura ali. Então, se movêssemos o dedo pela tela muito rapidamente, formavam-se “buracos” porque acabávamos naqueles milissegundos em que o método render(delta) já havia funcionado e ainda não havia sido chamado novamente. O problema foi resolvido de forma bastante simples - lembramos a última coordenada em que a textura foi desenhada, pegamos a próxima, e se a distância entre elas for maior que X e o dedo não foi solto, preenchemos essa lacuna. A princípio pensamos que esta opção poderia não funcionar - as linhas seriam angulares, mas nossos medos foram em vão - tudo funciona como deveria.

    Na verdade, sobre o jogo

    A jogabilidade não pretende ser única, mas é muito boa e pode ser viciante. Você controla um lápis, literalmente desenha no papel, desviando de obstáculos - tesouras, shurikens, buracos negros. Nesse caso, o miolo do lápis acaba e você precisa pegar lápis pequenos. Caso a haste chegue ao fim e ainda não haja lápis, você pode pegar um fragmento de espelho. Ele terá efeito por alguns segundos - em vez de desperdiçar a haste, ela será restaurada, mas ao mesmo tempo o controle fica espelhado - você se move para a esquerda e o lápis desenha para a direita. Você também pode pegar um coração que lhe permitirá encontrar um obstáculo uma vez e permanecer vivo. Quanto mais tempo você segurar sem tirar o dedo da tela, maior será o combo, o que aumenta a velocidade de ganho de pontos. Além disso, a velocidade do jogo aumenta gradualmente. A menos que você não possa roubar os Korovans. No começo havia o JavaRush - 5Inicialmente planejamos chamar o jogo de Karan Dash (um lápis, ahaha, entendeu, certo?), mas depois mudamos de ideia e optamos por Pencil Dash. A motivação era que esse elegante (estou dizendo) jogo de palavras seria compreensível apenas para um público de língua russa. Lançamos o jogo há alguns dias e agora o estamos promovendo. Ninguém da equipe também tem experiência nisso, reunimos todo o conhecimento sobre promoção em vários artigos. Publicamos informações sobre o jogo em vários sites/fóruns gratuitamente. Quanto aos canais pagos, solicitamos publicidade no 4PD, de um blogueiro, vários posts em páginas públicas do VK e da AdMob. Aliás, esse post também faz parte da promoção, então com autorização da administração deixo aqui o link do jogo. Página do jogo no Google Play: clique em Também deixarei um link para nosso grupo VK, onde você pode deixar críticas/sugestões e não perder nenhuma atualização clique Ficarei grato se você instalar (e se gostar?), e para uma avaliação com avaliação prometo acender uma vela pela sua saúde! Faça perguntas, se tiver alguma, eu responderei.No começo havia o JavaRush - 6

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION