CodeGym /Blogue Java /Random-PT /No começo tinha...
John Squirrels
Nível 41
San Francisco

No começo tinha...

Publicado no grupo Random-PT
No começo, havia ... - 1 O período de experiência do meu primeiro emprego terminou há 3 anos, mas só agora encontrei tempo para escrever um artigo. Passei um ano em diferentes departamentos da minha universidade: no primeiro semestre, estudei administração e, no segundo semestre, mudei para engenharia de software. Eu esperava que eles me ensinassem a programar, mas me enganei. Então, juntei materiais e resolvi aprender tudo sozinha. A única razão pela qual sou grato ao meu professor é que ele recomendou que eu começasse com o e-book de Stephen Pratt, "The C Programming Language". Realmente é um bom livro com muitos exercícios práticos. Passei cerca de 2 meses no livro, depois dos quais me deparei com este curso Java online em grupos de amigos e assim começou. No começo, eu planejava me tornar um desenvolvedor Android, mas o back-end parecia mais interessante para mim à medida que progredia em meu aprendizado. A propósito, levei 3 meses de estudo para chegar ao nível 20, após o que decidi tentar encontrar um emprego. A primeira ordem do dia era mudar para outra cidadejá que o meu não tinha vagas para um desenvolvedor Java júnior. Encontrei uma empresa, candidatei-me e recebi uma tarefa de teste, que me foi dada uma semana para concluir. Eu tive que escrever um aplicativo web simples usando Hibernate, Servlet/JSP e MySQL. Vendo todos esses termos, eu só sabia que o MySQL era um banco de dados. No começo, fiquei muito desapontado. Resolvi até procurar vagas em algum KFC, mas aí resolvi me aventurar na prova. Afinal, eu sempre poderia conseguir um emprego na KFC. Trabalhei sem parar a semana toda e consegui terminar a prova. Enviei minha solução, mas "não ficou bonita", então revisei mais 4 vezes. Minha última solução acabou correta, mas as vagas já haviam sido preenchidas e inscrições adicionais não seriam aceitas por 3 meses. O que você vai fazer, certo? Nos próximos 3 meses, Aprendi HTML, CSS, JS, SQL e PHP. Por que PHP? Eu precisava de uma linguagem de servidor que respondesse a solicitações e tal. Na época, servlets e jsp pareciam muito complicados. No final, produzi um aplicativo da Web completo com uma interface terrível. Publiquei o código no GitHub para meu portfólio. A essa altura já se passaram 3 meses e a mesma empresa me contatou novamente e me convidou para uma entrevista, dando mais uma tarefa simples para testar meus conhecimentos de SQL, que consegui concluir em poucas horas. A pessoa com quem eu estava conversando sobre emprego insinuou que perguntaria sobre algoritmos e estruturas de dados - tópicos que eu ainda não tive tempo de dominar. Dito isso, faltavam 15 dias para a entrevista. Eu tenho esse! O livro de Robert Lafore "Data Structures & Algorithms in Java" me ajudou. Eu não' Não tive tempo de ler e entender tudo em duas semanas, mas ainda assim aprendi muito. E então chegou o dia da entrevista. Cheguei na hora marcada. Dois homens me cumprimentaram e a entrevista começou. Dizer que estava preocupada seria um eufemismo selvagem. Minha voz tremeu. Eles perguntaram sobre tudo, exceto algoritmos e estruturas de dados. Eles perguntaram sobre Spring, DI, IoC, Hibernate, como funciona a JVM, como funciona o coletor de lixo — não consegui responder a nenhuma dessas perguntas. Só respondi com sucesso a perguntas sobre Java Core (coleções, exceções, OOP, etc.). Ainda na entrevista, eu sabia que havia falhado, mas ainda assim fiquei desapontado por não receber nenhum feedback. Em vez disso, identifiquei lacunas em meu conhecimento e comecei a trabalhar diligentemente para preenchê-las. E então chegou o dia da entrevista. Cheguei na hora marcada. Dois homens me cumprimentaram e a entrevista começou. Dizer que estava preocupada seria um eufemismo selvagem. Minha voz tremeu. Eles perguntaram sobre tudo, exceto algoritmos e estruturas de dados. Eles perguntaram sobre Spring, DI, IoC, Hibernate, como funciona a JVM, como funciona o coletor de lixo — não consegui responder a nenhuma dessas perguntas. Só respondi com sucesso a perguntas sobre Java Core (coleções, exceções, OOP, etc.). Ainda na entrevista, eu sabia que havia falhado, mas ainda assim fiquei desapontado por não receber nenhum feedback. Em vez disso, identifiquei lacunas em meu conhecimento e comecei a trabalhar diligentemente para preenchê-las. E então chegou o dia da entrevista. Cheguei na hora marcada. Dois homens me cumprimentaram e a entrevista começou. Dizer que estava preocupada seria um eufemismo selvagem. Minha voz tremeu. Eles perguntaram sobre tudo, exceto algoritmos e estruturas de dados. Eles perguntaram sobre Spring, DI, IoC, Hibernate, como funciona a JVM, como funciona o coletor de lixo — não consegui responder a nenhuma dessas perguntas. Só respondi com sucesso a perguntas sobre Java Core (coleções, exceções, OOP, etc.). Ainda na entrevista, eu sabia que havia falhado, mas ainda assim fiquei desapontado por não receber nenhum feedback. Em vez disso, identifiquei lacunas em meu conhecimento e comecei a trabalhar diligentemente para preenchê-las. Dizer que estava preocupada seria um eufemismo selvagem. Minha voz tremeu. Eles perguntaram sobre tudo, exceto algoritmos e estruturas de dados. Eles perguntaram sobre Spring, DI, IoC, Hibernate, como funciona a JVM, como funciona o coletor de lixo — não consegui responder a nenhuma dessas perguntas. Só respondi com sucesso a perguntas sobre Java Core (coleções, exceções, OOP, etc.). Ainda na entrevista, eu sabia que havia falhado, mas ainda assim fiquei desapontado por não receber nenhum feedback. Em vez disso, identifiquei lacunas em meu conhecimento e comecei a trabalhar diligentemente para preenchê-las. Dizer que estava preocupada seria um eufemismo selvagem. Minha voz tremeu. Eles perguntaram sobre tudo, exceto algoritmos e estruturas de dados. Eles perguntaram sobre Spring, DI, IoC, Hibernate, como funciona a JVM, como funciona o coletor de lixo — não consegui responder a nenhuma dessas perguntas. Só respondi com sucesso a perguntas sobre Java Core (coleções, exceções, OOP, etc.). Ainda na entrevista, eu sabia que havia falhado, mas ainda assim fiquei desapontado por não receber nenhum feedback. Em vez disso, identifiquei lacunas em meu conhecimento e comecei a trabalhar diligentemente para preenchê-las. Só respondi com sucesso a perguntas sobre Java Core (coleções, exceções, OOP, etc.). Ainda na entrevista, eu sabia que havia falhado, mas ainda assim fiquei desapontado por não receber nenhum feedback. Em vez disso, identifiquei lacunas em meu conhecimento e comecei a trabalhar diligentemente para preenchê-las. Só respondi com sucesso a perguntas sobre Java Core (coleções, exceções, OOP, etc.). Ainda na entrevista, eu sabia que havia falhado, mas ainda assim fiquei desapontado por não receber nenhum feedback. Em vez disso, identifiquei lacunas em meu conhecimento e comecei a trabalhar diligentemente para preenchê-las.Encontrei um emprego um mês após minha entrevista fracassada. A propósito, encontrei a vaga de emprego nas discussões sobre CodeGym ( CodeGym é a versão em russo do CodeGym — nota do editor). Primeiro, houve uma entrevista por Skype com um recrutador (durava cerca de 2 horas). Eles perguntaram sobre Java Core, coleta de lixo (agora eu sabia como funciona), bancos de dados e estruturas de dados. O entrevistador me pediu para compartilhar minha tela e escrever uma calculadora. Quase chorei de alegria, pois havia escrito uma calculadora apenas uma semana antes. Confiante em mim mesmo, comecei a tarefa. Mas seja por causa da minha empolgação ou por algum outro motivo, esqueci parte do algoritmo. Minha tela foi compartilhada. Eu tinha medo de consultar o Google. Felizmente, eu tinha meu celular, o que me salvou. No dia seguinte, eles ligaram para uma entrevista pessoal e alguns dias depois recebi uma oferta. Não era uma posição oficial. Minha função era de aprendiz de um único proprietário. Escrevemos um serviço para planejamento de eventos, venda de ingressos etc. Lembro-me do meu primeiro dia de trabalho. Meu chefe levou 15 minutos para explicar o que precisava ser feito. "Está tudo claro?" ele perguntou. "Hmm, não realmente. Você pode repassar mais uma vez?" perguntei com muita preocupação. O chefe explicou tudo de novo. "Está claro agora?" "Sim, agora é." Na verdade, não entendi NADA. Mas eu estava com medo de pedir outra explicação. Acho que qualquer empregado pode entender isso. A tarefa se resumia a portar de Thymeleaf para AngularJS. Felizmente, encontrei um pedaço de código finalizado e o usei como exemplo do que fazer. Não entendi como funcionava, mas terminei a tarefa. Posteriormente, recebi tarefas diretamente relacionadas ao back-end. Só depois de uma experiência prática com o Spring é que comecei a entender o que li no "Spring for Professionals". Trabalhei lá por 8 meses e depois mudei para outra cidade, onde rapidamente encontrei um emprego oficial, trabalhei por 2 anos e mudei meu título de "júnior" para "nível médio" no caminho. Então enfrentei o fato de que meu trabalho havia se tornado rotineiro e não me dava uma gota de prazer. Então eu fiz uma pausa. Para evitar que meus dedos atrofiassem durante o intervalo, decidi tentar outra área: desenvolvimento de jogos. Mais especificamente, desenvolvimento de jogos mobile, pegando Android, pois já conhecia Java. E é sobre isso que vou falar detalhadamente agora. Só depois de uma experiência prática com o Spring é que comecei a entender o que li no "Spring for Professionals". Trabalhei lá por 8 meses e depois mudei para outra cidade, onde rapidamente encontrei um emprego oficial, trabalhei por 2 anos e mudei meu título de "júnior" para "nível médio" no caminho. Então enfrentei o fato de que meu trabalho havia se tornado rotineiro e não me dava uma gota de prazer. Então eu fiz uma pausa. Para evitar que meus dedos atrofiassem durante o intervalo, decidi tentar outra área: desenvolvimento de jogos. Mais especificamente, desenvolvimento de jogos mobile, pegando Android, pois já conhecia Java. E é sobre isso que vou falar detalhadamente agora. Só depois de uma experiência prática com o Spring é que comecei a entender o que li no "Spring for Professionals". Trabalhei lá por 8 meses e depois mudei para outra cidade, onde rapidamente encontrei um emprego oficial, trabalhei por 2 anos e mudei meu título de "júnior" para "nível médio" no caminho. Então enfrentei o fato de que meu trabalho havia se tornado rotineiro e não me dava uma gota de prazer. Então eu fiz uma pausa. Para evitar que meus dedos atrofiassem durante o intervalo, decidi tentar outra área: desenvolvimento de jogos. Mais especificamente, desenvolvimento de jogos mobile, pegando Android, pois já conhecia Java. E é sobre isso que vou falar detalhadamente agora. onde rapidamente encontrei um emprego oficial, trabalhei por 2 anos e mudei meu título de "júnior" para "nível médio" ao longo do caminho. Então enfrentei o fato de que meu trabalho havia se tornado rotineiro e não me dava uma gota de prazer. Então eu fiz uma pausa. Para evitar que meus dedos atrofiassem durante o intervalo, decidi tentar outra área: desenvolvimento de jogos. Mais especificamente, desenvolvimento de jogos mobile, pegando Android, pois já conhecia Java. E é sobre isso que vou falar detalhadamente agora. onde rapidamente encontrei um emprego oficial, trabalhei por 2 anos e mudei meu título de "júnior" para "nível médio" ao longo do caminho. Então enfrentei o fato de que meu trabalho havia se tornado rotineiro e não me dava uma gota de prazer. Então eu fiz uma pausa. Para evitar que meus dedos atrofiassem durante o intervalo, decidi tentar outra área: desenvolvimento de jogos. Mais especificamente, desenvolvimento de jogos mobile, pegando Android, pois já conhecia Java. E é sobre isso que vou falar detalhadamente agora. Resolvi tentar outra área: desenvolvimento de jogos. Mais especificamente, desenvolvimento de jogos mobile, pegando Android, pois já conhecia Java. E é sobre isso que vou falar detalhadamente agora. Resolvi tentar outra área: desenvolvimento de jogos. Mais especificamente, desenvolvimento de jogos mobile, pegando Android, pois já conhecia Java. E é sobre isso que vou falar detalhadamente agora.Meu time. Em pouco tempo, montei uma pequena equipe de 4 pessoas (incluindo eu): 2 desenvolvedores, 1 designer de jogos e 1 engenheiro de som. Como ninguém da equipe tinha experiência em desenvolvimento de jogos e como minhas férias eram limitadas, decidimos implementar um projeto simples que com certeza conseguiríamos terminar. E assim fizemos! Inicialmente, o prazo era 15 de novembro, mas, como você sabe, terminar um projeto dentro do prazo é errado. Então, terminamos com duas semanas de atraso. Nossa pilha de tecnologia consistia em Java 8 e libGDX.

Desenvolvimento

O desenvolvimento começou em 17 de outubro. No total, passamos 45 dias durante os quais:
  1. Aprendemos como usar libGDX.
  2. Nós escrevemos código.
  3. Criamos gráficos.
  4. Nós criamos música.
Qualquer pessoa que tenha visto o jogo pode perguntar: "Por que demorou tanto? O jogo é tão simples." Sim, é verdade e, para ser preciso, a parte de desenvolvimento (escrever o código) levou cerca de uma semana e meia. O resto do tempo foi dividido entre:
  1. Dominar como usar o motor de jogo.
  2. Desenho e redesenho de obras de arte.
  3. Escrever música.
  4. Procurando por sons em https://freesound.org .
  5. Lendo muitos artigos sobre como promover jogos.
Também tivemos momentos de "tempo de inatividade" por vários motivos: alguém fez um exame, alguém fez um teste de recuperação etc. Certamente podemos atribuir uma semana e meia ou mais ao tempo de inatividade. Algum tempo também foi gasto em "debates": novas ideias sobre o que adicionar ao jogo apareciam quase diariamente, então debatíamos: "isso é supérfluo", "isso não vai caber" etc. por exemplo, adicionar baratas correndo que poderiam ser esmagadas para conseguir pontos extras: na minha opinião, uma das coisas mais difíceis foi decidir com antecedência o que estaria no jogo e seguir o plano sem tentar adicionar "só mais um " recurso. Foi assim que esses 45 dias se acumularam. Um protótipo do jogo ficou pronto depois de uma semana e meia. Durante esse período, realmente não tínhamos gráficos, No começo, havia ... - 2O jogo é muito simples em um sentido técnico. Nem precisamos usar o box2d (um mecanismo de física). Podemos lidar com colisões e calcular a hipotenusa por conta própria. Os pontos mais interessantes que destacarei são:
  1. Inicialmente, todos os elementos do jogo foram gerados aleatoriamente. Em outras palavras, colocamos provedores (de buracos negros, tesouras, estrelas ninja, grafite, corações) em uma matriz, obtemos um provedor aleatório, obtemos um elemento com coordenadas aleatórias. Ficou claro rapidamente que essa abordagem "não era muito boa". Os amigos que participaram do teste nos disseram a mesma coisa, recomendando o uso de modelos. Para aqueles envolvidos no desenvolvimento de jogos, esta é provavelmente uma solução óbvia. Mas como éramos recém-chegados ao campo, foi um conselho muito prático para nós.

    Então criamos vários moldes: um vale de tesouras; pontas de lápis - é muito legal coletá-las super rápido (whoosh, whoosh, whoosh com o dedo); e mais um modelo que não sei como chamar — vou apenas dizer como nomeamos a classe em nosso código: StraightForwardPattern.

    No começo, havia ... - 3

    Esses modelos melhoraram, mas se tornaram muito previsíveis de alguma forma. É por isso que adicionamos mais um: um modelo aleatório. Em outras palavras, agora temos alguns modelos "estáticos" e um aleatório (insira aqui o meme "perfeitamente equilibrado").

  2. Aqui está o principal problema que encontramos. LibGDX chama o método render (float delta) em um loop infinito. É aqui que todos os elementos são desenhados. A linha do lápis é desenhada da seguinte maneira: obtemos as coordenadas dos dedos e desenhamos a textura ali. Portanto, se movermos o dedo pela tela muito rapidamente, a linha terá "lacunas" devido aos milissegundos entre as chamadas ao método render(delta).

    A solução foi bem simples: lembramos das últimas coordenadas onde a textura está desenhada, pegamos as próximas coordenadas, e se a distância entre elas for maior que X e o dedo não foi solto, então preenchemos a lacuna. A princípio, pensamos que essa opção poderia não funcionar - as linhas seriam angulares. Mas nossos medos eram infundados, tudo funcionou como deveria.

Sobre o jogo

A jogabilidade não pretende ser única, mas é muito boa e pode atrair os usuários. Você controla um lápis, literalmente desenhando no papel e desviando de obstáculos - tesouras, estrelas ninja e buracos negros. Enquanto isso, a ponta do lápis está acabando e você precisa pegar lápis pequenos. Se o seu lápis estiver acabando antes de você pegar um pouco de lápis, você pode pegar um pedaço de espelho. Por alguns segundos, em vez de consumir a grafite do lápis, ela será restaurada, porém, ao mesmo tempo, os controles serão espelhados — se o dedo se mover para a esquerda, o lápis desenha para a direita. Você também pode pegar um coração que permitirá que você atinja um obstáculo uma vez e permaneça vivo. Quanto mais você mover o lápis sem levantar o dedo, maior será o seu combo, o que significa que você acumulará pontos mais rapidamente. No começo, havia ... - 4A velocidade do jogo também aumenta gradualmente. A única coisa que falta são pássaros raivosos. Inicialmente, planejamos chamar o jogo de Karan Dash (a transliteração da palavra russa para lápis é karandash — ha! Entendeu?), mas depois mudamos de ideia e optamos por Pencil Dash. Fizemos isso porque esse trocadilho gracioso só seria entendido por um público que fala russo. Lançamos o jogo há alguns dias e agora o estamos promovendo. Aqui também ninguém da equipe tem experiência. Adquirimos todo o nosso conhecimento sobre promoção de jogos em vários artigos. Publicamos informações sobre o jogo em vários sites/fóruns gratuitamente. Nossos canais pagos incluíam publicidade em 4pd, publicidade com um blogueiro, várias postagens em grupos públicos no VKontakte e publicidade na AdMob. A propósito, este post também faz parte da nossa promoção, então, com permissão da administração do site, estou incluindo um link para o jogo aqui. Você pode encontrar o jogo no Google Play aqui . Ficaria muito grato se você instalasse (talvez goste!), e se deixar uma avaliação, prometo dar o seu nome a uma criança! :) No começo, havia ... - 6
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION